基于单片机的单通道模拟电压测量专业系统设计.doc
基于单片机单通道模仿电压测量系统设计 摘要:本文简介一种基于AT89S52单片机一种电压测量系统,该系统采用ICL7135高精度、双积分A/D转换电路,测量直流电压范畴0-±200伏,使用LCD液晶模块显示。简介了双积分电路原理,AT89S52特点,ICL7135功能和应用,模仿开关CD4052功能和应用,14位二进制串行计数/ 分频器功能和应用,LCD1601功能和应用等,并给出了系统各某些电路。核心词:数字电压表;ICL7135;1601液晶模块;AT89S52单片机Abstract:The paper introduces a voltage measurement s-ystem based on AT89S52 MCU,in which ICL7135 high preci-sion,dual-integration A/D conversion circuits and LCD display are used. The DC measuring range of the system is 0-±200 volts. The paper also introduces the principle of dual-integration circuit,the function and application of CD4052,LCD1601 and 14-bit serial counter/divider. The part circuits of the system are presented as well. Key Words :Digital Voltmeter;ICL7135;LCD1601;AT89S521引言数字电压表(Digital Voltmeter)简称DVM,它是采用数字化测量技术,把持续模仿量(直流输入电压)转换成不持续、离散数字形式并加以显示仪表。老式指针式电压表功能单一、精度低,不能满足数字化时代需求,采用单片机数字电压表,精度高、抗干扰能力强,可扩展性强、集成以便。当前,由各种单片A/D 转换器构成数字电压表,已广泛用于电子及电工测量、工业自动化仪表、自动测试系统等智能化测量领域,显示出强大生命力。与此同步,由DVM扩展而成各种通用及专用数字仪器仪表,也把电量及非电量测量技术提高到崭新水平。本文重点简介单片A/D 转换器以及由它们构成基于单片机数字电压表工作原理。 2 硬件设计 1 2 3模仿开关档位切换A/D转换AT89S52单片机LCD显示输入电路图1系统基本方框图 总电路原理图见附录一。硬件电路由输入电路、档位切换电路、A/D转换电路、AT89S52单片机,以及LCD液晶显示电路等几种某些构成。如图1所示,模仿电压通过模仿开关档位切换到不同分压电路衰减后,经隔离干扰送到A/D转换器进行A/D转换,然后送到单片机中进行数据解决。解决后数据送到LCD中显示,显示当前测量电压值。如下对这几种电路逐个进行简介。2.1 输入电路4、5输入电路作用是把不同量程被测电压规范到A/D转换器所规定电压值。智能化数字电压表所采用单片双积分型ADC芯片ICL7135,它规定输入电压0-±2V。本系统设计是0-±200V电压,敏捷度高,因此可以不加前置放大器,只需衰减器,如图2所示90K、9K、和1K电阻构成1/10、1/100衰减器。衰减输入电路可由模仿开关来选取不同衰减率,从而切换档位。2.2 量程选取电路设计5CD4052引脚功能见图3。CD4052相称于一种双刀四掷开关,详细接通哪一通道,由输入地址码AB来决定。其真值表见表1。 图图3 CD4052管脚图图图2衰减输入电路表1 CD4052真值表输入状态接通通道INHBA000“0”X、“0”Y001“1”X、“1”Y010“2”X、“2”Y011“3”X、“3”Y1均不接通2.3 A/D 转换电路设计模仿数字转换器A/D芯片是任何数据采集系统核心,它将持续模仿变量形式数据变换成一种适合于数字解决分离二进制代码。整个转换过程普通分为四个环节进行,即取样、保持、量化和编码。前两个环节在取样-保持电路中完毕,后两环节则在ADC中完毕。 惯用ADC有积分型、逐次逼近型、并行比较型/串并行型、 -调制型、电容阵列逐次比较型及压频变换型。下面简要简介惯用几种类型基本原理及特点:逐次逼近型(如TLC0831) AD转换器由一种比较器和DA转换器通过逐次比较逻辑构成,从MSB开始,顺序地对每一位将输入电压与内置DA转换器输出进行比较,经n次比较而输出数字值。其电路规模属于中档。其长处是速度较高、功耗低,在低辨别率( < 12位)时价格便宜,但高精度( > 12位)时价格很高。 并行比较型/串并行比较型(如TLC5510) AD转换器采用各种比较器,仅作一次比较而实行转换,又称Flash型。由于转换速率极高,n位转换需要2n - 1个比较器,因而电路规模也极大,价格也高,只合用于视频AD 转换器等速度特别高领域。串并行比较型AD构造上介于并行型和逐次比较型之间,最典型是由2个n /2位并行型AD转换器配合DA转换器构成,用两次比较实行转换,因此称为Half flash型。 压频变换型(如AD650) AD转换器是通过间接转换方式实现模数转换。其原理是一方面将输入模仿信号转换成频率,然后用计数器将频率转换成数字量。从理论上讲这种AD辨别率几乎可以无限增长,只要采样时间可以满足输出频率辨别率规定累积脉冲个数宽度。其长处是辨别率高、功耗低、价格低,但是需要外部计数电路共同完毕AD转换。积分型(如ILC7135) AD转换器是将输入电压转换成时间(脉冲宽度信号)或频率(脉冲频率),然后由定期器/计数器获得数字值。ICL7135AD转换具备自动校零功能,自动较零精确性仅受系统噪声影响,且偏差不大于10V;有超量程(over)和欠量程(under)信号,容易实现量程自动转换;设有6个控制信号端、同步进行字位输出和BCD码输出,可与LCD译码驱动器及单片机接口,进行数据解决,构成智能化仪器;满量程为0字,在±0汁数范畴内精确度为±1个字。本设计采用双积分ICL7135 A/D 转换器,它性能比较稳定,转换精度高,具备很高抗干扰能力,价格低廉,电路构造简朴,其缺陷是工作速度较低。在对转换精度规定较高,而对转换速度规定不高场合如电压测量有广泛应用。比较以上这四种AD转换器性能特点,综合考虑各方面条件和本系统要实现指标,本系统设计采用就是双积分A/D 转换器ICL7135。2.3.1双积A/D 转换器工作原理双积分型A/D转换是一种间接A/D转换技术。一方面将模仿电压转换成积分时间,然后用数字脉冲计时办法转换成计数脉冲数,最后将此代表模仿输入电压大小脉冲数转换成二进制或BCD码输出。图4双积分A/D 转换器内部原理图5双积分A/D 转换器时序图 显示电压数据 如图4所示,对输入模仿电压和基准电压进行两次积分,先对输入模仿电压进行积分,将其变换成与输入模仿电压成正比时间间隔 T1,再运用计数器测出此时间间隔,则计数器所计数字量就正比于输入模仿电压,接着对基准电压进行同样解决,直至积分输出返回到起始值。双积分A/D 转换器时序图如图5所示。在惯用A/D转换芯片(如ADC -0809、ICL7135、ICL7109等)中,ICL7135与别的几种有所不同,它是一种四位半双积分A/D转换器,具备精度高(精度相称于14位二进制数)、价格低廉、抗干扰能力强等长处。本系统简介用单片机并行方式采集ICL7135数据以实现单片机电压表设计方案。2.3.2 ICL7135应用 ICL7135是采用CMOS工艺制作单片4位半A/D转换器,其所转换数字值以多工扫描方式输出,只要附加译码器,数码显示屏,驱动器及电阻电容等元件,就可构成一种满量程为2V数字电压表。 (1)ICL7135重要特点如下 6 7双积型A/D转换器,转换速度慢。在每次A/D转换前,内部电路都自动进行调零操作,可保证零点在常温下长期稳定。在0字(2V满量程)范畴内,保证转换精度1字相称于14bitA/D转换器。 具备自动极性转换功能。能在单极性参照电压下对双极性模仿输入电压进行A/D转换,模仿电压范畴为0±1.9999V。 模仿输入可以是差动信号,输入电阻极高,输入电流典型值1PA。 所有输出端和TTL电路相容。有过量程(OVER)和欠量程(UNDER)标志信号输出,可用作自动量程转换控制信号。输出为动态扫描BCD码。对外提供六个输入,输出控制信号(R/H,BUSY,STB,POL,OVER,UNDER),因而除用于数字电压表外,还能与异步接受 /发送器,微解决器或其他控制电路连接使用。采用28外引线双列直插式封装。 (2) ICL7135数字某些9数字某些重要由计数器、锁存器、多路开关及控制逻辑电路等构成。ICL7135一次A/D转换周期分为四个阶段:自动调零(AUTO-ZERO);信号积分(SINGAL-INTEGRATE);基准电压反积分(去积分);积分回零(ZERO-INTEGRATE)。详细内部转换过程如下几种环节:AUTO-ZERO(自动调零)在该相时,内部IN+和IN-输入与引脚断开,且在内部连接到ANLG-COMMON,基准电容被充电至基准电压,系统接成闭环并为自动调零(AUTOZERO)电容充电以补偿缓冲放大器、积分器和比较器失调电压。此时,自动调零精度令受系统噪声限制,以输入为基准总失调不大于10V。SINGAL-INTEGRATE(信号积分)相在该相,自动调零环路被打开,内部IN+和IN-输入被连接至外部引脚。在固定期间周期内,这些输入端之间差分电压被积分。当输入信号相对于转换器电源不反相(NO-RETURN)时,IN-可直接连接至ANJG-COMMON以便输出对的共模电压。同步,在这一相完毕基本上,输入信号极性将被系统所记录。 DEINTEGRATE(去积分)相该相基准用于完毕去积分任务,此时内部IN-在内部连接ANLG-COMMON,IN+跨接至先前已充电基准电容,所记录输入信号极性可保证以对的极性连接至电容以使积分器输出极性回零。输出返回至零所需时间正比于输入信号幅度。ZERO-INTEGRATE(积分器返回零)相内部IN-连接到ANLG-COMMON,系统接成闭环以使积分器输出返回到零。普通这相需要100200个时钟脉冲,但是在超范畴(OVER)转换后,则需要6200个脉冲。在Signal-Integrate(即信号积分)相开始时,ICL7135BUSY信号线跳高并始终保持高电平,直到Deintegrate(去积分)相结束时才跳回低电平。在满量程状况下,这个区域中最多脉冲个数为30002个。其中Deintegrate(去积分)相脉冲个数反映了转换成果。对于不同模仿量输入,ICL7135BUSY信号高电平宽度也不同。(3)ICL7135引脚使用 9ICL7135外引线功能端排列如图6所示,详细各个引脚功能使用简介如下:图6 ICL7135引脚图R/H(25脚):当R/H=“1”(该端悬空时为“1”)时,ICL7135处在持续转换状态,每40002个时钟周期完毕一次A/D转换。若R/H由“1”变“0”,则ICL7135在完毕本次A/D转换后进入保持状态,此时输出为最后一次转换成果,不受输入电压变化影响。因而运用R/H端功能可以使数据有保持功能。图7 ICL7135时序图图2.3.4 ICL7135波形图STB(26脚):每次A/D转换周期结束后,ST端都输出5个负脉冲,其输出时间相应在每个周期开始时5个位选信号正脉冲中间,ST负脉冲宽度等于1/2时钟周期。第一种ST负脉冲在上次转换周期结束后101个时钟周期产生。如图7所示,由于每个选信号(D5-D1)正脉冲宽度为200个时钟周期(只有AZ和DE阶段开始时第一种D5脉冲宽度为201个CLK 周期),因此ST负脉冲之间相隔也是200个时钟周期。需要注意是,若上一周期为保持状态(R/H=“0”)则ST无脉冲信号输出。ST信号重要用来控制将转换成果向外部锁存器、UARTs或微解决器进行传送。BUSY(21脚):在双积分阶段(INT+DE),BUSY为高电平,别的时为低电平。因而运用BUSY功能,可以实现A/D转换成果远距离双线传送,其还原办法是将BUSY和CLK“与”日后计数器,再减去10001就可得到本来转换成果。OVER(27脚):当输入电压超过量程范畴(0),OR将会变高。该信号在BUSY信号结束时变高。在DE阶段开始时变低。UNDER(28脚):当输入电压等于或低于满量程9%(读数为1800),则一当BUST信号结束,UR将会变高。该信号在INT阶段开始时变低。POL(23脚):该信号用来批示输入电压极性。当输入电压为正,则POL等于“1”,反之则等于“0”。该信号DE阶段开始时变化,并维持一种A/D转换调期。位驱动信号D5、D4、D3、D2、D1(12、17、18、19、20脚):每一位驱动信号分别输出一种正脉冲信号,脉冲宽度为200个时钟周期,其中D5相应万位选通,如下依次为千、百、十、个位。当输入电压过量程时,D5-D1在AZ阶段开始时只分别输出一种脉冲,然后都处在低电平,直至DE阶段开始时才输出持续脉冲。运用这个特性,可使得显示屏件在过程时产生一亮一暗直观现象。 B8、B4、B2、B1(16、15、14、13脚):该四端为转换成果BCD码输出,采用动态扫描输出方式,即当位选信号D5=“1”时,该四端信号为万位数内容,D4=“1”时为千位数内容,别的依次类推。在个、十、百、千四位数内容输出时,BCD码范畴为0000-1001,对于万位数只有0和1两种状态,因此其输出BCD码为“0000”和“0001”。当输入电压过量程时,各位数输出所有为零,这一点在使用时应注意。最后还要阐明一点,由于数字某些以DG端作为接地端,因此所有输出端输出电平以DG作为相对参照点。基准电压输入必要对于模仿公共端COM是正电压。 (4)ICL7135与单片机连接 在ICL7135与单片机进行连接时,使用并行采集方式,四位BCD码数据输出线分别与单片机AT89C52P10,P11,P12,P13相连接,位驱动信号D5、D4、D3、D2分别与AT89C52P14,P15,P16,P17相连接,批示输入电压极性POL脚与AT89C52P30(RXD)相连接,STB信号接至AT89C52P3.2(INT0),OVER信号接至AT89C52P24,R/H信号接至AT89C52P20。ICL7135其她外围电路如总原理图所示(见附录一)。此外, ICL7135很特别一点是它需要外部时钟信号,本设计采用CD4060来对4M时钟信号进行32分频得到125KHz时钟信号,如图8所示。CD4060计数为级进制计数器,在数字集成电路中可实现分频次数最高,并且CD4060还包括振荡电路所需非门,使用更为以便。图8 CD4060时钟发生电路2.4 单片机某些设计 10 11图 9 AT89S52引脚图单片机选用是ATMEL公司新推出AT89S52,其管脚图如图 9所示。该芯片具备低功耗、高性能特点,采用CMOS工艺8位单片机,与AT89C51完全兼容。AT89S52尚有如下重要特点: 采用了ATMEL公司高密度、非易失性存储器(NV-SRAM)技术; 其片内具备256字节RAM,8KB可在线编程(ISP)FLASH存储器;有2种低功耗节电工作方式:空闲模式和掉电模式; 片内具有一种看门狗定期器(WDT),WDT包括一种14位计数器和看门狗定期器复位寄存器(WDTRST),只要对WDTRST按顺序先写入01EH,后写入0E1H,WDT便启动,当CPU由于扰动而使程序陷入死循环或“跑飞”状态时,WDT即可有效地使系统复位,提高了系统抗干扰性能。2.5 液晶显示某些设计9显示接口用来显示系统状态,命令或采集电压数据。本系统显示某些用是LCD液晶模块,采用一种16×1字符型液晶显示模块,引脚如图10所示。 图10 LCD1601引脚图 点阵图形式液晶由 M 行×N 列个显示单元构成,假设 LCD 显示屏有64行,每行有 128列,每 8列相应 1 个字节 8 个位,即每行由 16 字节,共 16×8=128个点构成,屏上 64×16 个显示单元和显示 RAM 区 1024 个字节相相应,每一字节内容和屏上相应位置亮暗相应。一种字符由 6×8 或 8×8点阵构成,即要找到和屏上某几种位置相应显示 RAM区 8 个字节,并且要使每个字节不同位为1,其他为0,为1点亮,为0点暗,这样一来就构成某个字符。但对于内带字符发生器控制器来说,显示字符就比较简朴了,可让控制器工作在文本方式,依照在LCD 上开始显示行列号及每行列数找出显示 RAM相应地址,设立光标,在此送上该字符相应代码即可。 (1)1601使用阐明LCD1601液晶模块引脚如表2所示。寄存器选取,如表3所示。表2 LCD1601液晶模块引脚引脚符号功能阐明1GND接地2Vcc5V3VL驱动LCD,普通将此脚接地4RS寄存器选取 0:指令寄存器(WRITE)Busy flag,位址计数器(READ)1:数据寄存器(WRITE,READ)5R/WREAD/WRITE选取 1:READ 0:WTITE6E读写使能(下降沿使能)7DB0低4位三态、双向数据总线8DB19DB210DB311DB4高4位三态、双向数据总线此外DB7也是一种Busy flag12DB513DB614DB7表3 寄存器选取控制线操作RSR/W操作阐明00写入指令寄存器(清除屏幕等)01读Busy flag(DB7),及读取位址计数器(DB0DB6)10写入数据寄存器(显示各字型等)11从数据寄存器读取数据 表3为寄存器选取控制线操作,其中Busy flag(DB7)未被清除为“0”时,LCD将无法再解决其她指令规定。 表4为LCD1601显示地址,内部地址计数器计数地址为:SB7=0(DB0DB6)第一行00、01、02 等,第二行40、41、42 等,可配合检测DB7=1 (RS=0,R/W=1)读取当前显示字地址,判断与否需要换行。表4 LCD1601 16×1 显示字地址1234567800010203040506079101012131415164041424344454647 表5为LCD1601外部地址,DB7=1,亦即80H内部计数地址,可以用此方式将字显示在某一位置。表5 LCD1601 16×1(16字1行)显示字外部地址123456788081828384858687910111213141516C0C1C2C3C4C5C6C7表6 LCD1601 指令组指 令说 明设立码RS R/WD7D6D5D4D3D2D1D0清除显示幕000000000*光标回到原点000000001*进入模式设定00000001I/DS显示幕ON/OFF0000001DCB续表6移位000001S/CR/L*功能设定00001DLNF*字发生器地址设定0001AGC设立显示地址0001ADD忙碌标志位BF001BF显示数据10写入数据读取数据11读取数据I/D I/D=1 表达加1, I/D=0 表达减1S S=1 表达显示幕ON S=0表达OFFD D=1 表达显示屏幕ON D=0表达显示屏幕OFFC C=1 表达光标ON C=0表达光标OFFB B=1 表达闪烁ON B=0表达显示闪烁OFFS/C S/C=1表达显示屏幕移位 S/C=0光标移位R/L R/L=1表达右移 R/L=0表达左移DL DL=1表达8位 DL=0表达4位F F=1表达5×10点矩阵 F=0表达5×7点矩阵N N=1表达2行显示行 N=0表达1行显示行BF BF=1:内部正在动作 BF=0:可接受指令或数据码 (2) 液晶显示某些与AT89S52接口 2 8 9如总原理图(附录一)所示,用AT89S52P0口作为数据线,用P2.1、P2.2、P2.3分别作为LCDE、R/W、RS。其中E是下降沿触发片选信号,R/W是读写信号,RS是寄存器选取信号。本模块设计要点如下:显示模块初始化,一方面清屏,再设立接口数据位为8位,显示行数为1行,字型为5×7点阵,然后设立为整体显示,取消光标和字体闪烁,最后设立为正向增量方式且不移位。向LCD显示缓冲区中送字符,程序中采用2个字符数组,一种显示字符,另一种显示电压数据,要显示字符或数据被送到相应数组中,完毕后再统一显示。一方面取一种要显示字符或数据送到LCD显示缓冲区,程序延时2.5ms,判断与否够显示个数,不够则地址加一取下一种要显示字符或数据。最后显示出电压值来,每次电压采集后,CPU将数据送到LCD显示,将也许浮现如下几种需要消隐状况。例如:200V档量程,-019.99,此时千位值0不符合人们视觉习惯,需要把千位值消隐掉,编程是将#20H送入千位,使其在LCD中不显示任何字符即可。同样状况如下:20V档量程,-01.999,需要消隐十位,在采集到数据之后,置数之前判断档位,是2V档不消隐,是其她档位时再看要消隐位之前有几种是零。例如200V档量程,-001.9V,在2次中断时判断档位是200V档,第1位是零,消隐第2位百位。3 系统软件设计 整个系统软件由主程序,A/D中断程序,延时子程序,检查LCD忙状态,写指令数据到LCD,写显示数据到LCD,清屏子程序,LCD初始化设定等几种模块构成,下面重点简介主程序和A/D中断程序设计。3.1主程序设计2 5 ICL7135A/D与单片机连接电路软件设计系统程序流程图如11所示。主程序一开始运营则设立堆栈起始地址为70H,设立中断寄存器,用来对ICL7135中断进行计数,每5次后清零,完毕一次数据采集工作,然后设立ICL7135STB端中断优先级。接着LCDM1601B进行一次清屏,使其各个指令、数据寄存器值进行清空,屏幕不显示任何字符。前面对1601B简介,开 始设立堆栈设立第一行位置启动AD转换设立第二行位置显示字符显示电压数据设立显示屏图2.3.2双积A/D 转换器时序图 LCD初始化只要将01H送到数据总线,使RS=0,R/W=0,E有个下降沿脉冲就可以完毕清屏工作。由于下降沿时,内部数据要送到RAM区,因此要有一种延时子程序,使这个下降沿持续2.5毫秒。内部RAM有指令代码后就开始对RAM进行清零,因此屏幕原有字符将被清除。接着对1601进行功能设定。按表4来看是设定显示屏按2行显示,每行8位,5×7点阵。每次向LCDM中写入一种指令,就调用一次lcd_pos,然后再对显示屏进行闪烁、光标等功能进行设定。显示屏RAM地址按加办法进行读写。再设定第一行字符,也就是Voltage显示地址80H。字符VoltageTABLE表地址送图11 主程序流程图到DPTR中,然后调用远程查表命令,依次把数据送到P0口,这时再调用子程序lcd_wdat,使LCD1601RS=1,R/W=0使使能端E产生一种下降沿脉冲,将数据送入到数据寄存器中,接下来执行显示子程序,它重要功能是将TABLE表中字符输出到LCD中去。设定好显示字符数即远程查表次数,就开始查表了。图3.2数据地址例如第一种字符“V”ASCII码是56H,就将这个码送到P0口,再调用使能数据子程序,使RS=1(数据区使能)写入显示数据区,R/W=0表达写,E=0来个下降沿延时2.5毫秒,使数据写入RAM内。完毕TABLE表输出后来,向指令RAM中写入第2行起始地址为OCH,再调用显示采样数据子程序。采样数据存储数据地址安排如图12所示,一方面将60H中数显示在正负号位置上,按照ASCII码表,正号图12 数据存储地址不显示(#20H),负号显示“”(#2DH)。3.2 A/D中断程序设计8 10ICL7135每一秒钟完毕3次据采集工作,1/3秒完毕后向CPU申请中断,CPU这时暂停工作,为中断服务。中断响应后关中断,将PSW、ACC压栈,判断与否初次中断,如果是初次中断,则将正负号标志位置入60H,再把万位置入61H中,如果不是初次中断,则判断是第几次中断,如果是第二次中断,则将千位数置入62H中,如果是第三次中断,再将百位数置入63H中,第四次中断则将十位数置入64H中,第五次中断则将小数点位置入65H中,同步个位置入66H中。同步清除中断次数寄存器30H中值,完毕中断后将ACC、PSW出栈,开中断。A/D中断服务程序流程图如图13所示。图13 中断子程序流程图4系统测试与结论4.1 系统测试 (1)使用测试仪器Instek GOS-620 20MHz双踪示波器、DT9205 3 又 1/4位数字万用表。(2)测试办法 在系统工作状态下,分别对各个被测电压值多次测量,取其平均值或描述某工作状态与否稳定、正常。(3)测试成果依照附录一所示整机电路原理图,连接好电路,设立好电路参数,通过整机调试,得到测试成果如表7 、表8所示。表7 系统测试正电压数据显示被测输入电压(V)实际测量电压(V)误差值(V)精度比例/%0.1720.1680.00497.670.5280.5250.00399.431.2361.2240.01299.032.3152.3010.01499.405.2425.2230.01999.638.3788.3020.07699.0911.9511.620.3397.2418.7718.500.2798.5619.6519.220.4397.8120.3119.960.3598.2827.8027.190.6197.8132.2031.270.9397.11表8 系统测试负电压数据显示被测输入电压(V)实际测量电压(V)误差值(V)精度比例/%-0.153-0.1580.00596.84续表4.2-0.624-0.6920.06890.17-1.527-1.6080.08194.96-2.734-2.7920.05897.92-5.352-5.4120.06098.89-8.927-9.0300.10398.86-12.03-12.430.4396.78-17.62-17.980.3698.00-19.23-19.830.6096.97-21.35-22.030.6896.91-27.22-28.130.9196.77-32.37-33.521.1596.564.2 成果分析 (1)制作与调试中问题运用 Protel 99 软件,完毕了电路图制作。在电路板制作过程中,没有发现什么问题。但是在调试过程中,发现了两个问题:参照电平电路。当把整机电路接好之后所测电压与被测电压误差较大,经检查是参照电平电路输出电压规定1伏关系较大。在电路输入端加入一种小电容(0.47uF)后即可。液晶显示电路。将输入数据与显示数据进行分析时发现,显示数据是输入数据补码,因素是 DAC 输出电平是负电平,在设计时忽视这个问题,用-1 倍放大器对输出信号反转后即可。 (2)结论本设计基本完毕了题目所规定功能,系统工作稳定,测量电压精度平均可以达到98%以上,可以说是比较精准了,并且测量范畴比较大,可以测量0±200V直流电压。参照文献1 徐爱钧.智能化测量控制仪表原理与设计(第二版)M.北京:北京航空航天大学出版社,.2 吴金戌,沈庆阳,郭庭吉.8051单片机实践与应用M.北京:清华大学出版社,.3 张国勋.缩短ICL7135A/D采样程序时间一种办法J. 电子技术应用,1993,1(1),1519.4 高峰.单片微型计算机与接口技术M.北京:科学出版社,.5 冯占岭. 数字电压表及数字多用表检测技术M.北京:中华人民共和国计量出版社,.6 41/2 Digit A/D Converter With Multiplexed BCD Outputs(ICL7135).J .美国:Maxim公司,1987,2(1),2335.7 何立民.MCS-51系列单片机应用系统设计M.北京:北京航空航天大学出版社,1996.8 梅丽凤.单片机原理及接口及接口技术M.北京:清华大学出版社,.9 李全利.单片机原理及应用技术M.北京:高等教诲出版社,.10 南建辉,熊鸣,王军茹.MCS-51单片机原理及应用实例M.北京: 清华大学出版社,.11 陆子明,徐长根.单片机设计与应用基本教程M.北京: 国防工业出版社,.结束语电压测量通过不同接口电路可实现温度、湿度、压力等测量,广泛应用于工业领域。本电路设计别具一格,是一种高精度、低功耗、宽量程、智能化电压表。可扩展键盘、EEPROM、报警电路,实现电压异常记录、报警。致 谢在我写本论文过程中,张德祥教师给我提供了许多资料,并对实践中浮现问题予以耐心解答,完稿之后在百忙之中仔细阅读,给出修改意见。张教师爱岗敬业,治学严谨,思维严密,平易近人是我十分尊敬教师,在此对她表达诚挚感谢。附录一:总体电路原理图 附录二:源程序清单#include<reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intsbit RH = P23;sbit LCD_RS = P20;sbit LCD_RW = P21;sbit LCD_EN = P22;sbit over=P24;sbit STB=P33;uchar data dis="Voltage: "/定义显示数组uchar code dis1="Over!! "uchar m=0,zhbz=0,xsbz=0,play=0;/*/ /* 延时子程序 /*/ void delay(int ms) int i; while(ms-) for(i = 0;i< 250;i+) _nop_(); _nop_();