书中讲解用开关控制LED的实验,哪位做出来了,帮忙看看?
大家好:
我用的是TQ2440板子,LED1~4对应GPB5~8,K1~K4对应GPF1,GPF4,GPF2,GPF0.
我比着书上那个思路做了个简化的:四个开关都可以控制LED1的亮灭。
程序如下:
#define GPBCON (*(volatile unsigned long *)0x56000010)
#define GPBDAT (*(volatile unsigned long *)0x56000014)
#define GPFCON (*(volatile unsigned long *)0x56000050)
#define GPFDAT (*(volatile unsigned long *)0x56000054)
#define GPB5_out (1<<(5*2))
#define GPB6_out (1<<(6*2))
#define GPB7_out (1<<(7*2))
#define GPB8_out (1<<(8*2))
#define GPF1_in ~(3<<(1*2))
#define GPF4_in ~(3<<(4*2))
#define GPF2_in ~(3<<(2*2))
#define GPF0_in ~(3<<(0*2))
int main(void)
{
unsigned long data;
GPBCON = GPB5_out | GPB6_out | GPB7_out | GPB8_out;
GPFCON = GPF1_in & GPF4_in & GPF2_in & GPF0_in;
GPBDAT = 15<<5;(我的板子一上电,四个灯全亮,先把他灭了)
while(1)
{
data = GPFDAT;
if(data & (1<<1)) //K1
{
GPBDAT = 0x00000020;
}
else
{
GPBDAT = 0x00000000;
}
if(data & (1<<4)) //K2
{
GPBDAT = 0x00000020;
}
else
{
GPBDAT = 0x00000000;
}
if(data &(1<<2)) //K3
{
GPBDAT = 0x00000020;
}
else
{
GPBDAT = 0x00000000;
}
if(data & (1<<0)) //K4
{
GPBDAT = 0x00000020;
}
else
{
GPBDAT = 0x00000000;
}
}
return(0);
}
这样,应该是上电之后,灯全灭,不管按下哪个开关,LED1都应该亮才对。
但是实际是:不管按下哪个开关,灯都不亮。
请前辈讲解下。谢谢!