好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

基于ADC0809 MCS-5系列单片机数字电压表设计.docx

9页
  • 卖家[上传人]:工****
  • 文档编号:467337739
  • 上传时间:2024-01-16
  • 文档格式:DOCX
  • 文档大小:200.01KB
  • / 9 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 基于ADC0809 MCS-5系列单片机数字电压表设计前言 在电量的测量中,电压、电流和频率是最基本的三个被测量,其中电压量的测量最为经常而且随着电子技术的发展,更是经常需要测量高精度的电压,所以数字电压表就成为一种必不可少的测量仪器数字电压表(Digital Voltmeter)简称DVM,它是采用数字化测量技术,把连续的模拟量(直流或交流输入电压)转换成不连续、离散的数字形式并加以显示的仪表由于数字式仪器具有读数准确方便、精度高、误差小、灵敏度高和分辨率高、测量速度快等特点而倍受青睐本设计从各个角度分析了由单片机组成的数字电压表的设计过程及各部分电路的组成及其原理,并且分析了程序如何驱动单片机进而使系统运行起来的原理及方法关键词 ADC0809 MCS-51单片机 数字电压表1.实验任务 利用单片机AT89S51与ADC0809设计一个数字电压表,能够测量0-5V之间的直流电压值,四位数码显示,但要求使用的元器件数目最少2.电路原理图2.1 ADC0809芯片管脚图2.2实验电路接线图2.3 A/D转换模块- 由于本系统需处理多路模拟信号,故采用ADC0809 A/D转换模块,它采用逐次逼近的方法完成A/D转换;其片内带有锁存功能的8 路模拟开关,可对8路0~5V的输入模拟电压信号进行转换, 完成一次转换约需100μs。

      其输出具有TTL三态锁存缓冲器,可直接接到单片机89C51的P0口2.4 LCD显示模块- 本系统采用44780驱动的LCD,HD44780(KS0062)是用低功耗CMOS技术制造的大规模点阵LCD控制器(兼带驱动器),和4bit/8bit微处理器相连,它能使点阵LCD显示大小写英文字母、数字和符号等丰富的信息,同时有较强的通用性应用,使用方便,用户能用少量元件就可组成一个完整点阵LCD系统,送入相关的数据和指令就可实现所需的显示 44780显示模块有8条数据线,3条控制线可与微处理器或微控制器相连,通过送入数据和指令,就可使模块正常工作,3.系统工作的流程图4.系统板上硬件连线 a)把“单片机系统”区域中的P1.0-P1.7与“动态数码显示”区域中的ABCDEFGH端口用8芯排线连接b)把“单片机系统”区域中的P2.0-P2.7与“动态数码显示”区域中的S1S2S3S4S5S6S7S8端口用8芯排线连接c)把“单片机系统”区域中的P3.0与“模数转换模块”区域中的ST端子用导线相连接d)把“单片机系统”区域中的P3.1与“模数转换模块”区域中的OE端子用导线相连接e)把“单片机系统”区域中的P3.2与“模数转换模块”区域中的EOC端子用导线相连接。

      f)把“单片机系统”区域中的P3.3与“模数转换模块”区域中的CLK端子用导线相连接g)把“模数转换模块”区域中的A2A1A0端子用导线连接到“电源模块”区域中的GND端子上h)把“模数转换模块”区域中的IN0端子用导线连接到“三路可调电压模块”区域中的VR1端子上i)把“单片机系统”区域中的P0.0-P0.7用8芯排线连接到“模数转换模块”区域中的D0D1D2D3D4D5D6D7端子上5.程序设计内容 i.由于ADC0809在进行A/D转换时需要有CLK信号,而此时的ADC0809的CLK是接在AT89S51单片机的P3.3端口上,也就是要求从P3.3输出CLK信号供ADC0809使用因此产生CLK信号的方法就得用软件来产生了ii.由于ADC0809的参考电压VREF=VCC,所以转换之后的数据要经过数据处理,在数码管上显示出电压值实际显示的电压值 (D/256*VREF)6.C语言程序#include unsigned char code dispbitcode[]={0xfe,0xfd,0xfb,0xf7, 0xef,0xdf,0xbf,0x7f}; unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f,0x00}; unsigned char dispbuf[8]={10,10,10,10,0,0,0,0}; unsigned char dispcount; unsigned char getdata; unsigned int temp; unsigned char i; sbit ST=P3^0; sbit OE=P3^1; sbit EOC=P3^2; sbit CLK=P3^3; void main(void) { ST=0; OE=0; ET0=1; ET1=1; EA=1; TMOD=0x12; TH0=216; TL0=216; TH1=(65536-4000)/256; TL1=(65536-4000)%6; TR1=1; TR0=1; ST=1; ST=0; while(1) { if(EOC==1) { OE=1; getdata=P0; OE=0; temp=getdata*235; temp=temp/128; i=5; dispbuf[0]=10; dispbuf[1]=10; dispbuf[2]=10; dispbuf[3]=10; dispbuf[4]=10; dispbuf[5]=0; dispbuf[6]=0; dispbuf[7]=0; while(temp/10) { dispbuf[i]=temp; temp=temp/10; i++; } dispbuf[i]=temp; ST=1; ST=0; } } } void t0(void) interrupt 1 using 0 { CLK=~CLK; } void t1(void) interrupt 3 using 0 { TH1=(65536-4000)/256; TL1=(65536-4000)%6; P1=dispcode[dispbuf[dispcount]]; P2=dispbitcode[dispcount]; if(dispcount==7) { P1=P1 | 0x80; } dispcount++; if(dispcount==8) { dispcount=0; } }7.参考方案即为用8位AD采样0-5V电压(AD的参考电压为5V),并要在51单片机中直接显示相应的电压值,显示值为十进制,两位小数。

        经过各方面资料的搜集,和与同学的讨论,整理出了两套实现方案  方案一:将5扩大100倍即500,这样要两个字节存储这个参考电压值,再用得到的采样值(一字节)乘以500得到一个3字节的值(调用一个2字节乘1字节的子程序实现),再除以阶数值即得到实际信号电压扩大100倍后的整数值,再转换成BCD码形式,显示时将其第一位显示小数点即可小数点问题的解决办法:(1)做两张表,一张带小数点,一张不带小数点2)只有一张不带小数点的表,第一位显示小数点之前,将字型的值补上与带小数点的差值(减去80H),再送显示  源代码编写中,需要调用到“三字节二进制无符号数除以单字节二进制数”和“调用2字节乘1字节的子程序”的子程序,我自己试着编写这两个程序,其中乘法子程序我比较熟悉,老师上课也有讲到但除法一点思路也没有,上网搜索了下,发现了这样一份相当实用的资料《MCS-51单片机实用子程序库(96年版)》周航慈,其中包括非常多的工程实践中需要用到的汇编子程序,工程实践中可以直接调用方案二:根据要显示的电压值计算式V=A/255*5,扩大100倍后,直接计算出500/255的数值为0.0196,首先要考虑是选择0.019还是0.02还是0.0196与A相乘。

      如果以0.019与A相乘,当A为255时,0.019×A=4.845,与5.00相差太远,误差较大;如果选择0.02,0.02×255=5.10,同样有太大误差,为了避免太大的误差,可以考虑选择0.0196作为参数(0.0196×255=4.9980)以196与A相乘,最大的结果为196×255=49980可以用两个字节表示结果,故需要调用“一个字节与一个字节相乘结果为两个字节的程序”,然后根据得到的两个字节的结果进行十进制转换双字节16进制转换为BCD码可以参考资料《MCS-51单片机实用子程序库(96年版)》周航慈最后根据BCD数的倒数第二位以四舍五入的原则去掉后两位数据,将前三位送显示8.调试过程在单片机机箱上进行调试,过程中发现许多没有想到的问题,有的管脚没接好导致实验显示出现问题,在LED显示上也出现缺少某一管脚连接不上导致显示不全的问题,连接是一个问题还有就是查找错误的时候,得从源头开始一条电路一条电路的分析和验证,虽然麻烦,但能够很快分析出哪里有问题可以及时改正还有就是在程序中也会发现很多问题,有时候一个字母和单词的出入导致程序频繁出现ERROR,C语言功底在这次设计中尤为重要,必须要掌握和单片机衔接的地方的语言语法,否则还是不能设计成功。

      对芯片的了解也是必不可少的,芯片也是核心元件,电路管脚图必须非常熟悉,电路管脚的电路图也必须十分清楚,知道每个管脚的使用方法和接入电路的功用9.结束语在本次课程设计中,可以学到MCS-51的各个部分的作用,学习到每个接口以及电路的作用,了解在实验过程中应该注意的几个关键部分,有电路接口的问题,有芯片管脚的问题,有语言程序中的问题,每个问题都需要更一步的探讨和研究,虽然自己现在学的只是有限,但是也让我们知道必须在课外多接触各方各面的知识,否则做的会很吃力,也不是优化后的结果,会非常繁琐,不能给人干净利落的试验结果动手能力以及排错能力必须提高,因为不可能一上来就能够完全做对,肯定会用很多地方有失误,导致实验结果不理想,在实验接线过程中,我们必须了解到各个方面的问题,这样我们才能更好的处理错误的地方细心研究各个接点以及输入输出,把他们作为一个整体来看待,这样我们才能做到比较完美的完成实验参考文献:[1] 蔡美琴等.MCS-51系列单片机系统及其应用.高等教育出版社.[2] 谢自美. 电子线路设计*实验*测试.华中科技大学出版社.[3] 吴经国等.单片机应用技术. 中国电力出版社.[4] 李群芳.单片机微型计算机与接口技术.电子工业出版社.[5] 张友德等. 单片微型机原理、应用和实验.电子工业出版社.。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.