单片机一个ADC口实现多按键检测功能

        按键电路是单片机应用中最广泛最简单的一个电路了,实际项目中经常会用到按键,但是一个按键往往需要占用一个IO口,特别是单片机资源比较紧张的情况下,IO就显得更加珍贵了。如果要用到按键,同时又不想浪费IO口,那么可以换一个思路,通过AD口检测电压的方法来实现按键功能。

       先举一个简单的例子:

                      单片机一个ADC口实现多按键检测功能_第1张图片          单片机一个ADC口实现多按键检测功能_第2张图片

三个电阻R1、R2、R3串联,按键S1和电阻R1并联,按键S2和电阻R2并联,然后将R1和R2中间接到单片机IO口上,通过IO口读取外部电压,根据电压判断是哪个按键按下。

 单片机一个ADC口实现多按键检测功能_第3张图片      单片机一个ADC口实现多按键检测功能_第4张图片     单片机一个ADC口实现多按键检测功能_第5张图片

通过仿真可以看出,按键未按下时,ADC口电压为2.5V,按键S1按下后ADC口电压为5 V,按键S2按下后ADC口电压为0.05V。

按键S1、S2同时按下后ADC口电压仍然为5V。说明这种方法只能检测独立按键,不能检测组合按键。

注意电路中的R3电阻不能省掉,否则S1、S2按键同时按下后,电源会直接被短路。

通过ADC口的电压变化来判断外部按键,这样只需要一个ADC口就可以实现多个按键检测。那么在看看更多的按键要如何检测。

单片机一个ADC口实现多按键检测功能_第6张图片                 单片机一个ADC口实现多按键检测功能_第7张图片

这个电路可以实现6个按键的检测,不同的按键按下后,就会选择不同电阻进行串并联组合,从而改变输出电压值。

按键未按下时,输出电压为0V。

单片机一个ADC口实现多按键检测功能_第8张图片单片机一个ADC口实现多按键检测功能_第9张图片

按键S3按下后,输出电压为3.947V。按键S4按下后,输出电压为3.125V。

单片机一个ADC口实现多按键检测功能_第10张图片单片机一个ADC口实现多按键检测功能_第11张图片

按键S5按下后,输出电压为2.439V。按键S6按下后,输出电压为1.829V。

单片机一个ADC口实现多按键检测功能_第12张图片单片机一个ADC口实现多按键检测功能_第13张图片

按键S7按下后,输出电压为1.25V。按键S8按下后,输出电压为0.657V。

根据单片机ADC采样精度和分压电阻精度的不同,可以检测的按键数量也不同。但是核心思想都是通过ADC读取电压值,根据电压值得不同来判断是哪个按键按下。要注意的是这种方法只适合检测独立按键,不适合检测组合按键。

这样在IO口资源不够用的情况下,可以通过ADC口来作为按键的检测口。

你可能感兴趣的:(单片机一个ADC口实现多按键检测功能)