按键与菜单在嵌入式系统中的设计与应用
一、引言
随着微处理器的广泛应用,越来越多的仪器采用智能化的操作方式,微控制器已经广泛应用到各个领域中,为了使仪器的操作更简便,人机界面更友好,在现代仪器电路中经常采用液晶与按键的搭配方式作为人机接口。液晶不仅功耗低,而且提供的可视化信息丰富。所以采用液晶提供菜单与按键反馈相组合的方式为理想的人机交互方式。根据实际不同的设计,本文主要介绍了在嵌入式系统中按键的软、硬件设计及菜单和程序模式之间的关系。
二、按键的软、硬件设计
在嵌入式系统中,按键是常用的人机交互接口,其硬件电路设计的质量直接关系着最终产品的使用,决定着用户对产品的第一印象,所以,决不可轻视按键设计在电路中的作用。下面介绍几种常用的按键设计电路及其特点。
1. 端口按键一对一方式
这种方式在所需按键较少的系统中经常采用,其典型电路图1所示。
图.1 简单的按键接口
这种电路简单,成本低,在小型系统经常采用,其中上拉电阻的主要作用是保证I/O引脚不会悬空(即I/O引脚有确定的电平)。由于在实际使用中一般按键按下的时间远远小于按键弹起的时间,而一般单片机的逻辑0输入电流要大于逻辑1输入电流,所以采用电阻上拉的方式可减小功耗。典型上拉电阻取值为 10kΩ。
上述电路的主要缺点是抗干扰能差,端口会出现抖动现象,容易产生误判,必须在软件中采用“防抖”处理。一般采用的方法为检测到按键信号后延时大于 5ms(一般为10ms-20ms)重新读取,并与前值对比若相同视为一次有效,否则丢弃。推荐的改进电路为采用MAX6816-MAX6818替换上拉电阻,在硬件中加入“防抖”处理。采用MAX6816改进后的电路与芯片输入、输出的效果对比分别如图2、3所示。
图.2 改进的一对一按键接口
图.3 MAX6816输入、输出的端口电平对比
MAX6816-MAX6818分别为单、双、八通道的消抖按键芯片,并且具有ESD保护功能。使用该芯片改进电路后,不仅简化了软件的设计(可直接视端口电平改变为有效变化),更提高了电路的抗干扰能力,使最终产品更容易通过EMC测试。
2.矩阵式键盘设计
在所需按键较多的系统中常采用矩阵式按键设计,该方式可大大节约端口的占用(N为偶数时,N个端口最多可控制(N/2)2个按键),与一一对应的按键设计相比其主要缺点是扫描速度相对较慢。典型电路如图4所示。
图.4 矩阵式键盘接口
其控制端口分为A、B两组,A组用来驱动产生逐位送出的低电平信号,同时保持其它位为高电平。对A组的每位低电平信号都要在B组执行一次扫描。由电路特性可知,每个按键对应唯一的一组A、B组合,所以通过扫描可确定按键的位置。对矩阵式按键的扫描也要注意防抖问题,虽然矩阵式按键的扫描速度比一一对应的方式慢,但嵌入式系统运行在微秒甚至更低的数量级上,所以机械抖动问题依然要靠软件解决,在实际使用中也可根据需要由专用芯片改进设计。
3.A/D采样式具有优先级的键盘编码设计
很多的新型51单片机、ARM等微控制器都集成了A/D功能,而且往往A/D通道较多。所以在数字端口资源紧张而模拟端口资源充裕的情况下可考虑采用模拟通道作为部分按键的接口。该方法可在不增加成本的情况下,可有效的扩充按键资源,设计电路如图5所示,其中分压电阻的选取要特别注意,一定要保证在不同按键按下时,A/D端口的得到电压要有充分的间隙,并适当减小接地电阻阻值。由电路分析可知,这种按键组合具有优先权问题,KEY3的优先权最高,所以当KEY3按下时,KEY1、KEY2实际上被屏蔽了。
图.5 A/D采样式优先权编码键盘接口
由于A/D接口表面上为多通道设计,而在芯片内部往往只有一个A/D转换器通过模拟开关切换通道选择,所以在软件设计上要注意保证A/D通道的稳定时间,即通道切换后要等待几个时钟周期才能启动A/D得到有效值。对于这种模拟按键的抖动处理比数字按键要烦琐,首先硬件上要保证各按键电平之间有充裕宽度,即充足的A/D冗余位数来“防抖”。其次,由于分布电容、机械振动和接触电阻等的影响,会导致按键电平抖动,出现瞬时偏低的现象,所以可采用连续快速多次转换取最大值的方法判定有效键。
4.采用专用的键盘芯片
采用专用芯片设计的键盘接口电路,具有操作简便,可靠性好等优点,但会提高产品造价,所以在实际使用时可根据需要进行选龋8279作为常用的并口键盘控制芯片可控制8×8的键盘矩阵,但其本身为并口传输,而且控制线较多,所以占用很多外部资源。ZLG7290为新型的I2C通讯的键盘、LED控制芯片,最多可控制8×8的键盘矩阵。由于采用了串行总线的通讯方式,所以占用I/O资源少,效率高。关于采用芯
- 有限状态机的嵌入式Linux按键驱动设计 (11-07)
- 基于RTX51的用户专用键盘软件设计(07-09)
- 基于CPLD的电池供电系统断电电路的设计(06-05)
- 3个普通IO识别22个按键试验(12-14)
- STM32 按键扫描方式 使用ST3.0.0库(12-03)
- STM32 按键EXTI方式 使用ST3.0.0库(12-03)