现在的位置: 首页 > 综合 > 正文

用查询方式,用按键控制led灯亮灭

2014年02月20日 ⁄ 综合 ⁄ 共 1065字 ⁄ 字号 评论关闭

本次试验条件,在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);
}
}


抱歉!评论已关闭.