按键实现arm开发板led灯

来源:互联网 发布:arashi smap 地位知乎 编辑:程序博客网 时间:2024/04/28 14:41

1、新建一个工程,命名为“button_led”,再在工程下新建一个文件start.s。

 

/* start.s */

 

  area init,code,readonly                                //该伪指令定义了一个代码段,段名为Init,属性只读
  b begin                                                           //跳转到begin处执行
 
begin                                                   
 
    ldr sp,=1024*4                                   //设置堆栈,注意:不能大于4k, 因为现在可用的内只有4K存 只有4K,nand flash中的代码在复位后会移到内部ram中,此ram只有4K
    export main                                         //声明主函数Main                                                             
    b main                                                 //调用C程序中的main函数
    end

2、再新建一个头文件对端口进行初始化和宏定义。

 

/*  button.h  */

 

#ifndef _LED_
#define _LED_

#define rGPBCON (*((volatile unsigned *)0x56000010))           //定义一个寄存器变量(详细请访问链接地址:http://blog.csdn.net/yimu13/article/details/6329306
#define rGPBDAT (*((volatile unsigned *)0x56000014))            //Port B数据寄存器 #... 要想实现对G口的配置,只要在地址0x56000060中给32位的每一位赋值就可以了#define rGPGCON  ((*(volatile unsigned *)0x56000060))         
#define rGPGDAT  ((*(volatile unsigned *)0x56000064))


  #define LED1_ON rGPBDAT&=(~(0x1<<5))
  #define LED2_ON rGPBDAT&=(~(0x1<<6))
  #define LED3_ON rGPBDAT&=(~(0x1<<7))
  #define LED4_ON rGPBDAT&=(~(0x1<<8))

  #define LED1_OFF rGPBDAT|=(0x1<<5)
  #define LED2_OFF rGPBDAT|=(0x1<<6)
  #define LED3_OFF rGPBDAT|=(0x1<<7)
  #define LED4_OFF rGPBDAT|=(0x1<<8)
 #endif

 

3、在工程中再新建一个源文件,button.c 。

/* button.c */

 

#include "dey.h"

int delay(unsigned int n)
{
 while(n--);
 return 0;
}

int main()
{
 rGPBCON |= 0x15400;
 while(1)
 {
  if((rGPGDAT &0x1)==0x0)
   LED1_ON;
   delay(1000);
  if((rGPGDAT &0x8)==0x0)
   LED2_ON;
   delay(1000);
  if((rGPGDAT &0x20)==0x0)
   LED3_ON;
   delay(1000);
  if((rGPGDAT &0x40)==0x0)
   LED4_ON;
   delay(1000);
  if((rGPGDAT&0x1)==0x1)
         LED1_OFF;
     if((rGPGDAT&0x8)==0x8)
         LED2_OFF;
     if((rGPGDAT&0x20)==0x20)
         LED3_OFF;
     if((rGPGDAT&0x40)==0x40)
         LED4_OFF;
         delay(1000);
  if((rGPGDAT&0x80)==0x0)
       {
         int i=5;
         while(i!=0)
         {
         LED1_ON;
          delay(1000000);
          LED2_ON;
          delay(1000000);
          LED3_ON;
          delay(1000000);
          LED4_ON;
          delay(1000000);
          LED1_OFF;
          delay(1000000);
          LED2_OFF;
          delay(1000000);
          LED3_OFF;
          delay(1000000);
          LED4_OFF;
          delay(1000000);
          i--;
          }
       }        
       if((rGPGDAT &0x800)==0x0)
       {
        LED1_ON;
        LED2_ON;
        LED3_ON;
        LED4_ON;
       }
 }
 return 0;  
}

 

总结:以上代码能编译通过,但如果对每个键在button.h中进行宏定义,则编译能通过,但得不到正确的结果。