《毕业设计(论文)基于单片机的数字电压表设计 .doc》由会员分享,可在线阅读,更多相关《毕业设计(论文)基于单片机的数字电压表设计 .doc(34页珍藏版)》请在三一办公上搜索。
1、数字电压表设计前言伴随着城市人口和建设规模的扩大,各种用电设备的增多,用电量越来越大,城市的供电设备经常超负荷运转,用电环境变得越来越恶劣,对电源的“考验”越来越严重。据统计,每天,用电设备都要遭受120次左右各种的电源问题的侵扰,电子设备故障的60%来自电源7。因此,电源问题的重要性日益凸显出来。原先作为配角,资金投入较少的电源越来越受到厂商和研究人员的重视,电源技术遂发展成为一门崭新的技术。而今,小小的电源设备已经融合了越来越多的新技术。例如开关电源、硬开关、软开关、参数稳压、线性反馈稳压、磁放大器技术、数控调压、PWM、SPWM、电磁兼容等等。实际需求直接推动电源技术不断发展和进步,为了
2、自动检测和显示电流,并在过流、过压等危害情况发生时具有自动保护功能和更高级的智能控制,具有传感检测、传感采样、传感保护的电源技术渐成趋势,检测电流或电压的传感器便应运而生并在我国开始受到广大电源设计者的青睐,本文就是在这个背景下编著的。第1章 绪论数字电压表的基本工作原理是利用A/D转换电路将待测的模拟信号转换成数字信号,通过相应换算后将测试结果以数字形式显示出来的一种电压表。较之于一般的模拟电压表,数字电压表具有精度高、测量准确、读数直观、使用方便等优点。电压表的数字化测量,关键在于如何把随时连续变化的模拟量转化成数字量,完成这种转换的电路叫模数转换器(A/D)。数字电压表的核心部件就是A/
3、D转换器,由于各种不同的A/D转换原理构成了各种不同类型的DVM。一般说来,A/D转换的方式可分为两类:积分式和逐次逼近式。积分式A/D转换器是先用积分器将输入的模拟电压转换成时间或频率,再将其数字化。根据转化的中间量不同,它又分为U-T(电压-时间)式和U-F(电压-频率)式两种。逐次逼近式A/D转换器分为比较式和斜坡电压式,根据不同的工作原理,比较式又分为逐次比较式及零平衡式等。斜坡电压式又分为线性斜坡式和阶梯斜坡式两种。在高精度数字电压表中,常采用由积分式和比较式相结合起来的复合式A/D转换器。本设计以AT89C51单片机为核心,以逐次比较型A/D转换器ADC0808、液晶显示器LCD1
4、602为主体,构造了一款简易的数字电压表,能够测量1路050V直流电压,最小分辨率0.02V。方案设计实现数字电压表的方案较多,目前广泛采用的是基于74系列逻辑器件方案,本设计将介绍基于单片机实现的方案。74系列逻辑器件方案采用双积分电路+液晶显示器+逻辑电路+定时采样电路+数据处理实现,被测电压信号由信号输入端加到测量系统,进行预处理后送到后级电路。单片机系统方案此方案采用输入处理电路+ADC0808+AT89C51+液晶显示实现,被测信号由ADC0808模拟输入端输入,单片机采集转换数据,将转换数据送出显示。第二章 方案选择2.1方案选择2.1.1量程转换方案设计 方案一:考虑到ADC08
5、08的八路模拟量输入通道本质上也是模拟开关,因此可以利用其八个模拟通道中的三个作为量程转换器,即根据通道对应的电压测量范围确定对应的电压发达倍数设计对应的前置放大电路.方案二:选用模拟开关芯片4066实现量程转换。4066集成了4个模拟开关,每一路开关都有一个控制端控制对应开关的通断。用单片机对控制端进行控制,实现不同量程的转换。方案三:利用手动开关实现量程转换。该方案可简化控制程序,减小系统开销,缩短反应时间,不足之处在于操作麻烦。终上所述:方案三所需元件少、成本低且易于实现,可选此方案。2.1.2显示部分方案设计方案一:用液晶LCD1602来显示电压读数可进行片选,实现液晶的动态点亮。因为
6、只需一片液晶就可以完成现示工作,所以当单片机控制前两个控制端时,最高位控制端应接地。用软件作为液晶的驱动显示,且具体译码由软件控制。方案二:同方案一选用ADC0808进行片选,在译码驱动部分选用液晶LCD1602,用软件译码。终上所述:由于两个方案都可以实现同样的功能,但方案二设计简单、系统开销小、反应速度较快,因此选择此方案。2.2方案论证经过以上方案设计,决定采用如图2-1所示方案。图2-1 系统框第3章 硬件设计3.1单片机控制模块设计单片机控制模块的作用是为控制各单元电路的运行并完成数据的换算或处理,主要由单片机、时钟电路、复位电路组成。3.1.1时钟电路单片机工作的时间基准是由时钟电
7、路提供的,在单片机的XTAL1和XYAL2两个管脚接一只晶振及两只电容就构成了单片机的时钟电路,电路中电容器和对振荡频率有微调作用,通常取(3010)pF石英晶体选择6MHz或12MHz都可以。时钟电路如图3-1所示。 图3-1系统时钟电路 图3-2系统复位电路3.1.2复位电路单片机的RST管脚为主机提供了一个外部复位信号输入口。复位信号是高电平有效,高电平有效的持续时间为2个机器周期以上。单片机的复位方式可由手动复位方式完成。电阻、电容器的参考值=10K、=10uF、=0.01uF。复位电路如图3-2所示。3.2 量程转换模块设计3.2.1 电路选择图3-3量程转换开关 图3-4衰减输入电
8、路输入电路的作用是把不同量程的被测电压,规范到A/D转换器所要求的电压值。数字电压表所采用的是逐次逼近式A/D转换芯片ADC0808,它要求输入电压0-2V。本仪表设计的是0-50V电压,灵敏度高所以可以不加前置放大器,只需衰减器,如图所示9M、900K、90K、和10K电阻构成1/10、1/100、1/1000的衰减器。衰减输入电路可由开关来选择不同的衰减率,从而切换档位。3.2.2 工作原理及换算关系如上图通过电阻网络实现电压衰减测量的输入阻抗约为R4、R5、R6。1端、2端单独合上时,Vout的大小分别是:1脚单独合上Vout=Vin1;2脚单独合上Vout= Vin(R4+ R5+ R
9、6)/(R3+ R4+ R5+ R6)。由上式可以看出,Vout在一定范围时电阻网络衰减程度越大其可输入电压Vin。量程调节,只要把R5,R6的参数选好然后,由开关1端、2断选择测量电压输出端即完成量程选定。3.3 逐次逼近式A/D转换模块设计逐次逼近型A/D转换器属于直接型A/D转换器,它能把输入的模拟电压直接转换为输出的数字代码,而不需要经过中间变量。主要由比较器、环形分配器、控制门、寄存器与D/A转换器组成。3.3.1 ADC0808简介1ADC0808引脚功能图3-5ADC0808引脚图IN0IN7:8路模拟量输入。A、B、C:3位地址输入,2个地址输入端的不同组合选择八路模拟量输入。
10、ALE:地址锁存启动信号,在ALE的上升沿,将A、B、C上的通道地址锁存到内部的地址锁存器。D0D7:八位数据输出线,A/D转换结果由这8根线传送给单片机。OE:允许输出信号。当OE=1时,即为高电平,允许输出锁存器输出数据。START:启动信号输入端,START为正脉冲,其上升沿清除ADC0808的内部的各寄存器,其下降沿启动A/D开始转换。EOC:转换完成信号,当EOC上升为高电平时,表明内部A/D转换已完成。2ADC0808内部结构图逐次逼近型A/D转换器ADC0808由八路模拟开关、地址锁存与译码器、比较器、D/A转换器、寄存器、控制电路和三态输出锁存器等组成。其内部结构如图3-6所示
11、。图3-6ADC0808内部结构3.3.2 A/D转换电路设计集成摸数转换芯片ADC0808实现的A/D转换电路如图3-7所示,被测信号由ADC0808模拟输入端输入,完成A/D转换后送入单片机,经相应处理后送出显示。图3-7ADC0808与单片机的连接3.4显示模块设计3.4.1 LCD显示模块LCD显示器分为字段显示和字符显示两种。其中字段显示与LED显示相似,只要送对应的信号到相应的管脚就能显示。字符显示是根据需要显示基本字符。本设计采用的是字符型显示。系统中采用LCD1602作为显示器件输出信息。与传统的LED数码管显示器件相比,液晶显示模块具有体积小、功耗低、显示内容丰富等优点,而且
12、不需要外加驱动电路,现在液晶显示模块已经是单片机应用设计中最常用的显示器件了。LCD1602可以显示2行16个汉字。3.4.2 LCD1602的引脚功能LCD1602模块的引脚如图3-8所示,其引脚功能如下:RS:数据和指令选择控制端,RS=0命令状态;RS=1数据R/W:读写控制线,R/W=0写操作;R/W=1读操作A:背光控制正电源 K:背光控制地E:数据读写操作控制位,E线向LCD模块发送一个脉冲,LCD模块与单片机间将进行一次数据交换DB0DB7:数据线,可以用8位连接,也可以只用高4位连接,节约单片机资源。VDD:电源端 VEE:亮度控制端(1-5V)VSS VDD VO RS R/
13、W E DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7 A KLCD 模 块1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 VSS:接地端图3-8LCD1602模块3.4.3 LCD1602的显示操作1四种基本操作LCD有四种基本操作,具体如表3-1所示。表3-1 LCD与单片机之间有四种基本操作RSR/W操作00写命令操作(初始化,光标定位等)01读状态操作(读忙标志位)10写数据操作(要显示内容)11读数据操作(可以把显示存储区中的数据反读出来)(1)读状态字执行读状态字操作,如表3-1满足RS=0,R/W=1。根据管脚功能,当为有效电平时,状
14、态命令字可从LCD模块传输到数据总线。同时可以保持一段时间,从而实现读状态字的功能。读状态字流程如图3-9所示。图3-9 读入状态字流程图(2)命令字表3-2所示为命令字,其主要介绍了指令名称、控制信号及控制代码。其指令名称是指要实现的功能;控制代号是采用的十六进制的数值表示的。1)清零操作是指输入某命令字后即能将整个屏幕显示的内容全部清除;2)归home位:将光标送到初始位;其中的号为任意,高低电平均可;3)输入方式:设光标移动方向并指定整体显示,是否移动。I/D=0:减量方式,S=1:移位方式,S=0:不移位;4)显示状态:D指设置整体显示开关;C指设置光标显示开关;B指设置光标的字符闪耀
15、;5)光标画面滚动:R/L指右移或左移;S/C指移动总体或光标;6)功能设置:DL接口数位,L指显示行数,F显示字型;如DL=1:8位=0,4位N=1:2行=0:1行,G=1:510=0:57(点阵)7)CGRAM地址设制:相当于一个数据库,可以在其中选择所需要的符号;8)DDRAM地址设制:显示定位;9)读BF和AC:B为最高位忙的标志,F为标志位;10)写数据:将数据按要求写入到对应的单元;11)读数据:读相应单元内的数据;表3-2命令字指令名称控制信号控制代码RSRWD7D6D5D4D3D2D1D0清屏0000000001归HOME位000000001*输入方式设制00000001I/D
16、S显示状态设制0000001DCB无标画面滚动000001S/CRL*功能设置00001DLNF*CGRAM地址设制0001A5A4A3A2A1A0DDRAM地址设制001A6A5A4A3A2A1A0读BF和AC01BFAC6AC5AC4AC3AC2AC1AC0写数据10数 据读数据11数 据(3)写命令字由表3-2可知当RS=0,R/W=0时,才可以通过单片机或用户指令把数据写到LCD模块,此时就对LCD进行调制。可采用查询方式:先读入状态字,再判断忙标志位,最后写命令字。图3-10所示为写命令字的流程图。图3-10写命令字流程图1)定义光标位置显示数据的某位,就是把显示数据写在相应的DDR
17、AM地址中,DDRAM地址占7位。SetDDRAMaddress命令如表3-3所示。光标定位,写入一个显示字符后,DDRAM地址会自动加1或减1,加或减由输入方式设置。表3-3Set DDRAM address命令RSR/WDB7DB6DB5DB4DB3DB2DB1DB0001AC6AC5AC4AC3AC2AC1AC0第1行DDRAM地址与第2行DDRAM地址并不连续,如表3-4所示。表3-4DDRAM地址row12345141516line180H81H82H83H84H8dH8eH8fHline20c0H0c1H0c2H0c3H0c4H0cdH0ceH0cfH2)LCD初始化从通电开始延时
18、,先经过判忙后再进行功能设置,过一段时间后可以设制显示状态(如设制行、位或阵列)再经过延时清屏后才可以设置输入方式,具体实现过程如图3-11所示。图3-11LCD初始化流程图2LCD显示程序设计LCD显示程序的设计一般先要确定LCD的初始化、光标定位、确定显示字符后,显示流程如图3-12显示。图3-12LCD显示程序流程图第4章 软件设计根据需要,可将系统软件按照功能划分为4个模块,分别是主程序模块、A/D转换模块、液晶显示模块、中断服务程序模块(改变显示的小数点位置),各模块的功能关系如图4-1所示。编写系统软件时,可首先编写各模块的底层驱动程序,而后是系统联机调试,编写上层主程序。系统主程
19、序液晶管显示A/D转换中断服务.图4-1系统软件框图4.1 主程序设计图4-2主程序流程图主程序主要负责各个模块的初始化工作:设置定时器、寄存器的初值,启动A/D转换,读取转换结果,处理量程转换响应,控制液晶实时显示等,其流程图如图4-2所示。4.2 A/D转换程序A/D转换程序的功能是采集数据,在整个系统设计中占有很高的地位。当系统设置好后,单片机扫描转换结束管脚P2.6的输入电平状态,当输入为高电平则转换完成,将转换的数值转换并显示输出。若输入为低电平,则继续扫描。程序流程图如图4-3所示。图4-3 A/D转换程序流程图4.3 中断服务程序中断服务程序的功能是为ADC0808提供时钟信号,
20、当中断发生时将AT89C51单片机的P2.4管脚将输出信号取反,为ADC0808提供12kHz时钟信号。4.3.1、中断和中断源所谓中断就是CPU暂停当前程序的执行,转而执行处理紧急事务的程序,并在该事务处理完后能自动恢复执行原先程序的过程。在此,称引起紧急事务的事件为中断源,称处理紧急事务的程序为中断服务程序或中断处理程序。 计算机系统还根据紧急事务的紧急程度,把中断分为不同的优先级,并规定:高优先级的中断能暂停低优先级的中断服务程序的执行。计算机系统有上百种可以发出中断请求的中断源,但最常见的中断源是:外设的输入输出请求,如:键盘输入引起的中断,通信端口接受信息引起的中断等;还有一些计算机
21、内部的异常事件,如:0作除数、奇偶校验错等。CPU在执行程序时,是否响应中断要取决于以下三个条件能否同时满足:(1)、有中断请求;(2)、允许CPU接受中断请求;(3)、一条指令执行完,下一条指令还没有开始执行。条件(1)是响应中断的主体。除用指令INT所引起的软件中断之外,其它中断请求信号是随机产生的,程序员是无法预见的。程序员可用程序部分地控制条件(2)是否满足,即可用指令STI和CLI来允许或不允许CPU响应可屏蔽的外部中断。而对于不可屏蔽中断和内部中断,CPU一定会响应它们的,程序员是无控制权的。CPU一定会执行这些中断的中断服务程序。4.3.2、断向量表和中断服务程序中断向量表是一个
22、特殊的线性表,它保存着系统所有中断服务程序的入口地址(偏移量和段地址)。在微机系统中,该向量表有256个元素(00FFH),每个元素占4个字节,总共1K字节,其在内存中的存储形式及其存储内容如图8.2所示。图4-4中的“中断偏移量”和“中断段地址”是指该中断服务程序入口单元的“偏移量”和“段地址”。由此不难看出:假如中断号为n,那么,在中断向量表中存储该中断处理程序的入口地址的单元地址为:4n。表4-5说明了前16个中断向量表中列举了部分常用的中断号。图4-4 中断向量表表4-5 部分常用的中断号及其含义中断号含义中断号含义0除法出错8定时器1单步9键盘2非屏蔽中断A未用3断点BCOM24溢出
23、CCOM15打印屏幕D硬盘(并行口)6未用E软盘7未用F打印机4.3.3引起中断的指令中断处理程序基本上是系统程序员编写好的,是为操作系统或用户程序服务的。为了在应用程序中使用中断服务程序,程序员必须能够在程序中有目的地安排中断的发生。为此,指令系统提供了各种引起中断的指令。1、中断指令INT中断指令INT的一般格式如下:INT Imm其中:立即数Imm是一个00FFH范围内的整数。指令执行的步骤:、把标志寄存器压栈,清除标志位IF和TF;、把代码段寄存器CS的内容压栈,并把中断服务程序入口地址的高字部分送CS;、32位段,压32位IP。在该指令执行完后,CPU将转去执行中断服务程序。由于有了
24、指令INT,程序员就能为满足某种特殊的需要,在程序中有目的地安排中断的发生,也就是说,该中断不是随机产生的,而是完全受程序控制的。一般情况下,一个中断可有很多不同的功能,每个功能都有一个唯一的功能号,所以,在安排中断之前, 程序员还要决定需要该中断的哪个功能,中断的功能号都是由AH来确定的。有些中断还需要其它参数,常用中断的功能和参数如附录3所列。2、溢出指令INTO当标志位OF为1时,引起中断。该指令的格式如下:INTO该指令影响标志位:IF和TF。4.3.4 中断返回指令当一个中断服务程序执行完毕时,CPU将恢复被中断的现场,返回到引起中断的程序中。为了实现此项功能,指令系统提供了一条专用
25、的中断返回指令。该指令的格式如下:IRET/IRETD该指令执行的过程基本上是INT指令的逆过程,具体如下:、从栈顶弹出内容送入IP;、再从新栈顶弹出内容送入CS;、再从新栈顶弹出内容送入标志寄存器;对80386及其以后的CPU,指令IRETD从栈顶弹出32位内容送入EIP。4.3.5 中断和子程序的比较中断和子程序调用之间有其相似和不同之处。它们的工作过程非常相似,即:暂停当前程序的执行,转而执行另一程序段,当该程序段执行完时,CPU都自动恢复原程序的执行。如图4-6所示。图4-6 中断和子程序调用的工作过程它们的主要差异有:l 子程序调用一定是程序员在编写源程序时事先安排好的,是可知的,而
26、中断是由中断源根据自身的需要产生的,是不可预见的(用指令INT引起的中断除外);l 子程序调用是用CALL指令来实现的,但没有调用中断的指令,只有发出中断请求的事件(指令INT是发出内部中断信号,而不要理解为调用中断服务程序);l 子程序的返回指令是RET,而中断服务程序的返回指令是IRET/IRETD。l 在通常情况下,子程序是由应用系统的开发者编写的,而中断服务程序是由系统软件设计者编写的。第5章 系统仿真与调试在进行电路的局部调试之后,我又进行了系统整机调试。首先为ADC0808接上+12V的电压,为其它芯片接上+5V的工作电压。另外还要输入待测的模拟电压,该电压从200mV以下的电压开
27、始输起,依次增大,直到达到待测电压的上限50V为止,记录测量数据并分析系统性能。5.1 分局部调试1检查ADC0808是否工作ADC0808集成了三个控制端。如果某一控制端为高电平则对应的开关将接通。为测量其是否工作,我们将它的三个控制端用导线引出分别接高低电平,发现测量结果与理论分析结果一致,ADC0808工作正常。2各量程调节这一步调试是建立在上述两步调试的基础上的。针对不同的档位,我们通过接入不同待测的模拟量来调节电压。5.2 整机调试本系统的测试采用Proteus软件,系统在Proteus软件中仿真时使用的元件如表5-1所示。测试表明,系统运行正常,能准确将直流模拟信号的电压转换成数值
28、显示,并能精确到5位有效数字,达到了设计的要求。表5-1 元件名称及属性序号元件名属性序号元件名属性1AT89C51单片机7LM016LLCD16023CAP电容8ADC08088位A/D转换器4CAP-ELEC电解电容9PULLUP上拉电阻5CRYSTAL晶振10SW-POT44路模拟开关6RES电阻1174LS02与非门5.3 系统仿真采用Keil编译器进行源程序编译及仿真调试,调好程序后将目标程序导入Proteus进行软硬件调试,基于单片机实现的数字电压表测试值见表5-2所示。表5-2测试值与真实值电压表测得值/V0.000.3320.390.5070.9961.2501.5032.00
29、02.480绝对误差/V0.00+0.02+0.01+0.02+0.01+0.01+0.03+0.00+0.01电压表测得值/V4.9805.079.9612.5015.0319.9229.8839.8449.80绝对误差/V+0.00+0.02+0.01+0.01+0.02+0.02+0.02+0.03+0.02从表中可以看出,电压表测得值误差均在0.02V以内,这与采用8位A/D转换器所能达到的理论误差精度相比较接近,因此在一般的应用场合都可以满足要求。结 论本设计以AT89C51单片机为控制核心,通过集成摸数转换芯片ADC0808将被测信号转换成数字信号,经单片机内部程序处理后,由液晶显
30、示器LCD1602显示测量结果。仿真测试表明,系统性能良好,测量读数稳定易读、更新速度合理,直流电压测量范围为050V,最小分辨率为0.02V,满足任务书指标要求。但是,该系统也存在一定程度的不足,例如:1、输入电压易发生干扰不稳定,且驱动能力可能存在不足,需在被测信号的输入端加上一部分驱动电路,比如将量程转换电路改成带放大能力的自动量程转换电路,将幅值较小的信号经适当放大后再测量,可显著提高精度;2、输出量可用平均值算法来改善,使测量准确度更高。3、若能将测量的电压值实时保存,使用时将更方便。4、ADC0808可实现对8个通道的输入信号轮流转换,本设计仅仅使用了其中一个通道,造成了较大的资源
31、浪费。若能对电路稍加改进,实现对多路信号的轮流测量并自动保存相应结果,其应用价值将会更大。致谢在毕业设计完成之际,我在这里向一直关心帮助我的老师、同学和朋友表示我诚挚的谢意。首先感谢的是我的导师彭秀华老师。感谢他给我的指导,在整个设计写作过程中,我始终得到彭秀华老师的悉心教导和认真指点,使得我的理论知识和认识有了很大提高,为我的毕业设计的顺利完成提供了保证。他身上,体现着严谨求实的教学作风,勇于探索的工作态度和求同思变、不断创新的治学理念让我印象深刻。他不知疲倦的敬业精神和精益求精的治学要求,端正了我的学习态度,使我受益匪浅。同时,感谢来此参加我毕业答辩的各位老师,感谢你们的指导教育,感谢你们
32、在答辩时对我的论文给予的详尽细致的审阅,衷心的感谢各位老师,谢谢你们无私的帮助。最后,感谢自动化系和同组的各位同学以及所有支持我关心我的人。在你们的帮助和协助下共同完成了本次设计。谢谢你们!参考文献1 单片机系统的PROTEUS设计与仿真,张靖武等编著,电子工业出版社2 Proteus 在 MCS-51&ARM7 系统中的应用百例(含光盘1张),周润景等编著,电子工业出版社3 51系列单片机设计实例(第2版) ,李光飞,北航出版社4 智能化测量控制仪表原理与设计(第2版)徐爱钧,北航出版社5串行接口LED数码管及键盘管理器件的原理与应用6只读存储器ROM和随机存取存储器RAM的使用与实例详解7
33、A/D转换器及其接口的使用8单片机基础,李广第,朱月秀,王秀山,北京航空航天大学出版社9A/D、D/A转换器接口技术与实用电路,杨振江,西安电子科技大学出版社10单片机课程设计实例知道,李光飞,北京航空航天大学出版社11单片机原理与程序设计实验教程,于殿泓 王新年 西安电子科技大学出版社12单片机应用系统设计. 何立民.北京:北京航空航天大学出版社13 单片机C语言轻松入门出 版 社: 北京航空航天大学出版社作者: 周坚 14 跟我学用单片机作者肖洪兵 胡辉 郭速学出 版 社北京航空航天大学出版社 15 嵌入式应用技术基础教程作者:王宜怀 出版社:清华大学出版社附录 系统源程序COMEQU50
34、HDATEQU51HRSEQUP2.1;LCD寄存器选择信号RWEQUP2.2;LCD读/写选择信号EEQUP2.3;LCD使能信号ORG0000HLJMPMAINORG000BHLJMPBT0;T0中断入口ORG0030H;主程序初始化MAIN:MOVSP,#60HLCALL INTMOV30H,#30HMOV31H,#0A5HMOV32H,#30HMOV33H,#30HMOV34H,#30HMOVR7,#30HLCALLN1;显示Voltage=0.000LCALLN2;定时器初始化程序MOVTMOD,#00HMOVTH0,#00HMOVTL0,#00HSETBTR0MOV24H,#03H
35、MOVIE,#82HLP:MOVR7,#30H;显示缓冲区首地址LCALLDISPLYSJMPLP;循环显示;定时器中断服务程序,读取0809第0通道的转换结果并转换为显示值BT0:PUSHACCPUSHPSWMOVPSW,#00HCLRTR0MOVTH0,#00HMOVTL0,#00HDEC24HMOVA,24HMOVA,P1ANLA,#03HDECAZLC0DECAJZLC1LC0:JNZRTN1MOV24H,#03HMOVDPTR,#0F6FFHMOVA,#00HMOVXDPTR,AMOVR7,#0ccHDJNZR7,$MOVXA,DPTRMOV40H,AMOVB,#05H;A/D转换结
36、果化为显示值MULAB;(AD*5)/25MOV30H,B;AD*5的高字节为整数部分MOVB,#0AHMULAB;AD*5的低字节为/256的结果,为小数部分MOV32H,B;二进制小数换为10进制数MOVB,#0AHMULABMOV33H,BMOVB,#0AHMULABMOV34H,BRTN1: SETBTR0ORL30H,#30HMOV31H,#0A5HORL32H,#30HORL33H,#30HORL34H,#30HMOV35H,#30HLJMPLCCLC1: JNZRTN2MOV24H,#03HMOVDPTR,#0F6FFHMOVA, #00HMOVXDPTR,AMOVR7,#0cc
37、HDJNZR7,$MOVXA,DPTRMOV40H,AMOVB,#05H; A/D转换结果显示值MULAB;(AD*5)/25MOV30H,B;AD*5的高字节为整数部分MOVB,#0AHMULAB;AD*5的低字节为/256的结果,为小数部分MOV31H,B;二进制小数换为10进制数MOVB,#0AHMULABMOV33H,BMOVB,#0AHMULABMOV34H,BRTN2: SETBTR0ORL30H,#30HORL31H,#30HMOV32H,#0A5HORL33H,#30HORL34H,#30HMOV35H,#30H;AJMPLCCLCC:NOPPOPPSWPOPACCRETIDI
38、SPLY:;LCD显示子程序MOVCOM,#0CAHLCALLPR1MOVR1,#05HMOVR0,#30HL:MOVDAT,R0LCALLPR2INCR0DJNZR1,LRET;逐字依次输入方式演示程序段N1:MOVCOM,#01HLCALLPR1MOVCOM,#06HLCALLPR1MOVCOM,#0EHLCALLPR1MOVDPTR,#TABMOVR2,#8HWRIN1:MOVR3,#00HWRIN:;写入MOVA,R3MOVCA,A+DPTRMOVDAT,ALCALLPR2INCR3DJNZR2,WRINRETN2:MOVCOM,#06HLCALLPR1MOVCOM,#0C0HLCAL
39、LPR1MOVDPTR,#TAB1MOVR2,#9HSJMPWRIN1TAB:DBlicaiyuTAB1:DBVOLTAG = ;LCD间接控制方式下的初始化子程序INT:LCALLDELAY;调用延时子程序MOVCOM,#3CH;设置工作方式LCALLPR1MOVCOM,#01H;清屏LCALLPR1MOVCOM,#06H;设置输入方式LCALLPR1MOVCOM,#080H;设置显示方式LCALLPR1RETDELAY:MOVR6,#0FH;延时MOVR7,#00HDELAY1: NOPDJNZR7,DELAY1DJNZR6,DELAY1RET;LCD间接工致方式的驱动子程序;读BF和AC
40、的值PR0:PUSHACCMOVP0,#0FFH;P0置位,准备读CLRRS;RS=0,选择指令寄存器SETBRW;RW=1,读SETBE;片选,1有效LCALLDELAYMOVCOM,P0;读BF和AC6-4值CLREPOPACCRET;写指令代码子程序PR1:PUSHACCCLRRS;指令寄存器SETBRWPR11:MOVP0,#0FFH;P0置位,准备读SETBELCALLDELAYNOPMOVA,P0CLREJBACC.7,PR11;BF=1CLRRWMOVP0,COMSETBECLREPOPACCRET;写显示数据程序PR2:PUSHACCCLRRSSETBRWPR21:MOVP0,
41、#0FFHSETB ELCALLDELAYMOVA,P0;读BF和AC6-4CLREJBACC.7,PR21SETBRSCLRRWMOVP0,DAT;写入数据高4位SETBECLREPOPACCRET;读显示数据程序PR3:PUSHACCCLRRSSETBRWPR31:MOVP0,#0FFH;P0置位,准备读SETBELCALLDELAYMOVA,P0;读BF和AC6-4CLREJBACC.7,PR31SETBRS;RS=1,选通数据寄存器SETBRWMOVP0,#0FFH;读数据SETBEMOVDAT,P0CLREPOPACCRETEND;单片机毕业设计程序:数字电压表的设计COMEQU50
42、HDATEQU51HRSEQUP2.1;LCD积存器选择信号RWEQUP2.2;LCD读/写选择信号EEQUP2.3;LCD使能信号ORG0000HLJMPMAINORG000BHLJMPBT0;T0中断入口ORG0030H;主程序初始化MAIN:MOVSP,#60HLCALL INTMOV30H,#30HMOV31H,#0A5HMOV32H,#30HMOV33H,#30HMOV34H,#30HMOVR7,#30HLCALLN1;显示Voltage=0.000LCALLN2;定时器初始化程序MOVTMOD,#00HMOVTH0,#00HMOVTL0,#00HSETBTR0MOV24H,#03HMOVIE,#82HLP:MOVR7,#30H;显示缓冲区首地址LCALLDISPLYSJMPLP;循环显示;定时器中断服务程序,读取0808第0通道的转换结果并转换为显示值BT0:PUSHACCPUSHPSWM