您的位置:首页 > 编程语言

GPIO编程(三)键盘控制led灯

2011-07-29 23:37 615 查看
在开发板上还有八个按键,用1234分别把1234灯点亮,5678把1234灯灭掉.

我们通过向寄存器写入数据来控制led灯的亮灭,而键盘是我们不断从中读取数据来获取状态。

在看代码之前,把GPIO编程的知识进行一次总结。

1.GPxCON寄存器,选择引脚功能

a.某位为01 output,输出引脚,GPxDAT写入0/1,引脚输出低电平或高电平

b.某位为00 input,输入引脚,引脚为地址线或用于地址控制,GPxDAT无用。我们就可以获取寄存器的状态即相应引脚的电平状态是高是低,比如键盘。

2.GPxDAT寄存器,用于读写引脚数据

3.GPxUP寄存器,是否使用内部上拉电阻

当GPIO引脚不是低电平也不是高电平的时候,状态由上拉电阻、下拉电阻确定。

当把这些理论知识都弄懂了,再写程序就简单许多了,和我下面的两遍篇led和键盘的驱动程序这些就都能很容易的明白了。

这时候再上代码就没有问题了吧!

#define GPMCON (*(volatile int*)0x7f008820)
#define GPMDAT (*(volatile int*)0x7f008824)
#define GPMPUD (*(volatile int*)0x7f008828)

#define GPNCON (*(volatile int*)0x7f008830)
#define GPNDAT (*(volatile int*)0x7f008834)
#define GPNPUD (*(volatile int*)ox7f008838)

void init();
void delay(int);
void led(int, int);

void myentry()
{
init();
while(1)
{
for (int i = 0; i < 4; i++)
{
if ((GPNDAT>>i)&0x1U)
{
led(i, 1);
}
else
{
led(i, 0);
}
}
}
}

void init()
{
GPMCON = (GPMCON && ~(0xffffU))|0x1111U;
GPMPUD = GPMPUD && ~(0xffU);

GPNCON = GPNCON && ~(0xfffU);
GPNPUD = GPNPUD && ~(0xfffU);
}

void led(int num, int light)
{
if (light)
{
GPKDAT |= 1 << num;
}
else
{
GPKDAT &= ~(1 << num);
}
}
这里并没有使用前面说的用1234分别把1234灯点亮,5678把1234灯灭掉,因为这个程序是在ok6410上写的,它只有六个button,led的寄存器与上一篇led程序也是不一样的.

这里并不局限在什么开发板上,无论是tiny6410,还是ok6410.还是在板子上看下效果吧,如果按到某一个键,相应的灯就亮,松开就不亮了.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: