欢迎来到天天文库
浏览记录
ID:13751517
大小:106.00 KB
页数:22页
时间:2018-07-24
《而是通过隔一段时间调用(比如10毫秒)来扫描按键,以尽》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、1、一般都不在键盘程序中延时,而是通过隔一段时间调用(比如10毫秒)来扫描按键,以尽量释放CPU资源;2、所有键盘程序基本上都是一个模式,可以处理加速键、一键多功能等情况;3、对外接口只有2个,换用不同硬件的键盘只需把该键盘程序加入工程编译即可,其他不需要作任何改动,非常方便。基本上都是一个模式:有键?--YES——和上次相同?--No--Keyold=0;退出
2、
3、
4、YES--Keyold;
5、
6、
7、Keyold==首键延时KEYDELAY?--No--退出
8、
9、
10、YES--Keyok=1;//按下不放一定时间发首键,后面发加速键
11、保存键值到Keydata;(必要时译码)
12、Keyold=KEY
13、DELAY-KEYLOOP(按住不放的延时);--退出
14、No--Keyold==0?--YES--退出
15、N0--Keyok=1;//不为0说明按了键再放开,当然作按键有效处理保存键值到Keydata;(必要时译码)Keyold=0;--退出所有键盘程序对外接口:unsignedcharKeyGetCode(void)//返回按键码{key_ok=0;return(key_data);}bitKeyTest(void)//检查有无按键{KeyScan();//键扫描return(key_ok);}//---------------------------------------------
16、-----------------------------////源程序大公开////(c)Copyright2001-2005xuwenjun////AllRightsReserved////V1.00////--------------------------------------------------------------------------////标 题:P1口行列式键盘程序////文件名:xwj_hlkey.c////版 本:V1.00////修改人:徐文军E-mail:xuwenjun@21cn.com////日 期:05-05-13////描 述:P1口行列式键盘
17、程序////声 明:////以下代码仅免费提供给学习用途,但引用或修改后必须在文件中声明出处.////如用于商业用途请与作者联系.E-mail:xuwenjun@21cn.com////有问题请mailtoxuwenjun@21cn.com欢迎与我交流!////--------------------------------------------------------------------------////老版本:无老版本文件名:////创建人:徐文军E-mail:xuwenjun@21cn.com////日 期:05-05-13////---------------------
18、-----------------------------------------------------//#include#include"xwj_hlkey.h"//P1口行列式键盘////#include"xwj_bp.h"//峰鸣器#defineKEYDELAY25/*首键延迟次数*/#defineKEYLOOP10/*连续键间隔次数,需小于KEYDELAY*/unsignedcharkey_bak;unsignedcharkey_temp;unsignedcharkey_old;unsignedcharkey_data;bitkey_ok;//P1口行列式键
19、盘//#defineKEYPIN_LP1//定义键扫描列端口为P1低四位输入//#defineKEYPIN_HP1//定义键扫描行端口为P1高四位扫描输出////内部私有函数//unsignedcharfnKeycode(unsignedcharkey);//根据键盘映射表输出顺序键值////P1口行列式键盘////---------------------------------------------------------------------------//voidKeyScan(void)//键扫描{unsignedcharsccode,recode;KEYPIN_L=KEY
20、PIN_L
21、0x0f;//P1低四位为列线输入//KEYPIN_H=KEYPIN_H&0x0f;//P1高四位为行线发全零扫描码//if((KEYPIN_L&0x0f)!=0x0f)//有键按下{key_temp=键值;//键扫描,获得键值if(key_temp==key_bak){key_old;if(key_old==KEYDELAY)//连续键,不要则把此if屏蔽{key_ok=1;key_data=fnKeycode(key
此文档下载收益归作者所有