《简易数字万用表设计毕业设计1.doc》由会员分享,可在线阅读,更多相关《简易数字万用表设计毕业设计1.doc(26页珍藏版)》请在三一办公上搜索。
1、 目 录1、设计任务.1 1.1设计目的.1 1.2设计指标及要求.12、设计思路与总体框图.13、系统硬件电路的设计.23.1多用表主电路.23.2 电阻测量输入电路.23.3电压测量输入电路.33.4电流输入测量电路.34、系统的软件设计.45、系统的设计仿真.5 5.1仿真原理图.55.2实物图.65.3主要元器件功能介绍.66、总结与体会.206.1 总结.136.2体会.137、 参考文献.141、设计任务11设计目的采用8位8路A/D转换器ADC0809和AT89S52单片机,设计一台数字多用表,能进行电压、电流和电阻的测量,测量结果通过LED数码管显示,通过按键进行测量功能转换。
2、12设计指标及要求电压测量范围05V,测量误差约为0.02V,电流测量范围1100mA,测量误差约为0.5mA,电阻测量范围01000,测量误差约为2。2、设计思路与总体框图21设计思路首先利用P0 口数据地址复用,将地址通过P0口输入到单片机中。再利用模数转换将模拟信号转换成数字信号,再次利用P0口将其输入到单片机。最后,充分利用单片机强大的运算转化功能将其转成适当的二进制信号控制数显以确保正确的显示被测量的读数。22总体框图89S52振荡电路复位电路ADC0809驱动LED显示待测电阻电路阻待测电流电路待测电压电路3、系统硬件电路的设计31 数字多用表的主电路数字多表仪表主电路如图1所示。
3、89S52单片机通过线选方式扩展了A/D转换器ADC0809和4位LED数码管,单片机的P2.7引脚作为ADC0809的片选信号,因此A/D转换器的端口地址为7FFFH.片选信号和信号一起经或非门产生ADC0809的启动信号START和地址锁存信号ALE。片选信号和信号一起经或非门产生输出允许信号OE,OE=1时选通三态门使输出锁存器中的转换结果送入数据总路线。ADC0809的EOC信号经反相后接到89S52的引脚,用于产生A/D转换完成中断请求信号。ADC0809芯片的3位模拟量输入通道地址输入端A、B、C分别接到89S52的P0.0、P0.1和P0.2,故只要向端口地址0C000H分别写入
4、00H07H,即可启动模拟量输入通道07进行A/D转换。ADC0809参考正电压为5V,参考负电压为0V,时钟输入为2MHz。图1 数字多用表的主电路图单片机的P1.0 P1.2引脚通过一个转换开关接地,通过判断P1.0 P1.2引脚电平的高低,决定是否进行电阻测量、电压测量或电流测量。32 数字多用表的电阻测量输入电路图2所示为数字多用表的电阻测量输入电路。运算放大器的反馈电阻R作为待测量电阻,通过1000电阻R接到电源-5V。假定运算放大器理想,那么放大器的输出电压RV=,将RV送给ADC0809,转换后得到数字量为DV=。单片机读取A/D转换数据,再经过逆向运算可得R=,注意此时得到的R
5、为二进制数,需要转化为十进制数后才能送给数码管显示。程序中采用4字节专利号除法,连续进行4次除以10的除法,依1000范围内不超过2,如果测量其他范围的电阻,需要修改的数值,或者采用其他电路。33电压测量输入电路图3所示为数字多用表的电压测量输入电路。待测电压经过低通滤波器滤除高频干扰,再通过同相放大器送给ADC0809,电压测量范围为05V,ADC0809的分辨率为8位,测量误差为5/2550.02V.3.4 电流输入测量电路图4所示为数字多用表的电流输入电路。电流测量范围为1100mA,因为ADC0809是电压转换器件,必须交电流转换为电压才能进行测量,这可以通过串接电阻R来实现,注意R必
6、须很小(例如00.1),否则影响电流数值。由于待测电流和R都很小,R两端的电压也很小,必须将其放大到ADC0809能够分辨的范围之内。假设待测电流大小为I,R两端节点电压分别为V和V,V经过反向缓冲电路之后V=- V。V和V经过差分放大电路得:V=-(V-V)( V-V)再经过同相放大电路得:AV= V将AV送给ADC0809转换后得到数字量为:DAV=单片机读取A/D转换数据,再经过逆向运算可得I=有两个问题值得注意,首先,由于电流的单位是mA,不能直接计算I的值应先变换为I=再进行计算;其次,这么算出来的电流值误差比较大,原因是LM324不是精密理想运算放大器,当输入信号很小时误差比较大。
7、因此需要对计算数值进行修正,方法是先计算DAV*50000,然后将结果减去102000这个数值是通过反复测试并经过曲线拟合得到的。4、系统的软件设计数字多用表的软件程序(略)5、系统的设计仿真5.1仿真原理图5.2实物图5.3主要元器件功能介绍1、AT89S52芯片功能特性描述AT89S52引脚框图:图2.12 AT89S52芯片引脚图AT89S52 主要性能:1、 与MCS-51 单片机产品兼容2、8K 字节在系统可编程Flash 存储器3、1000 次擦写周期4、全静态操作:0Hz33Hz 5、 三级加密程序存储器6、32 个可编程I/O 口线7、三个16 位定时器/计数器8、八个中断源9
8、、全双工UART 串行通道10、低功耗空闲和掉电模式l 1、掉电后中断可唤醒l2、 看门狗定时器13、双数据指针l 4、掉电标识符功能特性描述:AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash 存储器。使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规程器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。AT89S52具有以下标准功能: 8k字节Flash,256字节RAM,3
9、2 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89S52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。VCC : 电源GND: 地P0 口:P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻辑电平。对P0端口写“1”时,引脚用作高阻抗输入。当访问外部程序和数据存储器时,P0口也被作为低8位
10、地址/数据复用。在这种模式下,P0具有内部上拉电阻。在flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。程序校验时,需要外部上拉电阻。P1 口:P1 口是一个具有内部上拉电阻的8 位双向I/O 口,p1 输出缓冲器能驱动4 个TTL 逻辑电平。对P1 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。此外,P1.0和P1.2分别作定时器/计数器2的外部计数输(P1.0/T2)和时器/计数器2的触发输入(P1.1/T2EX),具体如下表所示。在flash编程和校验时,P1口接收低8位地址
11、字节。表2.1 P1口的第二功能P2 口:P2 口是一个具有内部上拉电阻的8 位双向I/O 口,P2 输出缓冲器能驱动4 个TTL 逻辑电平。对P2 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX DPTR)时,P2 口送出高八位地址。在这种应用中,P2 口使用很强的内部上拉发送1。在使用8位地址(如MOVX RI)访问外部数据存储器时,P2口输出P2锁存器的内容。在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。P
12、3 口:P3 口是一个具有内部上拉电阻的8 位双向I/O 口,p2 输出缓冲器能驱动4 个TTL 逻辑电平。对P3 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。P3口亦作为AT89S52特殊功能(第二功能)使用,如下表所示。在flash编程和校验时,P3口也接收一些控制信号。表2.2 P3口的第二功能RST: 复位输入。晶振工作时,RST脚持续2 个机器周期高电平将使单片机复位。看门狗计时完成后,RST 脚输出96 个晶振周期的高电平。特殊寄存器AUXR(地址8EH)上的DISRTO位可以使此功能无效
13、。DISRTO默认状态下,复位高电平有效。ALE/PROG:地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8 位地址的输出脉冲。在flash编程时,此引脚(PROG)也用作编程输入脉冲。在一般情况下,ALE 以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。然而,特别强调,在每次访问外部数据存储器时,ALE脉冲将会跳过。如果需要,通过将地址为8EH的SFR的第0位置 “1”,ALE操作将无效。这一位置 “1”,ALE 仅在执行MOVX 或MOVC指令时有效。否则,ALE 将被微弱拉高。这个ALE 使能标志位(地址为8EH的SFR的第0位)的设置对微控制器处于外部执行模
14、式下无效。PSEN:外部程序存储器选通信号(PSEN)是外部程序存储器选通信号。当AT89S52从外部程序存储器执行外部代码时,PSEN在每个机器周期被激活两次,而在访问外部数据存储器时,PSEN将不被激活。EA/VPP:访问外部程序存储器控制信号。为使能从0000H 到FFFFH的外部程序存储器读取指令,EA必须接GND。为了执行内部程序指令,EA应该接VCC。在flash编程期间,EA也接收12伏VPP电压。XTAL1:振荡器反相放大器和内部时钟发生电路的输入端。XTAL2:振荡器反相放大器的输出端。Flash 编程并行模式:AT89S52 带有用作编程的片上Flash 存储器阵列。编程接
15、口需要一个高电压(12V)编程使能信号,并且兼容常规的第三方Flash 或EPROM 编程器。AT89S52 程序存储阵列采用字节式编程。编程方法:对AT89S52 编程之前,需根据Flash 编程模式表和图13、图14 对地址、数据和控制信号设置。可采用下列步骤对AT89S52 编程:1在地址线上输入编程单元地址信号2在数据线上输入正确的数据3激活相应的控制信号4把EA/Vpp 升至12V 5每给Flash 写入一个字节或程序加密位时,都要给ALE/PROG 一次脉冲。字节写周期时自身定制的,典型值仅50us。改变地址、数据重复第1 步到第5 步知道全部文件结束。Data Polling A
16、T89S52 用Data Polling 作为一个字节写周期结束的标志特征2、ADC0809介绍ADC0809是带有8位A/D转换器、8路多路开关以及微处理机兼容的控制逻辑的CMOS组件。它是逐次逼近式A/D转换器,可以和单片机直接接口。(1)ADC0809的内部逻辑结构 图2.14 ADC0809的内部逻辑结构上图可知,ADC0809由一个8路模拟开关、一个地址锁存与译码器、一个A/D转换器和一个三态输出锁存器组成。多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用A/D转换器进行转换。三态输出锁器用于锁存A/D转换完的数字量,当OE端为高电平时,才可以从三态输出锁存器取走转换完的数据
17、。(2) 引脚结构 图2.15 ADC0809引脚结构图IN0IN7:8条模拟量输入通道 ADC0809对输入模拟量要求:信号单极性,电压范围是05V,若信号太小,必须进行放大;输入的模拟量在转换过程中应该保持不变,如若模拟量变化太快,则需在输入前增加采样保持电路。 地址输入和控制线:4条 ALE为地址锁存允许输入线,高电平有效。当ALE线为高电平时,地址锁存与译码器将A,B,C三条地址线的地址信号进行锁存,经译码后被选中的通道的模拟量进转换器进行转换。A,B和C为地址输入线,用于选通IN0IN7上的一路模拟量输入。通道选择表如下表所示。表2.3 地址输入线的通道选择CBA选择的通道000IN
18、0001IN1010IN2011IN3100IN4101IN5110IN6111IN7数字量输出及控制线:11条 ST为转换启动信号。当ST上跳沿时,所有内部寄存器清零;下跳沿时,开始进行A/D转换;在转换期间,ST应保持低电平。EOC为转换结束信号。当EOC为高电平时,表明转换结束;否则,表明正在进行A/D转换。OE为输出允许信号,用于控制三条输出锁存器向单片机输出转换得到的数据。OE1,输出转换得到的数据;OE0,输出数据线呈高阻状态。D7D0为数字量输出线。 CLK为时钟输入信号线。因ADC0809的内部没有时钟电路,所需时钟信号必须由外界提供,通常使用频率为500KHZ, VREF()
19、,VREF()为参考电压输入。 ADC0809应用说明:(1) ADC0809内部带有输出锁存器,可以与AT89S51单片机直接相连。 (2) 初始化时,使ST和OE信号全为低电平。 (3) 送要转换的哪一通道的地址到A,B,C端口上。 (4) 在ST端给出一个至少有100ns宽的正脉冲信号。 (5) 是否转换完毕,我们根据EOC信号来判断。 (6) 当EOC变为高电平时,这时给OE为高电平,转换的数据就输出给单片机了。6、总结与体会6. 1 总结本次课程设计,虽然方案基本出来了,但是在硬件制作方面出现了几个问题,这也暴露出我们知识方面的一欠缺。不足主要体现在以下几个方面:(1)ADC0809
20、的第10脚的时钟信号,我们是通过单片机编程实现的但是由于频率过低,只有500KHz,造成LED数码管显示不稳定而出现闪烁现象。最终验收时是通过从外部信号发生器输入2MHz时钟信号解决的。(2)万用板焊接时,由于布线不太合理,使得背面线很零乱。并给后面的线路检查带来了不少麻烦。(3)对Proteus仿真软件使用不熟练,使画仿真图时遇到不少问题。(4)51单片机基础知识不扎实,电路分析遇到比较多的问题。6. 2体会这次课程设计暴露出了很多问题,但在做课程设计的过程中也学到了很多东西。比如查阅资料,动手焊接万用板等等,这些都是平时很少做的。此次课程设计让我对基于单片机的汇编语言有了新的认识,对本学期
21、的单片机学习有很大的助益,也在激励我们多动手,从实践中去获取新知识。在此要特别感谢老师在做设计期间精心指导,他对我们要求非常严格。课程设计的顺利完成离不开老师的帮助的。他为我提供了很多宝贵的资料。本次课程设计自始至是在他的指导和帮助下完成的,在此再一次向他致以深深的敬意和感谢!7、 参考文献(1) 张毅刚单片机原理及应用高等教育出版社 2010年8月(2) 徐爱钧单片机原理实用教程电子工业出版社 2011年3月(2) 张伟 王力 protel2004入门与提高 人民邮电出版社 2005年11月(3) 常健生 检测与转换技术 机械工业出版社 2000年2月(4) 阎石 数字电子技术基础 高等教育
22、出版社 1998年12月(5) 童诗白 模拟电子技术基础 高等教育出版社 2001年(6) 李伯成 微型计算机原理与接口技术 清华大学出版社 2005年1月(7) 李昌喜 智能仪表原理与设计 化学工业出版社 2005年2月附录 系统源程序:org0000h;单片机复位地址ajmp main;转移到主程序处org0100h;main被定位在0x0100处main: mov sp,#80h ;初始化堆栈指针jnbP1.0,crjnbP1.1,cvjnbP1.2,cacr:movR7,#00hlcall adcLCALL RDATlcallDISPLAY sjmp mainCV:MOVR7,#01H
23、LCALLADCLCALL VDATLCALLDISPLAYSJMPMAINCA:MOVR7,#02HLCALLADCLCALLADATLCALLDISPLAY SJMPMAINADC: MOV A,R7 ;0808 A/D转换子程序MOV DPTR,#7FFFHMOVX DPTR,AJB P3.3,$MOVX A,DPTR ;输入转换结果RET vdat:movR2,#00hmovR3,AmovR6,#01hmovR7,#0F4hcallMULD2;乘以500clrCmovA,r5addA,#60h;加96修正movr5,AmovA,r4addcA,#00hmovr4,AmovA,r3add
24、cA,#00hmovr3,AmovA,r2addcA,#00hmovr2,Amovr0,#30hmovr1,#34hmovA,R2movr1,Aincr1movA,R3movr1,Aincr1movA,R4movr1,Aincr1movA,R5movr1,Aincr1movr1,#00hincr1movr1,#00hincr1movr1,#00hincr1movr1,#0FFhcallDIVD4;除以255movr1,#38hmovr1,#00hincr1movr1,#00hincr1movr1,#00hincr1movr1,#0AhcallDIVD4mov43h,33hcallDIVD4mo
25、v42h,33hcallDIVD4mov41h,33hmovr0,#40hmovr0,#00hincr0movA,41hmovDPTR,#SEGMENT7movcA,A+DPTRorlA,#80hmovr0,Aincr0movA,42hmovDPTR,#SEGMENT7movcA,A+DPTRmovr0,Aincr0movA,43hmovDPTR,#SEGMENT7movcA,A+DPTRmovr0,AretADAT:movB,AmovA,#0B6hclrC;以下根据范围设置数值以防溢出subbA,BjcLARGERAmovA,BsubbA,#16hjcLESSAajmpMIDDLEALARG
26、ERA:movA,#0B6hajmpCALCULATEALESSA:movA,#16hajmpCALCULATEAMIDDLEA:movA,BCALCULATEA:movr2,#0C3hmovr3,#50hmovr6,#00hmovr7,AcallMULD2;乘以50000clrCmovA,r5subbA,#70h;以下减去102000movr5,Amov37h,AmovA,r4subbA,#8Ehmovr4,Amov36h,AmovA,r3subbA,#01hmovr3,Amov35h,AmovA,r2subbA,#00hmovr2,Amov34h,Amovr0,#30hmovr1,#38h
27、movr1,#00hincr1movr1,#01hincr1movr1,#5Ehincr1movr1,#0A0hcallDIVD4;除以89760movr1,#38hmovr1,#00hincr1movr1,#00hincr1movr1,#00hincr1movr1,#0AhmovDPTR,#SEGMENT7callDIVD4movA,33hmovcA,A+DPTRmov43h,AcallDIVD4movA,33hmovcA,A+DPTRmov42h,AcallDIVD4movA,33hmovcA,A+DPTRcjneA,#3Fh,NOTEQUmovA,#00hNOTEQU:mov41h,Am
28、ov40h,#00hRETrdat:movR2,#00hmovR3,AmovR6,#03hmovR7,#0E8hcallMULD2;乘以1000movr0,#30hmovr1,#34hmovA,R2movr1,Aincr1movA,R3movr1,Aincr1movA,R4movr1,Aincr1movA,R5movr1,Aincr1movr1,#00hincr1movr1,#00hincr1movr1,#00hincr1movr1,#0FFhcallDIVD4;除以255movr1,#38hmovr1,#00hincr1movr1,#00hincr1movr1,#00hincr1movr1,
29、#0AhmovDPTR,#SEGMENT7callDIVD4;连续进行4次除以10的操作movA,33h;取得10进制值movcA,A+DPTRmov43h,AcallDIVD4movA,33hmovcA,A+DPTRmov42h,AcallDIVD4movA,33hmovcA,A+DPTRmov41h,AcallDIVD4movA,33hmovcA,A+DPTRcjneA,#3Fh,NONZEROmovA,#00hNONZERO:mov40h,AretDELAY_5ms:movR5,#01h;设置R5初始计数值DELAY_5ms1:movR6,#16h;设置R6初始计数值DELAY_5ms2
30、:movR7,#70h;设置R7初始计数值DELAY_5ms3:djnzR7,DELAY_5ms3;延时时间为 Time=( ( (R7*2)+2+1 )*R6+2+1 )*R5+1djnzR6,DELAY_5ms2;djnzR5,DELAY_5ms1;retSEGMENT7:DB3Fh;7段数码管字符0的abcdefg的值,a在最低位,最高位始终保留为0DB06hDB5BhDB4FhDB66hDB6DhDB7DhDB07hDB7FhDB6FhDISPLAY:movDPTR,#0fEffh;写第一位数码管movr1,#40hmovA,r1movxDPTR,AsetbCmovP1.4,CclrC
31、movP1.4,CcallDELAY_5mssetbCmovP1.4,Cincr1movA,r1;写第二位数码管movxDPTR,AsetbCmovP1.5,CclrCmovP1.5,CcallDELAY_5mssetbCmovP1.5,Cincr1movA,r1;写第三位数码管movxDPTR,AsetbCmovP1.6,CclrCmovP1.6,CcallDELAY_5mssetbCmovP1.6,Cincr1movA,r1;写第四位数码管movxDPTR,AsetbCmovP1.7,CclrCmovP1.7,CcallDELAY_5mssetbCmovP1.7,Cret;双字节二进制无符
32、号数乘法;被乘数在R2(高位)、R3(低位)中,乘数在R6(高位)、R7(低位)中。;乘积在R2(高位)、R3、R4、R5(低位)中。;用到累加器A,B,PSW,R2R7。;永远不会产生进位。;在出口时总是清除C。;若结果超出2个字节范围则OV=1。MULD2: MOV A,R3MOV B,R7MUL ABMOV R4,BMOV R5,AMOV A,R3MOV B,R6MUL ABADD A,R4MOV R4,ACLR AADDC A,BMOV R3,AMOV A,R2MOV B,R7MUL ABADD A,R4MOV R4,AMOV A,R3ADDCA,BMOV R3,ACLR ARLC A
33、XCH A,R2MOVB,R6MULABADD A,R3MOV R3,AMOV A,R2ADDCA,BMOV R2,AORLA,R3JZMULD21SETBOVRETMULD21:CLROVRET;四字节无符号数除法;R0存放被除数,除数,商数的地址。;从R0开始的连续四个字节为结果的余数,入口时可以为任意,但在出口时发生变化。;其后的连续4个字节在入口时是被除数,出口时是商数。;再其后的连续四个字节在入口时是除数,出口时保持不变。;用到累加器A,B,PSW,R0R7。;如果除数为零,则置OV=1标志,否则清零。;在出口时总是清除C。DIVD4:MOVA,R0MOVB,AADDA,#08hMO
34、VR1,AMOVA,#00hORLA,R1INCR1ORLA,R1INCR1ORLA,R1INCR1ORLA,R1JZDIVD45MOVR1,BMOVR2,#04hDIVD41:MOVR1,#00hINCR1DJNZR2,DIVD41MOVR3,#20hDIVD42:MOVR2,#08hMOVA,BMOVR0,AADDA,#07hMOVR1,ACLRCDIVD43:MOVA,R1RLCAMOVR1,ADECR1DJNZR2,DIVD43MOVA,R0ADDA,#03hMOVR1,AMOVA,R0ADDA,#0BhMOVR0,AMOVA,R1SUBBA,R0MOVR4,ADECR1DECR0MOVA,R1SUBBA,R0MOVR5,ADECR1DECR0MOVA,R1SUBBA,R0MOVR6,ADECR1DECR0MOVA,R1SUBBA,R0MOVR7,AJCDIVD44MOVA,BMOVR0,AADDA,#03hMOVR1,AMOVA,R4MOVR1,ADECR1MOVA,R5MOVR1,ADECR1MOVA,R6MOVR1,ADECR1MOVA,R7MOVR1,AMOVA,R0ADDA,#07hMOVR1,AINCR1DIVD44:DJNZR3,DIVD42MOVR0,BCLROVCLRCRETDIVD45:SETBOVCLRCRETend