|
发表于 2013-9-27 19:40:31
|
显示全部楼层
给你一个参考,本站上有这个方法使用的帖子,你自己试一下,然后再深入的分析和理解它。
硬件工程师和纯软件出身的工程师处理方法和思路不同,硬件工程师直接,简单。
假定你有4个KEY,在PA口的PA0\PA1\PA2\PA3上,释放状态为逻辑1,按下情况为逻辑0,按下按键和释放按键的消抖为20ms(即按下和释放操作20ms后肯定已经处在稳定状态)
//按键底层扫描处理函数。该函数测试4个按键,在1个按键按下和释放的整个过程中,只返回一次1(发生在检测到第一次按下按键时),反映在相应的bit位上,4个按键之间独立不受干扰。
#define KEY_port PA
#define KEY_mask 0x0f //4个按键接PA口低4位,高4位屏蔽掉
char read_key()
{
static char key_old; //必须为STATIC型
char key_new,key_return;
key_new = (KEY_port & KEY_mask) ^ KEY_mask;
key_return = (key_new ^ key_old) & key_new;
key_old = key_new;
return (key_return;)
}
=====================
//主代码
char key_scan_ok
T/C_intrupt() //使用一个定时中断,间隔20ms
{
key_scan_ok = 1;
}
main()
{
.........
if (key_scan_ok)
{
key_scan_ok = 0;
key_value = read_key();
switch (key_value)
{
case 0x01:
传送A;
break;
case 0x02:
传送B;
break;
case 0x03:
传送A;
传送B;
break;
case 0x04:
case 0x05:
...............
case 0x0f: //15个CASE,0x00无按键
}
}
} |
|