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
/* button.h */
#ifndef _LED_
#define _LED_
#define rGPBCON (*((volatile unsigned *)0x56000010)) //定义一个寄存器变量(详细请访问链接地址:http://www.voidcn.com/article/p-nwhhuwdl-tb.html)
#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
/* 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中进行宏定义,则编译能通过,但得不到正确的结果。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。