此次实验实现的是当按键K1被按下是LED1亮,当按键k2按下时LED2亮,当按下K3时LED3亮,按下k4时LED4亮,按下k5时全亮,按下k6都不亮。
1、新建工程led 并添加文件start.s 和mian.c
在start.s
area init,code,readonly
start
ldr sp,=1024*4
import main
bl main
end
在main.c
#define rGPBCON (*((volatile unsigned *)0x56000010))
#define rGPBDATA (*((volatile unsigned *)0x56000014))
#define rGPGCON (*((volatile unsigned *)0x56000060))
#define rGPGDATA (*((volatile unsigned *)0x56000064))
#define LED1_ON rGPBDATA &=(~(1<<5))
#define LED2_ON rGPBDATA &=(~(1<<6))
#define LED3_ON rGPBDATA &=(~(1<<7))
#define LED4_ON rGPBDATA &=(~(1<<8))
#define LED1_OFF rGPBDATA |=(1<<5)
#define LED2_OFF rGPBDATA |=(1<<6)
#define LED3_OFF rGPBDATA |=(1<<7)
#define LED4_OFF rGPBDATA |=(1<<8)
void delay(int a)
{
while(a--);
}
int main()
{
rGPBCON = 0x15400;
rGPGCON = 0x80A882;
LED1_OFF;
LED2_OFF;
LED3_OFF;
LED4_OFF;
while(1)
{
if((rGPGDATA&=(1<<0)) == 0)
{
delay(100);
if((rGPGDATA&=(1<<0)) == 0)
{
LED1_ON;
delay(100000);
}
}
if((rGPGDATA&=(1<<3)) == 0)
{
delay(100);
if((rGPGDATA&=(1<<3)) == 0)
{
LED2_ON;
delay(100000);
}
}
if((rGPGDATA&=(1<<5)) == 0)
{
delay(100);
if((rGPGDATA&=(1<<5)) == 0)
{
LED3_ON;
delay(100000);
}
}
if((rGPGDATA&=(1<<6)) == 0)
{
delay(100);
if((rGPGDATA&=(1<<6)) == 0)
{
LED4_ON;
delay(100000);
}
}
if((rGPGDATA&=(1<<7)) == 0)
{
delay(100);
if((rGPGDATA&=(1<<7)) == 0)
{
LED1_ON;
LED2_ON;
LED3_ON;
LED4_ON;
delay(100000);
}
}
LED1_OFF;
LED2_OFF;
LED3_OFF;
LED4_OFF;
}
return 0;
在开始我创建了个common.h文件用来存放头文件,#include"common.h"在mian.c中已添加, 在编写好以后执start.s和common.h和main.c时,在main.c 中发现很多错误,最后我将common.h 删了,将头文件全部放在main.c 中执行成功。求解!