《直流电压表的设计.doc》由会员分享,可在线阅读,更多相关《直流电压表的设计.doc(24页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、目 录一、设计要求2二、设计目的2三、设计的具体实现 21. 系统概述22. 单元电路设计33. 软件程序设计14四、结论与展望22五、心得体会及建议23六、附录23七、参考文献24一设计要求设计一个由8051MCU组成的简易直流电压表系统。能够测量一定范围的电压值,并以数字形式进行显示。通过这个过程熟悉A/D转换、键盘控制、串口通信和七段数码管的使用,掌握51系列单片机控制和测试方法。设计以AT89C51单片机为核心,对电压信号首先进行比例调节以满足A/D的需要;设置按键用于调节不同的电压档位;用LED显示测量得到的电压值;设计通信接口电路以实现测量数据的传送。完成基本要求,可以适当发挥进行
2、扩展设计。测量范围0-200V10位模数转换采样结果通过LED数码管显示通过串行口与PC通信 二、设计目的(1)利用所学单片机的理论知识进行软硬件整体设计,锻炼学生理论联系实际、提高我们的综合应用能力。 (2)我们这次的课程设计是以单片机为基础,设计并开发直流电压表。 (3)掌握各个接口芯片(如ADC0808等)的功能特性及接口方法,并能运用其实现一个简单的微机应用系统功能器件。三、设计的具体实现1.系统概述 直流电压表是针对直流屏、太阳能光伏、蓄电池、电镀、通信电源、直流电动工具等应用场合设计的。该系列的直流电量仪表包含直流电流表、直流电压表、安培小时计、电压小时计、直流功率表、直流电能表等
3、。数字电压表(Digital Voltmeter)简称DVM,它是采用数字化测量技术,把连续的模拟量(直流输入电压)转换成不连续、离散的数字形式并加以显示的仪表.传统的指针式电压表功能单一、精度低,不能满足现代测量的需求,采用单片机的数字电压表,它的精度高、抗干扰能力强。可扩展性强、集成方便,还可与PC进行实时通信。目前,有各种单片A/D转换器构成的数字电压表,已被广泛用于电子及电工测量、工业自动化仪表、自动测试系统等智能测量领域,与此同时,也能把电量及非电量测量技术提高到崭新水平。该系列产品是一种高精度的安装式仪表.方案论证方案一:采用数字化测量技术,把连续的模拟量(直流输入电压)转换成不连
4、续离散的数字形式并加以显示的仪表。这种传统的指针式电压表功能单一精度低,不能满足数字化时代的要求。方案二:采用单片机与AD转换器设计一个数字电压表,测量直流电压值,四位数码显示。目前,由于各种单片A/D转换器构成的数字电压表,已被广泛用于电子及电工测量,工业自动化仪表等测量领域,显示出强大的生命力。从以上两种方案,很容易看出,按系统功能实现要求,两者相比较方案二的设计既简单又实用,软件设计也比较简单同时也实现了功能要求,故采用方案二。所以,本设计 A/D转换器部分采用普通元器件构成模拟部分,利用MCS-51单片机借助软件实现数字显示功能,自动校零、LED显示等功能时采用AT89C51单片机编程
5、实现直流电压表量程的自动转换。本系统主要包括三大模块:转换模块、数据处理模块及显示模块。其中,A/D转换采用ADC0808对输入的模拟信号进行转换,控制核心AT89C51再对转换的结果进行运算处理,最后驱动输出装置LED显示数字电压信号。总体结构框图如图1所示模拟电 压AT89C51 单片机ADC0808转换LED数字显 示图1 总体结构框图2.单元电路设计(1)各部分概述 A/D转换器的设计 A/D转换器具有抗干扰能力强的特点,在采用零点校准的前提下,其转换精度也可以做得很高,但显著的不足是转换速度较慢,并且分辨率越高,其转换速度也就越慢,因此本设计采用了A/D转换器,可以较好的改善转换速度
6、慢的缺点,它的转换速率分辨率的乘积比传统的双积分式A/D转换器提高至少两个数量级。 单片机计数、控制电路设计 通过对A/D转换器的方案分析,本设计采用的单片机编程实现A/D转换,脉冲的计数功能由单片机实现,所以对单片机的速度提出了较高的要求,基本要求分辨率为11位,转换速度不低于2次/S,发挥部分要求分辨率15位,采用MCS-51单片机实现控制和脉冲计数,采用16MHZ晶振,完全能满足分辨率15位和转换速度2次/S的要求。显示电路 显示是电路采用数码管显示器,可显示各种字体的数字、字母,还可以自定义内容,增加了显示的美观性与直观性,是重要的是提供了友好的人机界面。同时LED 8段数码管有静态显
7、示和动态显示两种方式。静态显示方式的各位数码管相互独立,公共端恒定接地或接正电源。每一个字段都要独占一条I/O口只要有断码输出,显示器就可以显示出所要显示的字符,如果CPU不改写,则一直保持下去。动态显示方式下各位数码管的段选线相应并连在一起,由一个8位的I/O口控制;各位的为选线有另外的I/O口控制。(2)单元硬件电路本次设计是以单片机AT89C51芯片、A/D转换器为核心设计了一个简易的直流电压测量电路,在硬件方面,通过一个可变电阻调节输入电压的变化来反映所检测到的电压变化。此变化的电压通过ADC0808的一个通道(INO)送入并进行A/D转换后再送入单片机AT89C51中进行处理,再转换
8、成相应的实际电压值,最后通过四位LED数码管显示,精确到十分位,LED采用的是动态扫描显示,使用74HC02P芯片进行驱动,软件方面采用汇编编程。使得整个系统完成一个简易的数字电压表的功能。输入电压电路输入电路的作用是把不同量程的被测的电压规范到A/D转换器所要求的电压值。衰减输入电路如图2所示 图2衰减输入电路 图3量程切换开关本仪表设计的是0-1000V电压,灵敏度高,所以只需衰减器,如图2所示9M 900K 90K 和10K电阻构成1/101/1001/1000的衰减器。衰减输入电路可由开关来选择不同的衰减率,从而切换档位。AT89C51单片机AT89C51是一种带4K字节闪存可编程可擦
9、除只读存储器(FPEROMFlash Programmable and Erasable Read Only Memory)是低电压、高性能CMOS 8位微处理器,俗称单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。外形及引脚排列如图4所示:单片机最小系统主要由电源、复位、振荡电路以及扩
10、展部分等部分组成。最小系统原理图如图5所示。 图4 AT89C51引脚图 图5最小系统电路图接口分配电路设计如右图6所示:VCC:供电电压。 GND:接地。 图6 单片机接口电路P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/ 地址的第八位。在这里P0口作为输入与输出分别与ADC0808的输出端和LCD显示的输入端相连,且P0外部被阻值为1K的电阻拉高。 P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管
11、脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。这里只用到了P2.0P2.3四个端口,其中P2.1P2.3都是作为输出端口控制显示电路的寄存器选择、读写信号和使能端口。 P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低
12、电平,P3口将输出电流(ILL)这是由于上拉的缘故。 P3口也可作为AT89C51的一些特殊功能口,在这里用到了P3.3 /INT1(外部中断1)、 P3.6 /WR(外部数据存储器写选通)、P3.7 /RD(外部数据存储器读选通)。RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。 ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储
13、器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。 /PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。 /EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程
14、期间,此引脚也用于施加12V编程电源(VPP)。 XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出。 A/D转换器2.3.1概述 模数转换器即A/D转换器,或简称ADC,通常是指一个将模拟信号转变为数字信号的电子元件。 通常的模数转换器是将一个输入电压信号转换为一个输出的数字信号。由于数字信号本身不具有实际意义,仅仅表示一个相对大小。故任何一个模数转换器都需要一个参考模拟量作为转换的标准,比较常见的参考标准为最大的可转换信号大小。而输出的数字量则表示输入信号相对于参考信号的大小。 模数转换器最重要的参数是转换的精度,通常用输出的数字信号的位数的多少表
15、示。转换器能够准确输出的数字信号的位数越多,表示转换器能够分辨输入信号的能力越强,转换器的性能也就越好。 A/D转换一般要经过采样、保持、量化及编码4个过程。在实际电路中,有些过程是合并进行的,如采样和保持,量化和编码在转换过程中是同时实现的。 一般来说,AD比DA贵,尤其是高速的AD,因为在某些特殊场合,如导弹的摄像头部分要求有高速的转换能力。一般那样AD要上千美元。还有通过AD的并联可以提高AD的转换效率,多个AD同时处理数据,能满足处理器的数字信号需求了。模数转换过程包括量化和编码。量化是将模拟信号量程分成许多离散量级,并确定输入信号所属的量级。编码是对每一量级分配唯一的数字码,并确定与
16、输入信号相对应的代码。最普通的码制是二进制,它有2n个量级(n为位数),可依次逐个编号。模数转换的方法很多,从转换原理来分可分为直接法和间接法两大类。 直接法是直接将电压转换成数字量。它用数模网络输出的一套基准电压,从高位起逐位与被测电压反复比较,直到二者达到或接近平衡。控制逻辑能实现对分搜索的控制,其比较方法如同天平称重。先使二进位制数的最高位Dn-11,经数模转换后得到一个整个量程一半的模拟电压VS,与输入电压Vin相比较,若VinVS,则保留这一位;若VinVS还是VinV 来决定是否保留这一位。经过n次比较后,n位寄存器的状态即为转换后的数据。这种直接逐位比较型(又称反馈比较型)转换器
17、是一种高速的数模转换电路,转换精度很高,但对干扰的抑制能力较差,常用提高数据放大器性能的方法来弥补。它在计算机接口电路中用得最普遍。 间接法不将电压直接转换成数字,而是首先转换成某一中间量,再由中间量转换成数字。常用的有电压-时间间隔(V/T)型和电压-频率(V/F)型两种,其中电压-时间间隔型中的双斜率法(又称双积分法)用得较为普遍。 模数转换器的选用具体取决于输入电平、输出形式、控制性质以及需要的速度、分辨率和精度。 用半导体分立元件制成的模数转换器常常采用单元结构,随着大规模集成电路技术的发展,模数转换器体积逐渐缩小为一块模板、一块集成电路 接口分配电路设计如图7所示:IN0IN7为8路
18、模拟量输入端,这里只接一路电压信号,其输入信号是由直流电源及可调电阻提供。 OUT1OUT8为8位二进制数字量 图7 A/D转换电路 输出端,其另一端连接到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
19、口(转换期间一直为低电平)。 OE为数据输出允许信号,高电平有效。当AD转换结束时,此端由单片机P3.7读信号与P2.0口相或后取反输入一个高电平,才能打开输出三态门,输出数字量。2.3.2 逐次逼近型A/D转换器原理逐次逼近型A/D转换器是由一个比较器、A/D转换器、存储器及控制电路组成。它利用内部的寄存器从高位到低位一次开始逐位试探比较。转换过程如下:开始时,寄存器各位清零,转换时,先将最高位置1,把数据送入A/D转换器转换,转换结果与输入的模拟量比较,如果转换的模拟量比输入的模拟量小,则1保留,如果转换的模拟量比输入的模拟量大,则1不保留,然后从第二位依次重复上述过程直至最低位,最后寄存
20、器中的内容就是输入模拟量对应的二进制数字量。其原理框图如图8所示:顺序脉冲发生器逐次逼近寄存器ADC电压比较器输入电压输入数字量图8 逐次逼近式A/D转换器原理图2.3.3 ADC0808 主要特性ADC0808是CMOS单片型逐次逼近式A/D转换器,带有使能控制端,与微机直接接口,片内带有锁存功能的8路模拟多路开关,可以对8路0-5V输入模拟电压信号分时进行转换,由于ADC0808设计时考虑到若干种模/数变换技术的长处,所以该芯片非常适应于过程控制,微控制器输入通道的接口电路,智能仪器和机床控制等领域5。ADC0808主要特性:8路8位A/D转换器,即分辨率8位;具有锁存控制的8路模拟开关;
21、易与各种微控制器接口;可锁存三态输出,输出与TTL兼容;转换时间:128s;转换精度:0.2%;单个+5V电源供电;模拟输入电压范围0- +5V,无需外部零点和满度调整;低功耗,约15mW。2.3.4 ADC0808的外部引脚特征 ADC0808芯片有28条引脚,采用双列直插式封装,其引脚图如图9所示。图9 ADC0808引脚图下面说明各个引脚功能:IN0-IN7(8条):8路模拟量输入线,用于输入和控制被转换的模拟电压。地址输入控制(4条):ALE:地址锁存允许输入线,高电平有效,当ALE为高电平时,为地址输入线,用于选择IN0-IN7上那一条模拟电压送给比较器进行A/D转换。ADDA,AD
22、DB,ADDC:3位地址输入线,用于选择8路模拟输入中的一路,其对应关系如表1所示: 表1 ADC0808通道选择表地址码 对应的输入通道 C B A 0 0 0 0 1 1 1 1 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 1 IN0 IN1 IN2 IN3 IN4 IN5 IN6 IN7 START:START为“启动脉冲”输入法,该线上正脉冲由CPU送来,宽度应大于100ns,上升沿清零SAR,下降沿启动ADC工作。EOC: EOC为转换结束输出线,该线上高电平表示A/D转换已结束,数字量已锁入三态输出锁存器。D1-D8:数字量输出端,D1为高位。OE:OE为输出允许端
23、,高电平能使D1-D8引脚上输出转换后的数字量。REF+、REF-:参考电压输入量,给电阻阶梯网络供给标准电压。Vcc、GND: Vcc为主电源输入端,GND为接地端,一般REF+与Vcc连接在一起,REF-与GND连接在一起. CLK:时钟输入端。2.3.5 ADC0808的内部结构及工作流程ADC0808由8路模拟通道选择开关,地址锁存与译码器,比较器,8位开关树型A/D转换器,逐次逼近型寄存器,定时和控制电路和三态输出锁存器等组成,其内部结构如图10所示。图10 ADC0808的内部结构其中:(1)8路模拟通道选择开关实现从8路输入模拟量中选择一路送给后面的比较器进行比较。(2)地址锁存
24、与译码器用于当ALE信号有效时,锁存从ADDA、ADDB、ADDC 3根地址线上送来的3位地址,译码后产生通道选择信号,从8路模拟通道中选择当前模拟通道。(3)比较器,8位开关树型A/D转换器,逐次逼近型寄存器,定时和控制电路组成8位A/D转换器,当START信号有效时,就开始对当前通道的模拟信号进行转换,转换完成后,把转换得到的数字量送到8位三态锁存器,同时通过引脚送出转换结束信号。(4)三态输出锁存器保存当前模拟通道转换得到的数字量,当OE信号有效时,把转换的结果送出。ADC0808的工作流程为:(1)输入3位地址,并使ALE=1,将地址存入地址锁存器中,经地址译码器从8路模拟通道中选通1
25、路模拟量送给比较器。(2)送START一高脉冲,START的上升沿使逐次寄存器复位,下降沿启动A/D转换,并使EOC信号为低电平。(3)当转换结束时,转换的结果送入到输出三态锁存器中,并使EOC信号回到高电平,通知CPU已转换结束。(4)当CPU执行一读数据指令时,使OE为高电平,则从输出端D0-D7读出数据。 LED显示电路2.4.1 LED基本结构LED是发光二极管显示器的缩写。LED由于结构简单、价格便宜、与单片机接口方便等优点而得到广泛应用。LED显示器是由若干个发光二极管组成显示字段的显示器件6。在单片机中使用最多的是七段数码显示器。LED七段数码显示器由8个发光二极管组成显示字段,
26、其中7个长条形的发光二极管排列成“日”字形,另一个圆点形的发光二极管在显示器的右下角作为显示小数点用,其通过不同的组合可用来显示各种数字。LED引脚排列如下图11所示:图11 LED引脚排列2.4.2 LED显示器的选择在应用系统中,设计要求不同,使用的LED显示器的位数也不同,因此就生产了位数,尺寸,型号不同的LED显示器供选择,在本设计中,选择4位一体的数码型LED显示器,简称“4-LED”。本系统中前一位显示电压的整数位,即个位,后两位显示电压的小数位。4-LED显示器引脚如图12所示,是一个共阴极接法的4位LED数码显示管,其中a,b,c,e,f,g为4位LED各段的公共输出端,1、2
27、、3、4分别是每一位的位数选端,dp是小数点引出端,4位一体LED数码显示管的内部结构是由4个单独的LED组成,每个LED的段输出引脚在内部都并联后,引出到器件的外部。图12 4位LED引脚对于这种结构的LED显示器,它的体积和结构都符合设计要求,由于4位LED阴极的各段已经在内部连接在一起,所以必须使用动态扫描方式(将所有数码管的段选线并联在一起,用一个I/O接口控制)显示。2.4.3 LED译码方式译码方式是指由显示字符转换得到对应的字段码的方式,对于LED数码管显示器,通常的译码方式有硬件译码和软件译码方式两种。硬件译码是指利用专门的硬件电路来实现显示字符码的转换。软件译码就是编写软件译
28、码程序,通过译码程序来得到要显示的字符的字段码,译码程序通常为查表程序。本设计系统中为了简化硬件线路设计,LED译码采用软件编程来实现。由于本设计采用的是共阴极LED,其对应的字符和字段码如下表2所示。表2 共阴极字段码表显示字符共阴极字段码03FH106H25BH34FH466H56DH67DH707H87FH96FH2.4.4 LED显示器与单片机接口设计由于单片机的并行口不能直接驱动LED显示器,所以,在一般情况下,必须采用专用的驱动电路芯片,使之产生足够大的电流,显示器才能正常工作。如果驱动电路能力差,即负载能力不够时,显示器亮度就低,而且驱动电路长期在超负荷下运行容易损坏,因此,LE
29、D显示器的驱动电路设计是一个非常重要的问题。为了简化数字式直流电压表的电路设计,在LED驱动电路的设计上,可以利用单片机P0口上外接的上拉电阻来实现,即将LED的A-G段显示引脚和DP小数点显示引脚并联到P0口与上拉电阻之间,这样,就可以加大P0口作为输出口德驱动能力,使得LED能按照正常的亮度显示出数字,如图13所示。图13 LED与单片机接口间的设计3软件程序设计(1)系统软件设计进行的整体操作流程方案,总体流程图和A/D转化流程图最大的不同就在:总体流程图是将总体控制电路的运行步骤,而A/D转化流程图是局部中断运行方式,两种控制功能融合在一起,是考虑到可以实现全部功能的原因,且原理简单。
30、如此设计,其优点在于:设计思想比较简单,较容易组装电路。或者是,连线方便、一清二楚,不容易出错。要显示电路的优势,则势必形成各门电路使用。引导显示电路的稳定性,抗干扰能力增强。主程序的内容包括:起始地址、中断服务程序的起始地址、有关内存单元及相关部件的初始化和一些子程序的调用等。根据设计要求,设计出如图所示的主程序流程图。A/D转换子程序设计: A/D转换程序的功能是采集数据,在整个系统设计中占有很高的地位。当系统置好后,单片机扫描转换结束管脚P3.7的输入电平状态,当输入为高电平则转换完成,将转换的数值显示输出。若输入为低电平,则继续扫描。程序流程图如下图所示。(2)程序COM EQU 50
31、H ; 指令寄存器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
32、.00MOV 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
33、:MOV 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
34、,R3 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 N
35、OPDJNZ 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 LCA
36、LL 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
37、E POP 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转换结果并化为显示值BT
38、0: 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 DE
39、C 24h ;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的高字节为整数部分 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,#3