AVR学习笔记二十、基于模数转换的AD键盘实验20
1实例功能在前面的实例中我们已经学习了在单片机系统中检测矩阵按键的接口电路和程序设计
但是矩阵式键盘仍然要占用不少I/O口资源,4X4键盘就占用了8根I/O口线,那么有没有更简单的办法,使用更少的I/O口资源检测更多的按键呢
通过前面的学习,我们知道按键检测实际上是检测连接按键的端口的高低电平值,而我们在前面的实例中只是简单的判断连接按键的端口的电平是高电平(+5V)还是低电平(0V)
那么是否可以通过电平的微小变化来检测按键是否被按下呢
在这个实验中,我们采用模数转换(AD)的方法来实现1个I/O口识别16个按键的实验,本实例分为三个功能模块,分别描述如下:●单片机系统:利用ATmega16单片机与AD键盘电路实现1个I/O口的多按键识别
●外围电路:AD键盘电路、串口电平转换电路
●软件程序:编写软件,实现AD键盘识别16个按键的程序
通过本实例的学习,掌握以下内容:●AD键盘的电路设计和程序实现
2器件和原理20
1AD键盘的工作原理我们知道AVR单片机自带有内部模数转换(AD)电路,那么我们就利用AVR的这一特性来实现利用一个I/O口检测16个按键的实验
图1为一个A/D键盘的原理图,从图中可以看出,当不同的按键被按下时,ADC端点处的电压不同,通过判断不同的电压值就可以判断出是那个按键被按下
AVR单片机的A/D转换位数为10位,实际应用中我们只取高8位的值就可以分辨出16个按键
我们设定AD转换的参考电压为VCC,这样A/D键盘识别准确度最高,并且能够识别更多的按键
图1A/D键盘电路20
2A/D键盘的缺陷在实际应用中,我们是不可能得到准确的A/D转换值的,这是因为存在以下几种误差:1)、对于同一点处的电压值,A/D多次采样的结果不可能完全相同
2)、电阻的误差
电阻值由于电阻的精度和环境温度的