我的按键程序设计,可以处理加速键、一键多功能等情况
后面有P1口行列式键盘程序实例
xwj 发表于 2005-4-15 16:36 侃单片机 ←返回版面 举报该贴
呵呵
看到论坛在讨论按键,也把我设计按键程序的思路说说,欢迎大家拍砖
1、一般都不在键盘程序中延时,而是通过隔一段时间调用(比如10毫秒)来扫描按键,以尽量释放CPU资源;
2、所有键盘程序基本上都是一个模式,可以处理加速键、一键多功能等情况;
3、对外接口只有2个,换用不同硬件的键盘只需把该键盘程序加入工程编译即可,其他不需要作任何改动,非常方便。
基本上都是一个模式:
有键?--YES——和上次相同?--No--Keyold=0;退出
| |
| YES--Keyold++;
| |
| Keyold==首键延时KEYDELAY?--No--退出
| |
| YES--Keyok=1; //按下不放一定时间发首键,后面发加速键
| 保存键值到Keydata;(必要时译码)
| Keyold=KEYDELAY-KEYLOOP(按住不放的延时);--退出
|
No--Keyold==0?--YES--退出
|
N0--Keyok=1; //不为0说明按了键再放开,当然作按键有效处理
保存键值到Keydata;(必要时译码)
Keyold=0;--退出
所有键盘程序对外接口:
unsigned char KeyGetcode(void) //返回按键码
{
key_ok=0;
return(key_data);
}
bit KeyTest(void) //检查有无按键
{
KeyScan(); //键扫描
return(key_ok);
}
//--------------------------------------------------------------------------//
// 源程序大公开