AVR学习笔记二十、基于模数转换的AD键盘实验_第1页
AVR学习笔记二十、基于模数转换的AD键盘实验_第2页
AVR学习笔记二十、基于模数转换的AD键盘实验_第3页
AVR学习笔记二十、基于模数转换的AD键盘实验_第4页
AVR学习笔记二十、基于模数转换的AD键盘实验_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、AVR学习习笔记二十十、基于模模数转换的的AD键盘盘实验20.1 实例功功能在前面的实实例中我们们已经学习习了在单片片机系统中中检测矩阵阵按键的接接口电路和和程序设计计。但是矩矩阵式键盘盘仍然要占占用不少II/O口资资源,4XX4键盘就就占用了88根I/OO口线,那那么有没有有更简单的的办法,使使用更少的的I/O口口资源检测测更多的按按键呢? 通过前面的的学习,我我们知道按按键检测实实际上是检检测连接按按键的端口口的高低电电平值,而而我们在前前面的实例例中只是简简单的判断断连接按键键的端口的的电平是高高电平(+5V)还还是低电平平(0V)。那么是否否可以通过过电平的微微小变化来来检测按键键是否

2、被按按下呢? 在在这个实验验中,我们们采用模数数转换(AAD)的方方法来实现现1个I/O口识别别16个按按键的实验验,本实例例分为三个个功能模块块,分别描描述如下: 单片机机系统:利利用ATmmega116单片机机与AD键盘电电路实现11个I/OO口的多按按键识别。 外围电电路:ADD键盘电路路、串口电平平转换电路路。 软件程程序:编写写软件,实实现AD键盘识识别16个个按键的程程序。通过本实例例的学习,掌掌握以下内内容: AD键键盘的电路路设计和程序实现现。 200.2 器件件和原理 200.2.11 AD键盘的工工作原理我们知道AAVR单片片机自带有有内部模数数转换(AAD)电路路,那么我

3、我们就利用用AVR的的这一特性性来实现利利用一个II/O口检检测16个个按键的实实验。图1为一个个A/D键键盘的原理理图,从图中可可以看出,当当不同的按按键被按下下时,ADDC端点处处的电压不不同,通过过判断不同同的电压值值就可以判判断出是那那个按键被被按下。AVR单片片机的A/D转换位位数为100位,实际际应用中我我们只取高高8位的值值就可以分分辨出166个按键。我们设定定AD转换换的参考电电压为VCCC,这样样A/D键键盘识别准准确度最高高,并且能能够识别更更多的按键键。 图图1 A/D键盘电电路 220.2.2 A/D键盘盘的缺陷在实际应用用中,我们们是不可能能得到准确确的A/DD转换值

4、的的,这是因因为存在以以下几种误误差:1)、对于于同一点处处的电压值值,A/DD多次采样样的结果不不可能完全全相同。2)、电阻阻的误差。电阻值由由于电阻的的精度和环环境温度的的原因,误误差较大,所所以A/DD键盘各个个按键点的的分压不准准确。3)、为尽尽量减少误误差,可以以采取增加加电阻精度度、增加温温度补偿等等方法,另另外在软件件处理时候候要注意消消除按键抖抖动等因素素,还要对对实际转换换值和标准准值给出误误差补偿。4)、如果果按键按下下,经过AA/D转换换,若实际际转换值在在允许误差差范围之内内(需要实实际测量各各点电压,并并计算各点点电压平均均值),则则认为按键键按下,否否则程序不不响应

5、。5)、实际际试验过程程中,还要要考虑电阻阻的累积误误差,选用用精度越高高的电阻,可可分辨的按按键数目越越多。 20.3 电路和连连接 本实验验主要有两两部分电路路模块组成成:串口电电平转换电电路,A/D键盘盘电路。串口电平平转换电路路在前面的的实例中我我们已经做做过介绍,在在此不再重重复。这里里我们重点点介绍一下下A/D键盘盘电路。实际试验验中我们将将图1中的的ADC接接点连接到到单片机的的PA1口口,也就是是A/D转转换的ADD1通道。 20.4 程序设设计 1、程序序功能在本实例中中,我们利利用串口将A/D键盘盘中按下的的按键的键键码值发送送到计算机机,通过串串口助手观观察实验结结果。

6、2、函数数说明 本实例主主要有串口口数据发送送程序和A/D键盘识识别程序,串口口数据发送送程序我们们前面例子子中已经介介绍过,本本实例的程程序中不再再详细说明明。 3、编编程说明 使用WIINAVRR开发环境境,使用的的是外部112M的晶晶振,所以以需要将mmakeffile文文件中的时时钟频率修修改为122M。另外外在程序烧烧录到单片片机的时候候,熔丝位位也要选择择为外部112M晶振振(注意是是晶振,不不是外部振振荡器,一一定不要选选择错了,否否则会导致致单片机不不能再烧写写程序)。 4、程序序代码/* AVRR A/D键盘范范例 * MCU: ATmmega116 * 作者: maweei

7、li * 编译器:WINAAVR * * 20099.4.33 */#incllude #incllude #incllude /中断断函数头文文件/常量声声明#defiine BBAUD 96000 /波波特率设置置值/全局变变量声明unsiggned int ADDaata; /AAD转换获获得的数据据/函数声声明void Portt_Iniit(vooid); /端口初初始化配置置void Usarrt_Innit(vvoid); /USAART寄存存器设置void AD_IInit(voidd); /AD初始始化void Usarrt_PuutChaar(unnsignned ccha

8、r cTXDData); /字节发发送函数void Usarrt_PuutStrring(unsiignedd chaar *ppcStrring); / 字符符串发送数数据unsiggned int AD_GGetDaata(vvoid); /AAD转换函函数void GetKKey(vvoid); /显示示按键值int mmain(voidd) unsiignedd chaar Deelay33s;Portt_Iniit();Usarrt_Innit();AD_IInit();Usarrt_PuutStrring(AD键键盘测试程程序);/Ussart_PutSStrinng(你按下的的按

9、键序号号为:);sei(); /使能能全局中断断 whille(1)ADDData = ADD_GettDataa();/获得的的AD值 if(ADDaata 5) /判断断是否有按按键按下_ddelayy_ms(50); /按按键消抖iff(ADDData 5)GGetKeey(); /获获取按键值值_ddelayy_ms(200);forr(Dellay3ss = 00;Dellay3ss 110;Deelay33s+) /延延时3S_ddelayy_ms(90);/端口状状态初始化化设置函数数void Portt_Iniit()PORTTA = 0X000; DDRAA = 00 x00

10、; /ADCC通道设置置为输入口口,高阻态态/USAART寄存存器配置函函数void Usarrt_Innit()UCSRRA = 0X000;UCSRRC |= (1URSSEL) | (11 UCSZZ1) | (1 UUCSZ00); /异步步,数据格格式8,N,1 /UUCSRCC寄存器与与UBRRRH寄存器器共用相同同的I/OO地址,写 UCSSRC 时时, URRSEL 应设置为为 1。UBRRRL = (F_CCPU / BAUUD / 16 - 1) % 2556; /波特率设设置UBRRRH = (F_CCPU / BAUUD / 16 - 1) / 2556;UCSRRB

11、|= (1 RRXCIEE) | (1 RXXEN) | (11 TXENN); /发送使能能/字节发发送函数void Usarrt_PuutChaar(unnsignned cchar cTXDData)whille( !(UCSSRA & (1 UUDRE) ); /只有数据据寄存器为为空时才能能发送数据据UDR = cTTXDatta; /发发送数据送送USARRT I/O数据寄寄存器UUDR/接收中中断函数ISR(UUSARTT_RXCC_vecct )unsiignedd chaar Reev;Rev = UDDR; /从USARRT I/O数据寄寄存器UUDR中读读出数据Usarr

12、t_PuutChaar(Reev); /将接收收到的数据据发送void Usarrt_PuutStrring(unsiignedd chaar *ppcStrring)whille (*pcSttringg)Usaart_PPutChhar(*pcSttringg+); Usarrt_PuutChaar(0 xx0D);Usarrt_PuutChaar(0 xx0A); /结结尾发送回回车换行/AD转转换初始化化函数void AD_IInit()ADMUUX |= (1 RREFS00) | (1 MUUX0) | (11 ADLAAR); /ADCC参考电压压为AVccc,ADC结果果左对齐

13、,选选择通道AADC1ADCSSRA |= (11 ADENN) | (1 ADDPS2) | (1 ADPPS1); /使能AD转换,ADDC时钟64分频/AD转转换函数unsiggned int AD_GGetDaata()ADCSSRA |= (11 ADSCC); /开始AD转换whille(!(ADCSSRA & (1 AADIF); /等待转转换完成ADCSSRA |= (11 226) & (ADDData 1186) & (ADDaata 1157) & (ADDaata 1135) & (ADDaata 1117) & (ADDaata 1101) & (ADDaata 990) & (AADDatta 778) & (AADDatta 669) & (AADDatta 660) & (AADDatta 552) & (AADDatta 444) & (AADDatta 337) & (AADDatta 228) & (AADDatta 119) & (AADDatta 99) & (ADDDataa 117)Ussart_PutSStrinng(你你按下的按按键序号为为:);Ussart_PutCChar(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论