功能
通过GPIO,实现按键1点亮LED1,按键2点亮LED2……
说明
1)因为2440的按键只涉及行,所以在扫描按键时比2410简单了很多
2)在进行移位操作之前,必须进行数据寄存器的初始化,否则会出错(硬件特性)
源码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
/***************************************************************************** *****函数名:main() *****功 能:通过GPIO,实现按键1点亮LED1,按键2点亮LED2 *****说 明: *****************************************************************************/ #include "2440addr.h" #define clrbit(var, bit) ((var) &= ~(1 << (bit))) //把某一位清0 int main ( void )
{ rGPGCON &= (~((3<<22)|(3<<14)|(3<<12)|(3<<10)|(3<<6)|(3<<0))); //设置按键为输入
rGPGUP = 0x0; //GPG上拉使能
rGPBCON &= (~((3<<16)|(3<<14)|(3<<12)|(3<<10)|(3<<0))); //LED1~4输出位清零
rGPBCON |= ((1<<16)|(1<<14)|(1<<12)|(1<<10)|(0<<0)); //设置LED1~4为输出
rGPBUP =0x3ff; //11 1111 1111,GPB上拉禁止
rGPBDAT=0x3ff; //在进行移位操作之前必须进行数据寄存器的初始化
while (1)
{
if (0==(rGPGDAT & (1<<0))) //GPG0
{
clrbit(rGPBDAT, 5); //LED1
}
else if (0==(rGPGDAT & (1<<3))) //GPG3
{
clrbit(rGPBDAT, 6); //LED2
}
else if (0==(rGPGDAT & (1<<5))) //GPG5
{
clrbit(rGPBDAT, 7); //LED3
}
else if (0==(rGPGDAT & (1<<6))) //GPG6
{
clrbit(rGPBDAT, 8); //LED4
}
}
} |
本文转自infohacker 51CTO博客,原文链接:http://blog.51cto.com/liucw/1197218