一种新的单片机按键处理的思路Word文档下载推荐.docx
《一种新的单片机按键处理的思路Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《一种新的单片机按键处理的思路Word文档下载推荐.docx(8页珍藏版)》请在冰点文库上搜索。
函数入口:
无
函数出口:
作者
:
任丁
***************************************************************************************************/
voidKeyScan(void)
{
if(KEY1==0&
&
KEY2==1&
KEY3==1)
{
key_num=1;
//KEY1键按下,返回1
return;
}
elseif(KEY1==1&
KEY2==0&
key_num=2;
//KEY2键按下,返回2
KEY3==0)
key_num=3;
//KEY3键按下,返回3
key_num=4;
//KEY2键和KEY3键同时按下,返回4
//这里还可以添加更多的按键,和更多的返回值,霸气不?
?
//这里有一个问题啊,就是这里是三个按键的情况,如果为大于三个按键的情况
//而同时要处理多个按键按下的问题用这种ifelseifelseif...else的形式
//就会有一个严峻的问题,不能很好的区分每一种按键的情况,因为这时会有一个非常复杂的逻辑空间
//区别这每一种按键的
//逻辑条件,如果有更多的按键,那么这种方法肯定是行不通的,但是如果只是最简单
//的情况,也就是只会按下一个键的情况,那样的话问题就会简单很多
//总而言之使用ifelseifelseifelseifelse的这种结构的关键就在于每一个if或elseif语句
//都必顺是不同的情况,如果不是这样的话就会有重和漏掉的情况的发生
//对于多个按键的情况有一个较为聪明的解决的办法,就是把在在每一个if或elseif语句里把每一个按键的情况
//都写清楚,使每一种分支都和别的分支都没有逻辑上的包含的被包含的情况都,从而用这种方法构建的ifelseif...else
//是一个没有包含和被包含情况的逻辑关系非常清晰的空间,也就是实际上这是一个数学上的一个非常简单的问题
//最终的可能的情况有2的按键次数次方的个数,一个关键的问题就是书写条件时先写if和elseif里面的语句而后再
//用一个else语句来把剩下的情况全部概括,其实思路就是抓信己知的情况,从而把未知的情况剩出来。
编程时这
//些情况直接用一个else语句来概括,这样的话对于这些没有定义的情况统统返回一个0,在KEY_process()里面这些情况
//全部作为是无效按键的情况,这些情况下的按键触动情况就会直接作为无效按键的情况,KEPY_process()会直接路出
//这些情况从而对于这些情况想当于是没有任何的作用的.只有有作用的按键触发情况才会转而去执行相应的按键处理程序
//特别要注意的一点就是这些有作用的按键触发情况有都是最细小的逻辑体,这样才话能够做到不重不漏,严谨有序
//这一种方法是非常有实践意义和应用价值的
else
key_num=0;
//如果所有按键都没有按下就返回0或255,这里返回0
}
根据扫描到的不同的按键触发情况,执行相应的按键的处理功能
voidKeyProcess(void)
if(KeyScan_Flag==1)
//按键扫描的时间30ms到了
KeyScan_Flag=0;
KeyScan();
if(0<
key_num&
key_num<
255)
//如果有键按下
if(key_num==1)
if(Key1_EnableFlag==0)
//此处添加KEY1按键的处理程序
Key1_EnableFlag=1;
elseif(key_num==2)
if(Key2_EnableFlag==0)
//此处添加KEY2按键的处理程序
Key2_EnableFlag=1;
elseif(key_num==3)
if(Key3_EnableFlag==0)
//此处添加KEY3按键的处理程序
Key3_EnableFlag=1;
//实际上不会走到这一条语句,因为return回的有效值为1到255
//除此之外没有其他值,而如果为0或者大于255时,是不会进入这个分支的
//直接在第二层的else语句执行相应的程序
//按键无效,即无键按下
Key1_EnableFlag=0;
//按键使能标志位置0,使能按键作用
Key2_EnableFlag=0;
Key3_EnableFlag=0;
Key4_EnableFlag=0;
//按键检测使能标志为0,即没有到达按键检测的时间间隔,这里设置为10ms,不进行按键检测