欢迎来到沃文网! | 帮助中心 分享知识,传播智慧!
沃文网
全部分类
  • 教学课件>
  • 医学资料>
  • 技术资料>
  • 学术论文>
  • 资格考试>
  • 建筑施工>
  • 实用文档>
  • 其他资料>
  • ImageVerifierCode 换一换
    首页 沃文网 > 资源分类 > DOC文档下载
    分享到微信 分享到微博 分享到QQ空间

    基于AT89C51单片机数字电压表的设计.doc

    • 资源ID:847007       资源大小:131.21KB        全文页数:15页
    • 资源格式: DOC        下载积分:20积分
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: QQ登录 微博登录
    二维码
    微信扫一扫登录
    下载资源需要20积分
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,下载更划算!
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    基于AT89C51单片机数字电压表的设计.doc

    1、 目 录一、整体设计思路框图及原理图1二、模块分析21.AT89C51单片机22.A/D转换.33.显示电路.4三、软件设计5四、 程序清单.6五、仿真实验调试12六、总结与体会.13七、参考文献.14一、 整体设计思路框图及原理图数字电压表的设计即将连续的模拟电压信号经过A/D转换器转换成二进制数值,再经由单片机软件编程转换成十进制数值并通过显示屏显示。 按系统实现要求,决定控制系统采用AT89C51单片机,A/D转换由于仿真软件里的ADC0809元件有问题,这里用ADC0808代替,它和ADC0809区别很小。采用ADC0808。数字电压表系统整体框图如下图1所示。 模拟电 压AT89C5

    2、1 单片机ADC0808转换数据显 示图1 整体框图系统通过软件设置单片机的内部定时器T1产生中断信号。通过片选选择8路通道中的一路,将该路电压送入ADC0808的EOC端口产生高电平,同时将ADC0808的OE端口置为高电平,单片机将转换后结果存到片内RAM。系统调出转换显示程序,将转换为二进制的数据在转换成十进制数并输出到LCD显示电路,将相应电压显示出来。原理图见附录图7。 二、 模块分析1. AT89C51单片机接口分配电路设计如右图2所示: 图2 单片机接口电路P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能

    3、够用于外部程序数据存储器,它可以被定义为数据/ 地址的第八位。在这里P0口作为输入与输出分别与ADC0808的输出端和LCD显示的输入端相连,且P0外部被阻值为1K的电阻拉高。 P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存

    4、器的内容。这里只用到了P2.0P2.3四个端口,其中P2.1P2.3都是作为输出端口控制显示电路的寄存器选择、读写信号和使能端口。 P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。 P3口也可作为AT89C51的一些特殊功能口,在这里用到了P3.3 /INT1(外部中断1)、 P3.6 /WR(外部数据存储器写选通)、P3.7 /RD(外部数据存储器读选通)。2. A/D转换 图3 A/D转换电路接口分配电路设计如图3所示:

    5、IN0IN7为8路模拟量输入端,这里只接一路电压信号,其输入信号是由直流电源及可调电阻提供。 OUT1OUT8为8位二进制数字量输出端,其另一端连接到AT89C51单片机进行数值转换。 ADDA、ADDB、ADDC为3位片选地址输入线,用于选通8路模拟输入中的一路。 ALE为地址锁存允许信号,由单片机P3.6口写信号与P2.0口相或取反输入,高电平有效。 START为 AD转换启动脉冲输入端,由单片机P3.6口写信号与P2.0口相或取反输入一个正脉冲使其启动(脉冲上升沿使0808复位,下降沿启动A/D转换)。 EOC为 AD转换结束信号,当AD转换结束时,此端输出一个高电平取反给P3.3口(转

    6、换期间一直为低电平)。 OE为数据输出允许信号,高电平有效。当AD转换结束时,此端由单片机P3.7读信号与P2.0口相或后取反输入一个高电平,才能打开输出三态门,输出数字量。 3. 显示电路 图4 显示电路接口分配设计如图4所示:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。由单片机P2.1口控制R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。由单片机P2.2口控制E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命

    7、令。由单片机P2.3口控制 图5 程序流程图D0D7为8位双向数据线。由单片机P0口输入,经过阻值为1K的上拉电阻连接。三、 软件设计主程序的内容包括:起始地址、中断服务程序的起始地址、有关内存单元及相关部件的初始化和一些子程序的调用等。根据设计要求,设计出如图5所示的主程序流程图。A/D转换子程序设计: A/D转换程序的功能是采集数据,在整个系统设计中占有很高的地位。当系统置好后,单片机扫描转换结束管脚P3.7的输入电平状态,当输入为高电平则转换完成,将转换的数值显示输出。若输入为低电平,则继续扫描。程序流程图如图6所示。 图6 A/D转换子程序流程图四、 程序清单COM EQU 50H ;

    8、 指令寄存器DAT EQU 51H ; 数据寄存器RS EQU P2.1 ; LCD寄存器选择信号RW EQU P2.2 ; LCD读/写选择信号E EQU P2.3 ; LCD使能信号 ORG 0000H LJMP MAIN ;主程序入口 ORG 000BH LJMP BT0 ;T0中断入口 ORG 0030H ;主程序,初始化MAIN: MOV SP,#60H LCALL INT MOV 30H,#30H MOV 31H,#30H MOV 32H,#0A5H MOV 33H,#30H MOV 34H,#30H MOV R7,#30H LCALL N1 ;显示 Voltage = 00.00

    9、MOV TMOD,#00H ;定时器T0设为方式0MOV TH0,#00h ;装入定时常数MOV TL0,#00hSETB TR0 ;启动T0MOV 24h, #03h ;装入T0中断次数MOV IE,#82H ;开中断LP: MOV R7,#30H ;显示缓冲区首地址LCALL DISPLYSJMP LP ;循环显示DISPLY: MOV COM,#0CAH ;设置数据起始地址(第而行第10位) LCALL PR1 MOV R1,#05H MOV R0,#30Hl: MOV DAT,r0 LCALL PR2 INC R0 DJNZ R1,l RET;1. 逐字依次输入方式演示程序段N1:MO

    10、V COM,#01H ;清屏 LCALL PR1 MOV COM,#06H ;设置输入方式 LCALL PR1 MOV COM,#081H ;设置数据起始地址(第一行地二位) LCALL PR1 MOV DPTR,#TAB1 MOV R2,#0EH MOV R3,#00HWRIN1: MOV A,R3 MOVC A,A+DPTR MOV DAT,A LCALL PR2 INC R3 DJNZ R2,WRIN1 MOV COM,#0C1H ;设置数据起始地址(第二行地二位) LCALL PR1 MOV DPTR,#TAB2 MOV R2,#9 MOV R3,#00HWRIN2: MOV A,R3

    11、 MOVC A,A+DPTR MOV DAT,A LCALL PR2 INC R3 DJNZ R2,WRIN2 RETTAB1: DB VOLTAGE= ; LCD间接控制方式下的初始化子程序INT:LCALL DELAY ; 调延时子程序MOV COM,#38H ; 设置工作方式(2行,8位数据)LCALL PR1MOV COM,#01H ; 清屏LCALL PR1MOV COM,#06H ; 设置输入方式LCALL PR1MOV COM,#0CH ; 设置显示方式LCALL PR1RETDELAY:MOV R6,#0FH ; 延时子程序MOV R7,#00HDELAY1: NOP NOPD

    12、JNZ R7,DELAY1DJNZ R6,DELAY1RET;LCD间接控制方式的驱动子程序如下;1 读BF和AC值PR0: PUSH ACC MOV P0,#0FFH ; P0置位, 准备读 CLR RS ; RS=0 SETB RW; R/W=1 SETB E ; E=1 LCALL DELAY MOV COM,P0 ; 读BF和AC6-4值 CLR E ; E=0 POP ACC RET;2 写指令代码子程序PR1: PUSH ACC CLR RS ; RS=0 SETB RW ; R/W=1PR11:MOV P0,#0FFH; P0置位, 准备读 SETB E ; E=1 LCALL

    13、DELAY NOP MOV A,P0 CLR E JB ACC.7,PR11;BF=1? CLR RW; R/W=0 MOV P0,COM SETB E ; E=1 CLR E ; E=0; E=0 POP ACC RET;3 写显示数据子程序PR2:PUSH ACC CLR RS ; RS=0 SETB RW; R/W=1PR21:MOV P0,#0FFH SETB E ; E=1 LCALL DELAY MOV A,P0 ; 读BF和AC6-4值 CLR E ; E=0 JB ACC.7,PR21 SETB RS CLR RW MOV P0,DAT; 写入数据 SETB E CLR E P

    14、OP ACC RET;4 读显示数据子程序PR3:PUSH ACC CLR RS ; RS=0 SETB RW; R/W=1PR31:MOV P0,#0FFH ; P0置位, 准备读 SETB E ; E=1 LCALL DELAY MOV A,P0 ; 读BF和AC6-4值 CLR E ; E=0 JB ACC.7,PR31 SETB RS SETB RW; R/W=1 MOV P0,#0FFH ; 读数据 SETB E ; E=1 MOV DAT,P0 CLR E ; E=0 POP ACC RET; 定时器T0中断服务程序,读取ADC0809第0通道的A/D转换结果并化为显示值BT0:

    15、PUSH ACC ;保护现场PUSH PSWMOV PSW,#08HCLR TR0 ;停止T0MOV TH0,#00h ;重装定时常数MOV TL0,#00hMOV DPTR,#0F6FFH ;0809端口地址MOV A,#0 ;0通道MOVX DPTR,A ;启动0809MOV R7,#0FFH ;等待A/D转换完DJNZ R7,$MOVX A,DPTR ;读0809转换结果 MOV B,#03H ;将转换的值除以3再累加,存入40H中 DIV AB ADD A,40H MOV 40H,A MOV A,B ;将除以3后的余数累加放入41H中 ADD A,41H MOV 41H,A DEC 2

    16、4h ;3次中断未到则返回MOV A,24HJNZ RNT1 MOV 24h,#03h ;重装中断次数 MOV A,41H ;将累加的余数再除3后相加 DIV AB ADD A,40H MOV 40H,#0 ;清零累加数 MOV 41H,#0RTN: MOV B,#0fh ;A/D转换结果化为显示值 MUL AB ;(AD*5)/256 MOV R0,A MOV A,B MOV B,R0 MOV R0,A ADD A,#246 MOV A,R0 MOV 30H,#00H JNC LOOP ADD A,#06H MOV 30H,#01HLOOP: MOV 31H,A ;AD*5的高字节为整数部分

    17、 MOV A,B MOV B,#0AH MUL AB ;AD*5的低字节为/256的结果,为小数部分 MOV 33H,B ;二进制小数换为10进制数 MOV B,#0AH MUL AB MOV 34H,B LJMP RTN1RTN1: SETB TR0 ORL 30H,#30H ORL 31H,#30H MOV 32H,#0A5H ;小数点 ORL 33H,#30H ORL 34H,#30H POP PSWPOP ACCRETI END五、 仿真实验调试1.打开WAVE 6000 软件,菜单栏选择“文件”中的“新建文件”,在弹出的窗口中编写程序,然后保存后缀为“*.asm”的程序。2.菜单栏选

    18、择“项目”中的“编译”,如果程序无误即编译成功,否则修改程序直至编译成功。3.打开Proteus软件,新建文件FileNew Design,同样在弹出的原理图编辑窗口中绘制原理图,然后保存。4.加载程序,选择SourceAdd/Remove Source Files,在弹出的对话框中点击“New”选择在WAVE 6000软件中编写保存的程序如“*.asm”,点击“OK”即加载成功。5.在Proteus软件中的左下方点击图标仿真调试开始,即可看到仿真调试的结果。六、 总结与体会这虽然是一个数字电压表的设计但是实际上就是一个数据采集的程序设计,只不过这里数据采集的是模拟电压罢了。虽然这个单片机的课

    19、题比较简单,但是从中我还是学到了许多新东西。在之前的学习过程中没有用到Proteus这个软件,所以刚刚开始的时候一边在百度里看Proteus入门教程一边实践操作Proteus这个软件,不过幸好以前学过Protell 99绘图软件,举一反三的在短时间内把Proteus磕磕碰碰学会了。想想我们在大学里速学软件还是比较有心得:在一两天内只学这个软件,或许还算不上熟练但是入门还是可以了。在Proteus软件部分的设计中也让我感受良多。以前做的单片机的设计都只是写写程序,下载到单片机上运行,都只是编程方面的工作,很少涉及选择单片机试验台上已有芯片以外的芯片,更不用说芯片的一些管脚作用。就像A/D转换器在

    20、Proteus中仿真软件ADC0809有问题所以用ADC0808代替。而且ADC0808是单极性,输入电压范围为05V,而我们课题要求的是0+15V,所以我利用参考电压可以达到15V这一点把0+15V转化成05V,进行模数转换。在局部电路图中遇到很多问题,通过查阅大量资料以及老师和同学的帮助讲解才逐渐懂得如何应用。如在Proteus软件中仿真选用了最常用的直流电压电源和可调电阻组成0+15V的模拟电压,而在试验台上可以直接连接可调电压源。这种方法是平时很少注意到的基础性知识运用,在这次的课程设计中让我又有了新的收获。总的来说结果还是完成了设计任务,虽然整个过程有点不在状态,但还是温故而知新,对单片机有了一种新的认识。 七、 参考文献1. 王迎旭.单片机原理与应用.机械工业出版社.2. 周向红.51系列单片机应用与实践教程.北京航空航天大学出版社3. 何立民.单片机应用系统设计. 北京航空航天大学出版社4. 蔡朝洋.单片机控制实习与专题制作.北京航空航天大学出版社5. 楼然苗.51系列单片机设计实例M.北京航空航天大学出版社.6. 陈明荧.8051单片机课程设计实训教材M.清华大学出版社.15


    注意事项

    本文(基于AT89C51单片机数字电压表的设计.doc)为本站会员(精***)主动上传,沃文网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知沃文网(点击联系客服),我们立即给予删除!




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服点击这里,给沃文网发消息,QQ:2622162128 - 联系我们

    版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。

    Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1

    陕公网安备 61072602000132号     违法和不良信息举报:0916-4228922