本次试验条件,在TQ2440下,使用串口与电脑相连,串口软件DNW。
鉴于前面已经写过一篇关于如何在裸板条件下点亮LED灯,这次介绍如何用查询方式,使用板子上的小按键k1~k4控制led1~4的亮灭。其主要目的还是防止自己不记得...
首先查看电路图如下:
由上图可知道K1对应的中断是EINT1
K1~~EINT1
K2~~EINT4
K3~~EINT2
K4~~EINT3
不知道板子设计人的脑袋是不是被门挤了,设计出这样的对应顺序
接着我们回到2440的手册,找到EINT0~EINT4对应的这一页,看一下是怎样定义的,发现定义成10就激活了中断功能,于是我们在程序里将中断打开,注意各个按钮中断的对应!!
下面是程序:
#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)) int main() { unsigned long dwDat; GPBCON = GPB5_out | GPB6_out | GPB7_out | GPB8_out; //将所有的led设置成打开状态 GPBDAT = 0x3FF; //将所有led关闭 GPFCON = 0x22A; //这里将所有用到的4个中断打开,具体为什么这样请参考上一篇led点亮 while(1){ dwDat = GPFDAT; if (dwDat & 1<<1) //k1 与 10 相与,实际意义是检测这个位置是高、低电平,如果是低,则点亮 GPBDAT |=(1<<5); //led1 亮 else GPBDAT &=~(1<<5); if (dwDat & 1<<4) //k2 与10000 相与 GPBDAT |=(1<<6); //led2 else GPBDAT &=~(1<<6); if (dwDat & 1<<2) //k3 与100相与 GPBDAT |=(1<<7); //led3 else GPBDAT &=~(1<<7); if (dwDat & 1) //k4 与 1 相与 GPBDAT |=(1<<8); //led4 else GPBDAT &=~(1<<8); } }