您的位置 首页 动态

按键程序设计,能够处理加快键、一键多功能等状况

我的按键程序设计,可以处理加速键、一键多功能等情况后面有P1口行列式键盘程序实例xwj发表于2005-4-1516:36侃单片机larr;返回版面举报该贴

我的按键程序规划,能够处理加快键一键多功能等状况
后边有P1口行列式键盘程序实例
xwj发表于2005-4-1516: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;--退出

一切键盘程序对外接口:
unsignedcharKeyGetcode(void)//回来按键码
{
key_ok=0;
return(key_data);
}

bitKeyTest(void)//查看有无按键
{
KeyScan();//键扫描
return(key_ok);
}

//————————————————————————–//
//源程序大公开//
//(c)Copyright2001-2005xuwenjun//
//AllRightsReserved//
//V1.00//
//————————————————————————–//
//标 题:P1口行列式键盘程序//
//文件名:xwj_hlkey.c//
//版 本:V1.00//
//修正人:徐文军E-mail:xuwenjun@21cn.com//
//日 期:05-05-13//
//描 述:P1口行列式键盘程序//
//声 明://
//以下代码仅免费提供给学习用处,但引证或修正后必须在文件中声明出处.//
//如用于商业用处请与作者联络.E-mail:xuwenjun@21cn.com//
//有问题请mailtoxuwenjun@21cn.com欢迎与我沟通!//
//————————————————————————–//
//老版别:老版别文件名://
//创建人:徐文军E-mail:xuwenjun@21cn.com//
//日 期:05-05-13//
//————————————————————————–//
#i nclude
#i nclude“xwj_hlkey.h”//P1口行列式键盘//
//#i nclude“xwj_bp.h”//峰鸣器

#defineKEYDELAY25
#defineKEYLOOP10
unsignedcharkey_bak;
unsignedcharkey_temp;
unsignedcharkey_old;
unsignedcharkey_data;
bitkey_ok;

//P1口行列式键盘//
#defineKEYPIN_LP1//界说键扫描列端口为P1低四位输入//
#defineKEYPIN_HP1//界说键扫描行端口为P1高四位扫描输出//

//内部私有函数//
unsignedcharfnKeycode(unsignedcharkey);//依据键盘映射表输出次序键值//

//P1口行列式键盘//
//—————————————————————————//
voidKeyScan(void)//键扫描
{
unsignedcharsccode,recode;
KEYPIN_L=KEYPIN_L|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_temp);//键解码
key_old=KEYDELAY-KEYLOOP;
}
}
else
{
key_old=0;
key_bak=key_temp;
}
}
else//键抬起
{
if(key_old)
{
key_ok=1;
key_data=fnKeycode(key_temp);//键解码

}
key_old=0;
}
KEYPIN_H=KEYPIN_H|0xf0;
}

//—————————————————————————//

unsignedcharKeyGetcode(void)//回来按键码
{
key_ok=0;
return(key_data);
}

bitKeyTest(void)//查看有无按键
{
KeyScan();//键扫描
return(key_ok);
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/news/dongtai/261866.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部