功能
通过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