📄 键盘程序.txt
字号:
把我设计按键程序的思路说说,欢迎大家拍砖
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);
}
/*===================================
NOTE:
键盘处理主程序模块
此程序在主程序中调用
===================================*/
void key_scan(void)
{
unsigned int i;
switch(key_state)
{
case 0:
if(key_exist()) //判断有无键按下入口
{
key_time=system_time;
key_before=key_get();
key_state=1;
}
break;
case 1: //消抖入口 if(key_system-key_time>=10)
{
if(key_exist())
{
if(key_before==key_get())
{
key_result=key_before;
key_state=2;
}
else
{
key_before=0xff;
key_result=0xff;
key_state=0;
}
}
else
{
key_before=0xff;
key_result=0xff;
key_state=0;
}
}
break;
case 2: //判断键有没有被释放入
if(key_exist())
{
if(key_before=key_get())
{
return;
}
else
{
key_before=0xff;
key_state=0;
}
}
else
{
key_before=0xffff;
key_state=0;
}
break;
case initalize: //初始化如入口
key_result=0xff;
key_before=0xff;
key_time=0;
key_state=0;
break;
default:
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -