少年西游记红色仙灵:说说按键处理
来源:百度文库 编辑:中财网 时间:2024/04/29 17:05:04
说说按键处理
手心 发表于 2006-11-13 18:34:00 1 推荐 单片机书本上对于键盘处理往往都给出了几种不同的方案,但是在一个实际的系统应用中,往往用起来感觉不是很好。主要的弊端就是实时性不好。无论是采用中断方式还是采用扫描方式,实行性都不能很好的达到要求。
对于键盘,大家都知道有抖动,最最常用的消除抖动的方法就是用软件消抖。但是书本上的软件消抖基本都是用一个Delay函数来实现10-20ms的延时。而一个前后台的系统,也许一个程序运行下来也就20ms,而由于有键盘延时判断的存在,将导致整个系统运行都慢了下来。
对此,实际应用中有一种处理方法。该方法有三条主线来处理。
第一条线:
采用外部中断方式(或者扫描方式)检查是否有键被按下。如果有,仅仅将一个标志位置位,表示有键按下了。姑且定义这个标志位为key.flag。如果进入中断,则 key.flag = 1;
第二条线:
系统应该提供一个10ms的定时器,作为系统的时间片。在定时中断内检测是否key.flag==1,如果该标志位为1,则表示已经检测到有键按下,则启动计时,计时变量定义为key.times。可以用代码if( key.flag==1) {key.times++}来统计检测到按键以后进入10ms系统定时中断的次数。
第三条线:
键扫描处理,主程序则主要判断是否有键被按下,按下以后是否计时变量大于某个值(该值决定你想定义的消抖时间)。比如如下处理:
(键对应引脚没有按下时为高电平,按下则变低电平,采用下降沿中断方式检测按键)
void key_scan(void)
{
if(key.flag==1) //先判断是否有键按下
{
if( key.times >2 ) //再判断是否离检测到按键有超过20ms
{
if( KEYPIN == 0 ) //对应引脚是否还为0
{
key.value = 0xxx; //获取键值
}
}
}
}
对于采用扫描方式的,只需要将中断内 key.flag = 1;的语句放到键扫描程序内就可以了。 可以看到,对于这样的三线处理键盘的方式,外部中断内和时间中断内都只有几条语句就可以处理。
同时,抖动延时的过程由于放到了定时中断内,这个时间可以用来做其他的任务,大大的提高了系统的实时性能。
对于语音多段播放的程序处理,显示闪烁的处理等需要大量延时的程序,都可以采用这样的结构,可以大大的提高系统的实时性,若各位对于语音多段播放的处理方式希望了解如何实现,过段时间在写这个。
手心 发表于 2006-11-13 18:34:00 1 推荐 单片机书本上对于键盘处理往往都给出了几种不同的方案,但是在一个实际的系统应用中,往往用起来感觉不是很好。主要的弊端就是实时性不好。无论是采用中断方式还是采用扫描方式,实行性都不能很好的达到要求。
对于键盘,大家都知道有抖动,最最常用的消除抖动的方法就是用软件消抖。但是书本上的软件消抖基本都是用一个Delay函数来实现10-20ms的延时。而一个前后台的系统,也许一个程序运行下来也就20ms,而由于有键盘延时判断的存在,将导致整个系统运行都慢了下来。
对此,实际应用中有一种处理方法。该方法有三条主线来处理。
第一条线:
采用外部中断方式(或者扫描方式)检查是否有键被按下。如果有,仅仅将一个标志位置位,表示有键按下了。姑且定义这个标志位为key.flag。如果进入中断,则 key.flag = 1;
第二条线:
系统应该提供一个10ms的定时器,作为系统的时间片。在定时中断内检测是否key.flag==1,如果该标志位为1,则表示已经检测到有键按下,则启动计时,计时变量定义为key.times。可以用代码if( key.flag==1) {key.times++}来统计检测到按键以后进入10ms系统定时中断的次数。
第三条线:
键扫描处理,主程序则主要判断是否有键被按下,按下以后是否计时变量大于某个值(该值决定你想定义的消抖时间)。比如如下处理:
(键对应引脚没有按下时为高电平,按下则变低电平,采用下降沿中断方式检测按键)
void key_scan(void)
{
if(key.flag==1) //先判断是否有键按下
{
if( key.times >2 ) //再判断是否离检测到按键有超过20ms
{
if( KEYPIN == 0 ) //对应引脚是否还为0
{
key.value = 0xxx; //获取键值
}
}
}
}
对于采用扫描方式的,只需要将中断内 key.flag = 1;的语句放到键扫描程序内就可以了。 可以看到,对于这样的三线处理键盘的方式,外部中断内和时间中断内都只有几条语句就可以处理。
同时,抖动延时的过程由于放到了定时中断内,这个时间可以用来做其他的任务,大大的提高了系统的实时性能。
对于语音多段播放的程序处理,显示闪烁的处理等需要大量延时的程序,都可以采用这样的结构,可以大大的提高系统的实时性,若各位对于语音多段播放的处理方式希望了解如何实现,过段时间在写这个。
诺基亚3300的按键不灵,如何处理?
键盘按键反应缓慢该怎么处理?
键盘按键反应缓慢该怎么处理?
键盘的按键上的灰尘怎么处理
请说说电脑键盘上不常用的按键有什么作用?
大家能不能说说自己处理人际关系的方法?
用矛盾的统一性与斗争性说说怎样处理人际关系
数码照片的嘴唇部分发红,怎么处理?详细说说好吗
C语言编辑器中有没有文本处理的按键啊?
我的手机打开盖后屏不亮,要按键后才可以,而且关盖后屏也亮。请问怎么处理?
电脑中毒,无法控制键盘,所有按键无效,但电脑被强迫输入乱码,如何处理?
请说说与汉字处理相关的各种编码对于汉字处理有哪些意义?
说说!!!
说说~~~~~
说说你们体会的最尴尬的事的处理方法。。。?
发错药又及时处理根据这个案例说说护理伦理的重要性和方法
大家说说是我对还是她错.!应该怎么处理谢谢大家
按键问题
魔兽世界按键
按键错位
鼠标按键?
鼠标按键?
mame按键
窗口按键