一种基于ADC的高性价比键盘输入设计
2 硬件设计
实际的硬件电路如图2所示。为了提高按键响应速度和减轻CPU扫描按键的负担,增加一个比较器,当按键被按下时比较器输出信号触发中断,在中断中第一时间获得键值。这样,既避免了把按键程序放到主程序中循环查询过多而占用CPU资源,又提高了CPU的利用率。当然,为了节省硬件成本,也可以不要比较器。本文引用地址:https://www.eepw.com.cn/article/202443.htm
分压电阻越大越省电,但是实际应用时需要考虑ADC的输入阻抗,不能太大,这里给出经验值10 kΩ。另外,电压比较器还要考虑到运放的特性,为确保第一个键按下时运放同相端电压低于4 V,电阻R1的值就要相对大一些,后面的电阻可以取相同的值。为了减小按键抖动,在电路中串联一个电容C1。当没有键按下时,ADC相当于悬空,需接一上拉电阻。这里R21取220 kΩ。
3 软件设计
软件设计是ADC按键的处理核心,一旦检测到的A/D值不准,按键就会得到错误的键值,带来误操作。当按键数目很多时,这种现象会更突出。
ADC按键其实就是一个数据采集过程,软件需要完成数据采集、数据处理、按键解析这3个步骤。首先对按键要有一个认识,它是一个机械开关,在键按下和弹起的过程中很难做到理想的导通和断开,通常有一个抖动过程,需要经过一段时间才能真正地闭合和断开。
在本设计中使用的是自带8路10位ADC的MCUSTC90C52AD。驱动起来比较简单,只需要配置几个寄存器就可以进行A/D转换了,并且转换速度很快。ADC代码如下:
评论