1、数字电压表单片机毕业设计 作者: 日期:2 个人收集整理 勿做商业用途数字电压表的设计与仿真摘要:本文介绍的是数字电压表的发展背景和利用单片机,A/D转换芯片结合的方法设计一个交直流数字电压表。它的具体功能是:最高量程为500V,分三个档位量程,即5V,50V,500V,可以通过调档开关来实现各个档位。当测得电压的数值小于1V时,系统会自动的将电压数值转换为以mV为电压单位的电压值。并且通过按键的方法能够测得后五秒的平均电压值。同时它也可以用于交流电压的测量,胜任一般的电压测量工作. 关键字:数字电压表;单片机;A/D转换 Digital voltmeter design and simula
2、tionAbstract:This article describes the background of the development of the digital voltmeter and designed microcontroller, a / d conversion chips combined with a DC digital voltmeter. Its specific functions are: the maximum range for 200v, threestall range, that is, 2v, 20v, 200v, can downshift sw
3、itch to achieve the various stalls。 When the measured voltage is less than 1v, the system automatically the voltage value converted to a voltage value mv voltage units. Five seconds and the key method to measure the average voltage value。文档为个人收集整理,来源于网络本文为互联网收集,请勿用作商业用途 Key words: Digital voltmeter
4、;Singlechip computer ;A/D converter 目 录1 数字电压表简介12 设计方案32.1 由数字电路及芯片构建32。2 由单片机系统及A/D转换芯片构建33 元件的选取53。1 单片机简介及本设计单片机的选择53.1。1 常用单片机的特点比较及本设计单片机的选择53.1。2 本设计使用的单片机的简介53.2各种显示器件的介绍和选择73.2.1 常用显示器件简介73.2.2 1602液晶的参数资料73。3 模数(A/D)转换芯片的选择103。3.1常用的A/D芯片简介103。3.2 模数(A/D)芯片TLC2543的资料114。 总体设计144。1 技术要求144.
5、2硬件电路系统模块的设计154。3 系统软件的设计194.3。1 汇编语言和C语言的特点及选择194.3.2 主程序设计195 系统的调试306 仿真结果317 总结31参考文献32致谢3334第 页1 数字电压表简介 数字电压表出现在50年代初,60年代末发起来的电压测量仪表,简称DVM,它采用的是数字化测量技术,把连续的模拟量,也就是连续的电压值转变为不连续的数字量,加以数字处理然后再通过显示器件显示.这种电子测量的仪表之所以出现,一方面是由于电子计算机的应用逐渐推广到系统的自动控制的领域,提出了将各种被观察量或被控制量转换成数码的要求,即为了实时控制及数据处理的需要3,也是电子计算机的发
6、展,带动了脉冲数字电路技术的进步,为数字化仪表的出现提供了条件。所以,数字化测量仪表的产生与发展与电子计算机的发展是密切相关的;同时,为革新电子测量中的繁琐和陈旧方式也催促了它的飞速发展,如今,它又成为向智能化仪表发展的必要桥梁。如今,数字电压表已绝大部分已取代了传统的模拟指针式电压表。因为传统的模拟指针式电压表功能单一,精度低,读数的时候也非常不方便,很容易出错。而采用单片机的数字电压表由于测量精度高,速度快,读数时也非常的方便,抗干扰能力强,可扩展性强等优点已被广泛的应用于电子及电工的测量,工业自动化仪表,自动测试系统等智能化测量领域7.显示出强大的生命力。数字电压表最初是伺服步进电子管比
7、较式,其优点是准确度比较高,但是采样速度慢,重量达几十公斤,体积大。继之出现了斜坡式电压表,它的速度方面稍有提高,但是准确度低,稳定性差,再后来出现了比较式仪表改进逐次渐近式结构,它不仅保持了比较式准确度高的优点,而且速度也有了很大的提高,但它有一缺点是抗干扰能力差,很容易受到外界各种因素的影响。随后,在斜波式的基础上双引伸出阶梯波式,它的唯一的进步是成本降低了,可是准确宽,速以及抗干扰能力都未能提高。而现在,数字电压表的发展已经是非常的成熟,就原理来讲,它从原来的一、二种已发展到多种,在功能上讲,则测单一参数发展到能测多种参数;从制作元件来看,发展到了集成电路,准确度已经有了很大的提高,精度
8、高达1NV;读数每秒几万次,而相对以前,它的价格也有了降低了很多1。目前实现电压数字化测量的方法仍然模-数(A/D)转换的方法8。而数字电压表种类繁多,型号新异,目前国际仍未有统一的分类方法。而常用的分类方法有如下几种11:1 按用途来分:有直流数字电压表,交、直流数字电压表,交直流万用表等。2 按显示位数来分:有4位,5位,6位,7位,8位等.3 按测量速度来分:有低准确度,中准确度,高准确度等。4 按测量速度来分:有低速,中速,高速,超高速等。但在日常生活中,数字电压表一般是按照原理不同进行分类的,目前大致分为以下几类:比较式,电压时间变换式,积分式等。在电量的测量中,电压、电流和频率是最
9、基本的三个被测量。其中,电压量的测量最为经常。而且随着电子技术的发展,更是经常需要测量高精度的电压,所以数字电压表就成为一种必不可少的测量仪器。另外,由于数字式仪器具有读数准确方便、精度高、误差小、灵敏度高和分辨率高、测量速度快等特点而倍受用户青睐,数字式电压表就是基于这种需求而发展起来的,是一种必不可少的电子测量仪表15。2 设计方案设计数字电压表有多种的设计方法,方案是多种多样的,由于大规模集成电路数字芯片的高速发展,各种数字芯片品种多样,导致对模拟数据的采集部分的不一致性,进而又使对数据的处理及显示的方式的多样性。又由于在现实的工作生活中,电压表的测量测程范围是比较大的,所以必须要对输入
10、电压作分压处理,而各个数据处理芯片的处理电压范围不同,则各种方案的分段也不同。下面介绍两种数字电压表的设计方案.2。1 由数字电路及芯片构建 这种设计方案是由模拟电路与数字电路两大部分组成,模拟部分包括输入放大器、A/D转换器和基准电压源;数字部分包括计数器、译码器、逻辑控制器、振荡器和显示器。其中,A/D转换器是它的核心器件,它将输入的模拟量转换成数字量。模拟电路和数字电路是相互联系的,由逻辑控制电路产生控制信号,按规定的时序将A/D转换器中个组模拟开关接通或断开,保证A/D转换正常进行。A/D转换结果通过计数译码电路变换成段码,最后驱动显示器显示出相应的数值。此方案设计其优点是,设计成本低
11、,能够满足一般的电压测量。但设计不灵活,都是采用纯硬件电路。很难将其在原有的基础上进行扩展.2。2 由单片机系统及A/D转换芯片构建这种方案是利用单片机系统与模数转换芯片、显示模块等的结合构建数字电压表。由于单片机的发展已经成熟,利用单片机系统的软硬件结合,可以组装出许多的应用电路来。此方案的原理是模数(A/D)转换芯片的基准电压端,被测量电压输入端分别输入基准电压和被测电压.模数(A/D)转换芯片将被测量电压输入端所采集到的模拟电压信号转换成相应的数字信号,然后通过对单片机系统进行软件编程,使单片机系统能按规定的时序来采集这些数字信号,通过一定的算法计算出被测量电压的值4 。最后单片机系统将
12、计算好了的被测电压值按一定的时序送入显示电路模块加以显示。此方案不仅能够继承上一种方案的各种优点,还能改进上一种设计方案设计不灵活,难与在原基础上进行功能扩展等不足。3 元件的选取3.1 单片机简介及本设计单片机的选择3。1。1 常用单片机的特点比较及本设计单片机的选择综合上一章提到的两种设计方案的各方面优点及其在现在的所设计电压表的实用性,我选择第二种电压表设计方案,即由单片机系统及数字芯片构建的方法来我们本次设计。在这一设计中,我涉及到了一个关键系统模块单片机系统模块,而目前单片机的种类是很繁多的,主要有主流的8位单片机和高性能的32位单片机,结合本设计各方面因素,8位单片机对于本设计已经
13、是绰绰有余了,但将用哪一种类8的单片机呢。在这里,不得不先简单的介绍一下几种常用的8单片机。单片机是指一个集成在一块芯片上的完整计算机系统,具有一个完整计算机所需要的大部分部件:CPU,内存,总线系统等。而目前常用的单片机的8位有51系列单片机,AVR单片机,PIC单片机。应用最广的8位单片机还是intel的51系列单片机。51系列单片机的特点是:硬件结构合理,指令系统规范,加之生产历史悠久,世界有许多芯片公司都买了51的芯片核心专利技术,并在其基础上扩充其性能,使得芯片的运行速度变得更快,性价比更高10。AVR单片机是atmel公司推出较新的单片机,它的显著特点是:高性能,低功能,高速度,指
14、令单周期为主,但性格方面比51单片机要高.有专门的I/O方向寄存器。虽然有转强的驱动电压,但I/O口使用不比51单片机方便11。PIC单片机系列是美国微芯公司的产品,也是市面上增长最快的单片机之一,属精简指令集单片机,其特点是:高速度,高性能,但在性格方面比51单片机要高,也有专门的I/O方向寄存器,I/O口使用不比51单片机方便12。综合以上各种单片机的基本性能及本设计的满足需要,我将选择51系列单片机.个人收集整理,勿做商业用途文档为个人收集整理,来源于网络3.1.2 本设计使用的单片机的简介本设计中选用是51系列的AT89C52,它是低电压、低功耗、高性能的CMOS8位单片机,片内含8K
15、B的可反复擦写的只读程序存储器和256B的随机存取数据存储器,32个I/O口线,3个16位定时/计数器,片内振荡器及时钟电路,并与MCS-51系列单片机兼容。在设计中,单片机起着连接硬件电路与程序运行及存储数据的任务,一方面,它将A/D转换器、显示器和语音芯片等通过I/O口地址线和数据线连接起来;另一方面,它将用户下载的程序通过控制总线控制数据的输入输出,从而实现测电压的功能。3。2各种显示器件的介绍和选择3.2.1 常用显示器件简介本次设计中有显示模块,而常用的显示器件比较多,有数码管,LED点阵,1602液晶,12864液晶等。数码管是最常用的一种显示器件,它是由几个发光二极管组成的8字段
16、显示器件,其特点是价格非常的便宜,使用也非常的方便,显示效果非常的清楚。小电流下可以驱动每光,发光响应时间极短,体积小,重量轻,抗冲击性能好,寿命长。但数码管只能是显示0-9的数据。不能够显示字符。这也是数码管的不足之处。LED点阵显示器件是由好多个发光二极管组成的。具有高亮度,功耗低,视角大,寿命长,耐湿,冷,热等特点,LED点阵显示器件可以显示数字,英文字符,中文字符等.但用LED点阵显示的软件程序设计比较麻烦。1602液晶是工业字符型液晶,能够同时显示16*2即32个字符。1602液晶模块内部的字符发生存储器已经存储了160个不同的点阵字符图形,这些字这些字符有:阿拉伯数字、英文字母的大
17、小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码。使用时直接编写软件程序按一定的时序驱动即可。它的特点是显示字迹清楚,价格相对便宜2。12864液晶也是一种工业字符型液晶,它不仅能够显示1602液晶所可以显示的字符,数字等信息,而且还可以显示84个中文汉字和一些简单的图片,显示信息也非常的清楚。使用时也直接编写软件程序按一定的时序驱动即可.不过它的价格比1602液晶贵了很多。在本设计中,我们只需要显示最后电压的数字值和电压的单位,综合上面各种显示器件的特点:数码管只能显示数字,不能显示单位字符,不符合本设计的要求。而点阵显示器件驱动显示软件程序编写麻烦,占用的引脚相对也较多。也不是
18、理解的显示器件.所以在本设计中,我们考虑用液晶显示器件,虽然12864液晶比1602液晶的功能强,不过在价格方面却贵了好多。而1602液晶也足够满足本设计的需要。因此,在本设计实验我们选择1602液晶显示器件。文档为个人收集整理,来源于网络个人收集整理,勿做商业用途3.2.2 1602液晶的参数资料我们选择了1602液晶作为本设计的显示模块的显示器件。以下是1602液晶的各方面参数如表4.1所示:表3.1 接口信号说明编号符号引脚说明1VSS电源地2VDD电源正极3VL液晶显示偏压信号4RS数据/命令选择端5R/W读/写选择端6E使能信号814D0-D7Data I/O15BLA背光源正极16
19、BLK背光源负极2基本操作时序:1. 读状态:输入:RS=0,RW=1,E=1。输出:D0D7为状态字2. 写状态:输入:RS=0,RW=0,D0-D7为指令码,E为高脉冲.输出:无3. 读数据:输入:RS=1,RW=1,E=1。输出:D0D7为数据。4. 写数据:输入:RS=1,RW=0,D0D7为数据,E为高脉冲。输出:无3状态字说明如表4.2所示表3.2 状态字说明表STA7STA6STA5STA4STA3STA2STA1STA0STA06当前数据地址指针的数值STA7读写操作使能1:禁止 0:允许4指令的说明如表4。3,4。4,4.5所示. 3。3显示模式设置 指令码 功能001110
20、00设置162显示,57点阵,8位数据口3。4显示开/关及光标设置 指令码 功能00001DCBD=1开显示;D=0关显示C=1显示光标;C=0不显示关标B=1光标闪烁;B=0光标不显闪烁000001NSN=1当读写一个字条款后地址指针加一,且光标加一.N=0当读或写一个字符后地址指针减一,且光标减一.S=1当写一个安条款,整屏显示左移(N=1)或右移(N=0),以得到光标不移动而屏幕移动的效果.S=0当写一个字符,整屏显示不移动。3.5数据控制 指令码 功能80H+地址码(0-27H,40H67H)设置数据地址指针01H显示清屏:1,数据指针清0 2,所有显示清002H显示回车:数据指针清0
21、3。3 模数(A/D)转换芯片的选择在本设计中,模数(A/D)转换模块是一个重要的模块,它关系到最后数电压表电压值的精确度。所以,A/D芯片的选择是设计过程中一个很重要的环节。3。3.1常用的A/D芯片简介常用的A/D芯片有AD0809,AD0832,TLC2543C等几种。下面简单介绍一下这三种芯片。AD0809是8位逐次逼近型A/D转换器,它是由一个8路的模拟开关、一个地址锁存译码器、一个A/D 转换器和一个三态输出锁存器组成。多路开关可选通8个模拟通道,允许8 路模拟量分时输入,共用A/D 转换器进行转换。些A/D转换器是的特点是8位精度,属于并行口,如果输入的模拟量变化大快,必须在输入
22、之前增加采样电路3。AD0832也是8位逐次逼近型A/D转换器,可支持致命三个单端输入通道和一个差分输入通道。它易于和微处理器接口或独立使用;可满量程工作;可用地址逻辑多路器选通各输入通道.TLC2543C是12位开关电容逐次逼近A/D转换,每个器件有三个控制输入端,片选,输入/输出时钟以及地址输入端。它可以从主机高速传输转换数据。它有高速的转换,通用的控制能力,具有简化比率转换,刻度以及模拟电路与逻辑电路和电源噪声隔离,耐高温等特点6.综合上述几种A/D转换芯片的特点,前两种芯片的性能和精度都不如第三种芯片.在本设计中,我的目标是设计高精度的电压表,因此在此,我们选择精度为12位的TLC25
23、43芯片.3。3。2 模数(A/D)芯片TLC2543的资料综合本设计的各方面考虑,我们选了TLC2543模数转换芯片。下面就介绍此芯片的各方面资料。TLC2543芯片的封装引脚图和引脚说明如下:图1 TLC2543芯片封装 表3.6引脚说明引脚号名称I/O说明19,11,12AIN0-AIN10I模拟输入端。15CSI片选端。17Data inputI串行数据输入端。16Data outO用于A/D转换结果输也的3态串行输出端19EOCO转换结束端10GND接地端18I/O clkI输入/输出时钟端14REF+I正基准电压端13REF-I负基准电压端20VCC正电压端.各引脚的使用详细介绍.
24、1 AIN0AIN10这11个模拟信号输入由内部多路选器选择。对4.1MHZ的I/O clk,驱动源阻抗必须小于或等于50欧并且能够将模拟电压由60PF的电容来限制其斜率。2 在CS端的一个由高低变化将复位内部计数器并控制使能data out,data input和I/O clk.一个由低至高的变化将在一个设置时间内禁止data input和I/O clk.3 串行数据输入端data input是一个4位的串行地址选择下一个即将被转换的所需的模拟输入或测试电压。串行数据以MSB为前导并在I/O clk的前4个上升沿被移入。在4个地址位被读入地址寄存器后,I/O clk 将剩下的几位依次输入。4
25、 Data out在CS为高时处于高阻抗状态,而当CS为低时处于激活状态。CS一旦有效,按照前一次转换结果的MSB/LSB值将data out从高阻抗状态转变成相应的逻辑电平,I/O clk 的下一个下降沿将根据下一个MSB/LSB将data out驱动成相应的逻辑电平,剩下的各位依次移出。5 EOC在最后的I/O clk 下降沿之后,从高电平变为低电平并保持低直到转换完成及数据准备传输。6 GND端是内部电路的地回路端,除加有说明外,所有电压测量都相对于GND7 I/O clk端串行输入并完成以下四个功能:第一,在I/O clk的前8个上升沿,它将8个输入数据信键入输入数据寄存器。在第4个上
26、升沿之后为多路器的地址。第二,在I/O clk的第4个下降沿,在选定的多路器的输入端上的模拟输入电压开始和电容器充电并继续到I/O clk的最后一个下降沿。第三,它将前一次转换的数据的其余11位移出data out端。在I/O clk的下降沿时数据变化.第四,在I/O clk的最后一个下降沿它将转换的控制信号传送到内部的状态控制位。8 REF+端通常接VCC,最大输入电压范围取决于加于本端与加于REF端的电压差。9 REF端通常接地。4。 总体设计4。1 技术要求1) 最高量程为:500V.2) 分为三档量程:5V,50V,500V。可以通过调档开关实现各档位。最高精度为0.01mv。3) 能
27、测交流电压.4) 被测电压的电压值小于1V时,有自动换以MV为单位显示.5) 通过按键可以显示5秒的平均电压的电压值。2设计方案:根据上述,我选择单片机与A/D转换芯片结合的方法实现本设计。使用的基本元器件是:AT89C51单片机,TLC2543模数转换芯片,1602液晶显示器,开关,按键,电容,电阻,晶振,标准电源等等。设计的基本框图如下:单片机系统模块1602液晶显示模块A/D转换模块输入电路模块按键模块图2 系统设计框图4.2硬件电路系统模块的设计根据上述选择的各元器件,各电路模块的电路图如下描述.1单片机系统单片机最小系统包括晶振电路,复位电路,电源。其原理图如下:图3 单片机最小系统
28、原理图此模块中,单片机的晶振是12MHZ,C1和C2的电容是10UF,C3可选1-10UF.R1电阻为1K。2输入电路由于输入电路的电压比基准电压(2V)高很多,因此在输入电路必须加电压衰减器。衰减电路可由开关来选择不同的衰减率,从而切换档位。则完整输入电路如下:图4 输入电路通过计算,可知设计衰减器用的电阻R2,R3和R4分别为:9M,900K,100K控制档位的开关是双开关的,目地是能够使单片机CPU自动识别档位,即可用相应的档位的数据转换的算法计算出正确的电压值。被测电压输入端、整理过的模拟电压输入端,开关与单片机的连接如图所示.3A/D转换芯片与单片机的连接此设计中选择的是A/D转换芯
29、片的通道0,A/D芯片的数据输入口连接单片机的P1.3口,数据输出口连接单片机的P1。4口,芯片使能端连接单片机的P1.5口,脉冲端连接单片机的P1。6口。模块连接如图5所示.图5模块连接图4. 交流输入端与A/D 芯片的连接交流电压不能直接输入A/ D 芯片,必需通过整流、滤波 才能输入A/D转换器13。如图所示:图6 芯片连接 交流电压从out1输入,通过以上电路 整流 滤波,从out2 输出较稳定的直流电压。51602液晶与单片机连接此模块液晶的RS,RW和E端分别连接单片机的P1。2,P1.1和P1.0口;液晶的数据各端口连接单片机的P0口11。具体如下图所示。图7液晶连接模块6. 键
30、盘与单片机的连接如下。此键盘的一端与单片机的P2。0口连接,另一端接地。原理图如下所示。图8 开关连接该键盘的功能:当键盘被按下时,即可计算后5秒的平均电压值。4。3 系统软件的设计4。3。1 汇编语言和C语言的特点及选择本设计是硬件电路和软件编程相结合的设计方案,选择合适的编程语言是一个重要的环节。在单片机的应用系统程序设计时,常用的是汇编语言和C语言。汇编语言的特点是占用内存单元少,执行效率高.执行速度快。但它依赖于计算机硬件,程序可读性和可移植性比较差。而C语言虽然执行效率没有汇编语言高,但语言简洁,使用方便,灵活,运算丰富,表达化类型多样化,数据结构类型丰富,具有结构化的控制语句,程序
31、设计自由度大,有很好的可重用性,可移植性等特点9。由于现在单片机的发展已经达到了很高的水平,内部的各种资源相当的丰富,CPU的处理速度非常的快。用C语言来控制单片机无疑是一个理想的选择。所以在本设计中采用C语言编写软件程序。4。3.2 主程序设计主程序设计包括以下方面:按照硬件电路对单片机位定义。编写延时模块程序。编写驱动1602液晶显示模块程序.编写驱动A/D转换模块程序。编写键盘扫描模块程序。主程序的总体流程如下图: 开始对液晶,定时器初始化A/D转换数据转换显示瞬时电压值键盘判断显示5秒的平均电压值3秒后清屏图9 主程序流程图全部软件程序如下:#includedefine uchar u
32、nsigned char#define uint unsigned intdefine key_state0 0 /键盘扫描的各个状态define key_state1 1define key_state2 2#define key_state3 3sbit rs=P12;/1602液晶写命令/数据标志,0时写命令sbit rw=P11;/1602液晶写入/读出标志,0时写入数据sbit ep=P10;sbit input=P14;sbit output=P13;sbit cs=P15;sbit clk=P16;sbit key=P20;sbit flag_1=P21;/定义电压表档位相关标志
33、sbit flag_2=P22;sbit flag_3=P23;sbit flag_4=P24;uchar code tab0=V ”; /显示的单位及有关的字符uchar code tab1=”MV;uchar code tab2=Power:”;uchar code tab3=Aver_V:”;/平均电压值标志符uchar t;void delay(int z)/延时函数int x,y;for(x=z;x0;x-)for(y=10;y0;y);void write_com(uchar com)/往1602液晶写命令函数rs=0;P0=com;delay(5);ep=1;delay(5);e
34、p=0;void write_dat(uchar dat)/往1602液晶写数据函数rs=1;P0=dat;delay(5);ep=1;delay(5);ep=0;void init_1602()/对1602液晶的初始化函数rs=0;rw=0;write_com(0x38);delay(1);write_com(0x0c);delay(1);write_com(0x06);delay(1);write_com(0x01);delay(1);void init_timer0()/定时计数器0初值化函数,TMOD=0x01;/方式一TH0=(6553650000)/256;/每50ms中断一次TL
35、0=(65536-50000)256;IE=0x82;/打开中断TR0=0;/定时器首先不可工作void display(uchar x,uchar y,uint dat)/显示电压值的函数,x行y列开始显示uint add;uchar i,a5;switch(x)case 0:add=0x80;break;case 1:add=0x80+0x40;break; add=add+y; write_com(add); for(i=0;i5;i+)ai=dat%10;dat=dat/10; write_dat(a4+0x30); write_dat(a3+0x30); write_dat(a2+0
36、x30); write_dat(。); write_dat(a1+0x30); write_dat(a0+0x30);void display_zifu(uchar x,uchar y,uchar str)/显示字符函数,x行y列开始显示uint add;switch(x)case 0:add=0x80;break;case 1:add=0x80+0x40;break; add=add+y;write_com(add);while(str!=0)write_dat(*str);str+;uint read_AD(uchar con_way)/读取AD转换值操作函数uint dat=0;ucha
37、r i;cs=0;clk=0;con_way=4;for(i=0;i12;i+)con_way=1;/*选择0通道,在输入该控制数据的同时输出前一次AD转结果*/ input=CY;dat=1;if(output)/*输出AD转换结果*/dat=dat0x01;delay(2);clk=1;delay(5);clk=0;cs=1;return dat;uint read_value()long float dq;long float dat_v;dq=read_AD(0);/把读取得的AD转换值给变量dq if(!flag_3) dat_v=(200*dq)/4096100;/二档,量程为20
38、0V else if(!flag_2) dat_v=(20dq)/4096100;/二档,量程为20V else if(!flag_1)dat_v=(2dq)/4096100;/一档,量程2Vreturn dat_v; void read_key()/键盘扫描函数static uchar key_state=0;switch(key_state)case key_state0:if(key=0)key_state=key_state1;break; case key_state1:if(key=0) TR0=1;display_zifu(1,0,tab3);key_state=key_stat
39、e2; elsekey_state=key_state0;break;case key_state2: if(key)key_state=key_state0;break;void main() long float dat;long float dat_aver,dat1,dat2,dat3,dat4,dat5;/定义5个随机电压值变量uchar flag;/后五秒取随机电压的标志init_timer0();init_1602();delay(10); while(1) dat=read_value();if(dat=100)/当电压值大于1V时,用V显示,否则用mV显示display_zi
40、fu(0,1,tab2);display(0,7,dat);display_zifu(0,13,tab0);elsedisplay_zifu(0,1,tab2);display(0,7,dat*1000);display_zifu(0,13,tab1); read_key(); /当键盘按下时,计算后五秒的平均电压值if(t=20)t=0;flag+;if(flag=1)dat1=dat;if(flag=2)dat2=dat;if(flag=3)dat3=dat;if(flag=4)dat4=dat;if(flag=5)dat5=dat;dat_aver=(dat1+dat2+dat3+dat
41、4+dat5)/5; display(1,7,dat_aver);display_zifu(1,13,tab0);dat_aver=0; if(flag=8)flag=0;write_com(0x01);TR0=0; void timer0() interrupt 1/定时器中断函数TH0=(65536-50000)/256;/重新放入初始值TL0=(65536-50000)256;t+;5 系统的调试完成了系统的硬件设计,制作和软件编程之后,要使系统能够按设计意图正常运行,必须进行系统调试。调试分了硬件和软件调试. 硬件调试的主要任务是排除硬件故障,其中包括设计的错误和工艺性故障等。1) 检查所设计的硬件电路板所有的器件和引脚是否正确,尤其是电源的连接是否正确;检查各总线是否有短路的故障。检查开关/按键是否正常,是否连接正确,为了保护芯片,应先对各IC座电位进行检查,确认无误后再插入芯片.2) 将40芯片的仿真插头插入单片机插座进行调试,检查各接口是否满足设计的要求,有正常的程序测试硬件电路的好坏.软件调试的任务是利用开发工具进行在线仿真调试,发现和纠正程序的错误,同时也能发现硬件的故障.软件调试是一个模块进行的。首先单独调试各子程序是否能够按照预期的功能,接口电路的控制是否正常。最后调试整个程序9.尤其注意的是各模块间能否正确的传递参数。1) 检查液晶显示模块程序。在主