2024年3月27日发(作者:)
2010 年 第19卷 第 2 期 计 算 机 系 统 应 用
微控制器中按键处理技巧及应用
①
李运兵 (华南农业大学广东 广州 510642 )
摘 要: 针对微控制器中按键处理问题,列举不同场合对按键处理的设计优化。重点讨论了非编码键盘的抖动及
干扰消除优化。结合ADC按键,设计一种新型软件滤波方法--阀值平滑滤波,详细介绍了其软硬件
的实现过程。通过验证, 此方法既能有效扩展键盘又能实现消抖,有效提高微控制器资源的利用。
关键词: 按键消抖;键盘扩展;软件滤波;资源优化;ADC
Skills and Application of Key Processing in Micro-Controller
LI Yun-Bing
(South China Agricultural University, Guangzhou 510642 , China)
Abstract: Several ways are listed about micro-controller’s key’s processing in this paper. It mainly discusses how to
eliminate the mechanical button response and optimize the response time in programming. It proposes a new
ADC filter method of the micro-controller, emphasizing upon the processing reality. It uses interrupt
sampling and valve value smooth filter in programming to eliminate key’s vibration and expand the
keyboard. The experiments prove that this method enhances the microcontroller optimal resources and
improves the performance.
Keywords: key-vibration eliminate; keyboard interface expand; software filter; resources optimization; A/D conversion
实现按键滤波,使按键识别的准确性得到提高。
按键是工业应用中常用的输入设备, 一般分为编
码键盘和非编码键盘。 编码键盘闭合键的识别由专用
的硬件译码器实现。非编码键盘由按键开关、键的识
别以及去抖动
[1]
功能软件完成。处理按键主要进行按
键消抖、防串键、按键识别与译码等工作。机械按键
由于触点的弹性及电压突跳等原因, 在触点闭合和断
开的瞬间会出现抖动。由于处理系统的处理速度非常
高可以感知抖动不对按键扫描进行滤波系统容易误操
作
[2]
。不同的场合对按键要求有很大的不同,并且与系
统本身的资源也有关系
[3]
。当处理器具有ADC功能
[4]
,
可用来按键扩展
[5]
。由于ADC按键是根据ADC的值
来进行按键判断,在处理按键数目较多的情况时, 往
往会出现按键不可靠的问题。本文在介绍各种按键扩
展及按键消抖动技术的基础上,提出一种实用可靠的
ADC按键扩展方法,通过软件中采用阀值平滑滤波来
① 收稿时间:2009-06-07
1 引言
2 按键的扩展及消抖技术
2.1 按键硬件扩展
按键电路一般采用较简单的开关式按键电路,在
有些嵌入式系统中采用按键芯片:如μPD16312[6]和
ZLG7290等。实际应用中一般用一个按键对应一个
I/O口,根据I/O口的电平发生变化来判断按键的状
态。若控制系统需要较多的按键,处理器的引脚有限,
添加总线型按键芯片不够现实,此时可进行按键扩展。
一般采用行列式矩阵键盘,在一些特殊要求场合,还可
通过上拉电阻及二极管进行扩展。图1中的5x5键盘
即利用到这些技巧。对应程序流程为:先对5个接地
的按键状态进行扫描,再进行行列式键盘扫描。另一种
常见的方法采用拔码开关,利用不同拔码组合进行功
能设置,一般n个拔码开关可组成
2
n
种状态。
Experiences Exchange 经验交流
195
计 算 机 系 统 应 用 2010 年 第19卷 第 2 期
图1 5x5键盘
2.2 按键软件扩展
采用菜单键,设是当所有的功能都在同一个优先
级内,一个为功能选择键Menu,另两个设置为调整按
键。当在Menu按键中进入功能菜单,再按另两个键调
节实现相应调节。此外利用组合按键也能使系统的使
用效率得到提高
[7]
。
2.3 按键消抖动处理
机械按键在按键闭合前后会有按键抖动。由于单
片机处理的速度可能会产生误判。硬件消抖动可以利
用RS触发器及利用寄存器等功能消抖。在单片机中常
利用RS触发器,CPLD中经常利用寄存器及计数器进
行处理。在软件上使用滤波实现消抖动
[8]
。
2.4 软件按键消抖
常用3种方法:①延时法,通过软件延时时间
(10ms左右)后再次判断,如果再次采样值与上次一样,
认为是有效的按键。②定时器判断法,当第一次扫描到
有按键就开启定时器,当到定时器时间后,再次扫描判
断。③ 循环扫描法:在主程序while(1)内插入扫描, (扫
描次数视系统主频而定)主程序每执行一次后进行变
量累加,判定与原来的值是否相等。这3种方法第一种
耗时间较多,影响整个系统的执行效率,第二种方法占
用定时器,第三种方法占用的资源较少,且可以作相应
的按键处理,实现按键加速,长按键等功能。
的电压保持恒定。通过一组电阻分压串联,为输出不
同的电压,电路在没有按键状态下为完全断开,节省
系统功耗;当按键接通时, 微处理器通过A/D 转换后
对读取的电压值比较判断便可识别是否有按键按下。
当按键个数较多时,系统分辨率较高,采用精密电阻
提高系统的可靠性。微处理器判断按键动作时既受到
按键抖动的影响,还受到电源波动及空间噪声等因素
的影响
[9]
。微处理器对这些干扰及抖动容易进行误处
理。通过实验观察,干扰经常以窄脉冲出现,而机械抖动
为一系列的杂波。根据波形特性,可将每次按键响应
分为抖动区和平稳区两部分如图3所示。
图2 ADC按键电路
图3 ADC按键响应
3.2 ADC按键软件滤波过程的实现
针对ADC按键及按键响应这些特点,笔者提出一
种实用滤波—阀值平滑滤波法,在键盘的扩展的同时
消除抖动干扰。程序的流程图4所示。在中断中进行
ADC采样, 然后进行按键值判断,若采集的值>0则
认为可能有按键行为,继而连续采集多次(程序中为6
次)。每次采样值通过与上几次的采样均值进行比较,
当它们之间的差值绝对值在阀值范围内则认为是稳定
期间采样,所采集的是有效值。反之则认为是无效值,
当数值有突变很短则认为是干扰,当波动较大且大于
某确定值则认为是抖动期间或电压波动,系统会自动
视为此次采样无效,开始下一轮采样。当采样次数到
6次时进行按键处理。主程序中通过二分法查找判断
3 ADC按键扩展技术
3.1 ADC按键原理
ADC按键电路如图2 电路所示,其硬件电路简
单而且可以节省处理器的I/O资源。A/D 转换的方法
不仅成本低、功耗少、体积小。一般微控制器采样保
持电路为逐次逼近型, 以确保在转换过程中输入ADC
196
经验
交流 Experiences Exchange
2010 年 第19卷 第 2 期 计 算 机 系 统 应 用
图4 程序流程图
ADC值所处的范围来判断键值,如果连续两次解析键
值一致则认为是长按,进行按键加速处理。文中给出
中断ADC采样部分C滤波程序:
filter_value=resolution; //根据ADC的分辨率
定义
ADC_sum+=rADCDAT; //求和
ADC_count++; //按键次数记录
if(ADC_count>5) //求均值
{ aver_value=ADC_sum/6;
ADC_count=0;
ADC_sum=0;
ADC_flag=1;
}
else { aver_value=ADC_sum/ADC_count; }
if((rADCDAT-aver_value>filter_value)||(aver_valu
e-rADCDAT> filter_value)) //差值
与阀值比较,过大则无效
{ADC_count=0;
ADC_flag=0;}
else //有效采样,判断次数
{if(ADC_flag)
key_processing(aver_value); //转到按键处理程
序
}
}
ADC_sum=0;break;
4 结论
本文介绍了利用微处理器按键扩展技术,并提出
一种新型的ADC按键滤波方法,详细介绍了该方法的
软硬件实现过程。经过测试表明此方法能有效地实现
按键扩展,并对干扰及抖动有良好的抵制效果,但
ADC按键存在不能识别多个键及组合按键的缺点。
参考文献
1 贾默伊,谭玉柱.实用可控的按键抖动消除电路.现代
电子技术, 2003,7:70-71.
2 曹新亮,邵思飞,白宗文.一种优先编码键盘的设计.
延安大学学报(自然科学版), 2004,23( 4):29-30.
3 周兴华.一种新颖的单片机按键输入设计方法详解.
电子制作, 2003,12:22-24.
4 徐爱钧,彭秀华.单片机高级语言C51应用程序设计.
北京:电子工业出版社, 1999.419-422.
5 张敏,王芳.基于AVR 微控制器的ADC 按键设计技
巧.国外电子元器件, 2007,2:53-55.
6 周斌.基于μPD1 6 3 1 2 实现按键实时显示.中国集
成电路, 2007,92:72-73.
7 刘楠.控制台下常用组合按键.开放系统世界, 2006,
12:69-70.
8 王效东.按键消抖的软件处理新法.自动化与仪表,
2000,15(2):68-69.
9 方龙,肖献保,李威.关于消除按键机械拉动的研究.
计算机与技术, 2008,1:92-93.
Experiences Exchange 经验交流
197
发布评论