优选(VR虚拟现实)AVR学习笔记二十基于模数转换的AD键盘实验.docx

优选(VR虚拟现实)AVR学习笔记二十基于模数转换的AD键盘实验.docx

  1. 1、本文档共18页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
LOGO 企业言郦 YOUR COMPANY NAME IS HERE 专业丨专注丨精心1卓越 随心编辑,值得下瞬有! 优选(VR虚拟现实) AVR学习笔记二十基 于模数转换的AD键盘 AVR 学习笔记二十、基于模数转换的 AD 键盘实验 实例功能 在前面的实例中我们已经学习了在单片机系统中检测矩阵按键的接口电路和程序设计。 但是矩阵式键盘仍然要占用不少 I/O 口资源, 4X4 键盘就占用了 8 根 I/O 口线,那么有没 有更简单的办法,使用更少的 I/O 口资源检测更多的按键呢? 通过前面的学习, 我们知道按键检测实际上是检测连接按键的端口的高低电平值, 而我 们在前面的实例中只是简单的判断连接按键的端口的电平是高电平( +5V )还是低电平 (0V )。那么是否可以通过电平的微小变化来检测按键是否被按下呢? 在这个实验中,我们采用模数转换( AD )的方法来实现 1 个 I/O 口识别 16 个按键的 实验,本实例分为三个功能模块,分别描述如下: ? 单片机系统: 利用 ATmega16 单片机与 AD 键盘电路实现 1 个 I/O 口的多按键识别。 ? 外围电路: AD 键盘电路、串口电平转换电路。 ? 软件程序:编写软件,实现 AD 键盘识别 16 个按键的程序。 通过本实例的学习,掌握以下内容: ? AD 键盘的电路设计和程序实现。 器件和原理 20.2.1 AD 键盘的工作原理 我们知道 AVR 单片机自带有内部模数转换( AD )电路,那么我们就利用 AVR 的这一 特性来实现利用一个 I/O 口检测 16 个按键的实验。 图 1 为一个 A/D 键盘的原理图, 从图中可以看出, 当不同的按键被按下时, ADC 端点 处的电压不同,通过判断不同的电压值就可以判断出是那个按键被按下。 AVR 单片机的 A/D 转换位数为 10 位,实际应用中我们只取高 8 位的值就可以分辨出 16 个按键。 我们设定 AD 转换的参考电压为 VCC ,这样 A/D 键盘识别准确度最高, 并且能 够识别更多的按键。 图 1 A/D 键盘电路 20.2.2 A/D 键盘的缺陷 在实际应用中, 我们是不可能得到准确的 A/D 转换值的, 这是因为存在以下几种误差: 1 )、对于同一点处的电压值, A/D 多次采样的结果不可能完全相同。 2) 、电阻的误差。电阻值由于电阻的精度和环境温度的原因,误差较大,所以 A/D 键 盘各个按键点的分压不准确。 3)、为尽量减少误差,可以采取增加电阻精度、增加温度补偿等方法,另外在软件处 理时候要注意消除按键抖动等因素,还要对实际转换值和标准值给出误差补偿。 4 )、如果按键按下,经过 A/D 转换,若实际转换值在允许误差范围之内(需要实际测 量各点电压,并计算各点电压平均值) ,则认为按键按下,否则程序不响应。 5)、实际试验过程中,还要考虑电阻的累积误差,选用精度越高的电阻,可分辨的按 键数目越多。 电路和连接 本实验主要有两部分电路模块组成:串口电平转换电路, A/D 键盘电路。串口电平 转换电路在前面的实例中我们已经做过介绍,在此不再重复。这里我们重点介绍一下 A/D 键盘电路。实际试验中我们将图 1 中的 ADC 接点连接到单片机的 PA1 口,也就是 A/D 转 换的 AD1 通道。 程序设计 1、程序功能 在本实例中,我们利用串口将 A/D 键盘中按下的按键的键码值发送到计算机,通过串 口助手观察实验结果。 2、函数说明 本实例主要有串口数据发送程序和 A/D 键盘识别程序, 串口数据发送程序我们前面例 子中已经介绍过,本实例的程序中不再详细说明。 3 、编程说明 使用 WINAVR 开发环境,使用的是外部 12M 的晶振,所以需要将 makefile 文件中 的时钟频率修改为 12M 。另外在程序烧录到单片机的时候, 熔丝位也要选择为外部 12M 晶 振(注意是晶振, 不是外部振荡器 ,一定不要选择错了, 否则会导致单片机不能再烧写程序) 。 4、程序代码 AVR A/D 键盘范例 **** MCU: ATmega16 **** 作者: maweili **** 编译器: WINAVR **** 2009.4.3 ********************************************* #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h>// #include <avr/interrupt.h> // 常量声明 #define BAUD 9600 // 全局变量声明 unsigned int ADData; // 函数声明 void Port_Init(void); voi

文档评论(0)

dingfulaowang + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档