AVR学习笔记二十、基于模数转换的AD键盘实验

AVR学习笔记二十、基于模数转换的AD键盘实验

ID:22703505

大小:167.24 KB

页数:17页

发布时间:2023-10-23 04:14:01

资源描述:

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键盘的电路设计和程序实现。20.2器件和原理20.2.1AD键盘的工作原理我们知道AVR单片机自带有内部模数转换(AD)电路,那么我们就利用AVR的这一特性来实现利用一个I/O口检测16个按键的实验。图1为一个A/D|键盘的原理图,从图中可以看出,当不同的按键被按下时,ADC端点处的电压不同,通过判断不同的电压值就可以判断出是那个按键被按下。AVR单片机的A/D转换位数为10位,实际应用中我们只取高8位的值就可以分辨出16个按键。我们设定AD转换的参考电压为VCC,这样A/D键盘识别准确度最高,并且能够识别更多的按键。图1A/D键盘电路20.2.2A/D键盘的缺陷在实际应用中,我们是不可能得到准确的A/D转换值的,这是因为存在以下几种误差:1)、对于同一点处的电压值,A/D多次采样的结果不可能完全相同。2)、电阻的误差。电阻值由于电阻的|精度和环境温度的原因,误差较大,所以A/D键盘各个按键点的分压不准确。3)、为尽量减少误差,可以采取增加电阻精度、增加温度补偿等方法,另外在软件处理时候要注意消除按键抖动等因素,还要对实际转换值和标准值给出误差补偿。

14)、如果按键按下,经过A/D转换,若实际转换值在允许误差范围之内(需要实际测量各点电压,并计算各点电压平均值),则认为按键按下,否则程序不响应。5)、实际试验过程中,还要考虑电阻的累积误差,选用精度越高的电阻,可分辨的按键数目越多。20.3电路和连接本实验主要有两部分电路模块组成:串口电平转换电路,A/D|键盘电路。串口电平转换电路在前面的实例中我们已经做过介绍,在此不再重复。这里我们重点介绍一下A/D键盘电路。实际试验中我们将图1中的ADC接点连接到单片机的PA1口,也就是A/D转换的AD1通道。20.4程序设计1、程序功能在本实例中,我们利用串口将A/D键盘中按下的按键的键码值发送到计算机,通过串口助手观察实验结果。2、函数说明本实例主要有串口数据发送程序和A/D键盘识别程序,串口数据发送程序我们前面例子中已经介绍过,本实例的程序中不再详细说明。3、编程说明使用WINAVR开发环境,使用的是外部12M的晶振,所以需要将m|akefile文件中的时钟频率修改为12M。另外在程序烧录到单片机的时候,熔丝位也要选择为外部12M晶振(注意是晶振,不是外部振荡器,一定不要选择错了,否则会导致单片机不能再烧写程序)。4、程序代码/***************************************************AVRA/D键盘范例*******MCU:ATmega16*******作者:maweili*******编译器:WINAVR**************2009.4.3****************************|**********************/#include#include#include//中断函数头文件//常量声明#defineBAUD9600//波特率设置值//全局变量声明unsignedintADData;//AD转换获得的数据

2//函数声明voidPort_Init(void);//端口初始化配置voidUsart_Init(void);//USART寄存器设置voidAD_Init(void);//AD初始化voidUs|art_PutChar(unsignedcharcTXData);//字节发送函数voidUsart_PutString(unsignedchar*pcString);//字符串发送数据unsignedintAD_GetData(void);//AD转换函数voidGetKey(void);//显示按键值intmain(void){unsignedcharDelay3s;Port_Init();Usart_Init();AD_Init();Usart_PutString("AD键盘测试程序");//Usart_PutStr|ing("你按下的按键序号为:");sei();//使能全局中断while(1){ADData=AD_GetData();//获得的AD值if(ADData>5)//判断是否有按键按下{_delay_ms(50);//按键消抖if(ADData>5){GetKey();//获取按键值}_delay_ms(200);}for(Delay3s=0;Delay3s<10;Delay3s++)//延时3S{_delay_ms(90);}

3}}//端口状态初始化设置函数voidPort_Init(){PORTA=0X00;DDRA|=0x00;//ADC通道设置为输入口,高阻态}//USART寄存器配置函数voidUsart_Init(){UCSRA=0X00;UCSRC|=(1<

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1、本文档共17页,下载后即可获取全部内容。
2、此文档《AVR学习笔记二十、基于模数转换的AD键盘实验》由用户(158****5147)提供并上传付费之前 请先通过免费阅读内容等途径辨别内容,本站所有文档下载所得的收益全部归上传人(卖家)所有:如有侵权或不适当内容,请进行举报或申诉。
3、所有的PPT和DOC文档都被视为“模板”允许上传人保留音节日灵结构的情况下删减部份的内容,下裁前须认直查看,确认无误后再购买。
4、欧宝真人·(中国)科技有限公司网仅提供信息存储空间,仅对用户上传内容的表现方式做保护外理,无法对各卖家所售文档的直实性,完整性,准确性以及专业性等问题提供审核和保证,请谨慎购买。
5、本站文档的总页数,文档格式和文档大小以系统显示为准(内容中显示页数不一定正确),网站客服只以系统显示页数,文件格式,文档大小作为仲裁依据。

文档提供

发布者:158****5147

上传时间:2023-10-20 13:18:15

认证主体:齐**(个人认证)

IP归属:湖北省 武汉

相关标签

文档提供

发布者:158****5147

上传时间:2023-10-20 13:18:15

认证主体:齐**(个人认证)

IP归属:湖北省 武汉

相关标签