基于单片机设计的多功能数字电压表开发

摘 要:在电路设计中我们时常会用到电压表,过去大部分电压表还是模拟的,虽然精度较高但模拟电压表采用用指针式,里面是磁电或电磁式结构,所以响应较慢。为适应许多高速信号领域目前已广泛使用数字电压表。数字电压表的诞生打破了传统电子测量仪器的模式和格局,它显示清晰直观、读数准确,采用了先进的数显技术,大大地减少了因人为因素所造成的测量误差事件,数字电压表是把连续的模拟量(直流输入电压)转换成不连续、离散的数字形式,并加以显示的仪表。数字电压表把电子技术、计算技术、自动化技术的成果与精密电测量技术密切的结合在一起,成为仪器、仪表领域中独立而完整的一个分支,数字电压表标志着电子仪器领域的一场革命,也开创了现代电子测量技术的先河。
本设计是基于Atmel51单片机开发平台和自动控制原理的基础上实现的一种数字电压表系统。该系统采用Atmel89S52单片机作为控制核心,以ADC0804为数据采样系统,实现被测电压的数据采样;使用稳压二极管做过压保护,并通过模拟开关实现了输入量程的自动转换;使用字符液晶显示被测电压。

Design of Digital Voltage Meter based on Single-chip Microcomputer

Abstract:In circuit design, we often use voltage meter,Over the past most of the voltage meter or a simulation,Although high precision analog voltage used in the table, but with the pointer, which is a magnetic or electromagnetic structure,so the slow response.To meet the many areas of high-speed signal has been widely used digital voltmeter.The birth of digital voltage meter break the traditional model of electronic measuring instruments and patterns. It shows the clear and intuitive, accurate readings, using an advanced digital display technology, greatly reduced due to human factors of the measurement error caused by the incident. Digital voltage meter is a row of analog (DC input voltage) into a non-continuous, discrete digital form, and the instrument display. Digital voltage meter to electronic technology, computing technology, automation technology and precision of the results of electrical measurement technology closer together and become instruments, meters and complete an independent field of a branch, digital voltage meter indicates that the field of electronic devices a revolution and also pioneered the modern pioneer of electronic measurement technology.
The design is based on Atmel51 microcontroller development platform and automatic control based on the principle of a digital voltage meter system.The system uses Atmel89S52 microcontroller as the control core, ADC0804 for the sampled data system, The use of a zener diode for overvoltage protection, and through the realization of analog switch the input range automatic conversion; the use of character liquid crystal display the measured voltage.

第一章  绪 论1.1 课题研究的背景及意义

数字电压表的高速发展,使它已成为实现测量自动化、提高工作效率不可缺少的仪表,数字化是当前计量仪器发展的主要方向之一,而高准度的DC-DVC的出现,又使数字电压表进入了精密标准测量领域。随着现代化技术的不断发展,数字电压表的功能和种类将越来越强,越来越多,其使用范围也会越来越广泛。采用智能化的数字仪器也将是必然的趋势,它们将不仅能提高测量准确度,而且能提高电测量技术的自动化程序,可以扩展成各种通用数字仪表、专用数字仪表及各种非电量的数字化仪表(如:温度计、湿度计、酸度计、重量、厚度仪等),几乎覆盖了电子电工测量、工业测量、自动化仪表等各个领域。从而提高计量检定人员的工作效率。

在电量的测量中,电压,电流和频率是最基本的三个被测量,其中电压量的测量最经常。而且随着电子技术的发展,更是需要经常测量高精度的电压,所以数字电压就成为必不可少的测量仪器。另外,数字测量仪器具有读数准确方便,精度度高,误差小,灵敏度高,分辨率高,测量速度快等特点倍受用户亲睐,数字电压表的设计就基于这种需求发展起来。目前实现电压数字化测量的方法仍然是模—数(A/D)转换的方法。数字电压表分类繁多,日常生活中一般根据原理的不同进行分类,大致分为:比较式,电压—时间变换式,积分式等。

1.2 国内外研究现状和发展            

数字电压表(Digital Voltmeter)简称DVM,它出现在上世纪50年代初,60年代末发张起来的电压测量仪表,它采用的是数字化测量技术,把连续的模拟量,也就是连续的电压值转变为不连续的数字量,加以数字处理然后通过显示器件显示。这种电子仪表之所以出现,一方面是由于电子计算机的应用推广到系统的自动控制信号的实验领域,提出了各种被观测量或被控制量转换成数字量的要求,即为了实时控制和数据处理的要求;另一方面,也是电子计算机的发展,带动了脉冲数字电路技术的发展,为数字化仪表的出现提供了条件。所以,数字化测量仪表的产生与发展与电子计算机的发展是密切相关的;同时,为革新电子测量中的烦琐与陈旧方式也促进了它的飞速发展。如今,它又成为向智能化仪表发展的必要桥梁。

    如今,数字电压表已经绝大部分取代了传统的模拟指针式电压表,因为传统的模拟指针式电压表功能单一,精度低,读数的时候非常不方便还经常出错,而采用单片机的数字电压表由于测量精度高,速度快,读数时也非常方便,抗干扰能力强,可扩展性强等优点已被广泛应用与电子和电工测量,工业自动化仪表,自动测量系统等领域。显示出强大的生命力。

数字电压表最初是伺服步进电子管比较式,其优点是准确度比较高,但是采样速度较慢,体积重达几十公斤。继之出现了谐波式电压表,它的速度方面稍有提高但准确度低,稳定性差,再后来出现了比较式仪表改进逐次渐进式结构,它不仅保持了比较是准确度高的优点,而且速度也有了很大的提高,但它有一缺点就是抗干扰能力差,很容易受到外界因素的影响,随后,在谐波式的基础上双引申出阶梯波式,它的唯一进步就是成本降低了,可是准确度,速度及抗干扰能力都未提高。而数字电压表的发展已经非常成熟,就原理来讲,它从原来的一两种已经发展到多种,在功能上讲,它从测单一的参数发展到能测多种参数;从制作原件看,发展到集成电路,准确度已经有了很大的提高,精度已经达到1NV,读数速度达到每秒几万次,而相对以前价格已经降低了很多。数字电压表(数字面板表)是当前电子、电工、仪器、仪表和测量领域大量使用的一种基本测量工具有关数字电压表的书籍和应用已经非常普及了。
    数字电压表的设计和开发,已经有多种类型和款式。传统的数字电压表各有特点,它们适合在现场做手工测量,要完成远程测量并要对测量数据做进一步处理,传统数字电压表是无法完成的。然而基于PC通信的数字电压表,既可以完成测量数据的传递,又可借助PC,做测量数据的处理。所以这种类型的数字电压表无论在功能和实际上,都具有传统数字电压表无法比拟的特点,这使得它的开发和应用具有良好的前景。

1.3 本文的研究内容

本设计是基于单片机AT89S52的数字电压表系统,系统具有精度高、速度快、性能稳定、电路简单且工作可靠等特点, 具有很好的使用价值。这个设计的目的和意义在于使自己掌握数字电压表的工作原理,自己动手设计数字电压表与仿真。设计的数字电压表可广泛应用于电压测量以及通过其它变换器还可以测量其他电量和非电量。数字电压表广泛应用于测量领域每次测量的准确度和可信度取决于它的主要性能和技术指标。所示我们要学习和掌握如何设计数字电压表就显得十分重要。

在本次毕业设计时,我大量用到了所学的内容。涉及知识面广,应用性强是本次设计的核心特点。通过自己的动手能力和钻研精神将课本知识运用到实践中来,虽然在设计上或者功能实现上存在不足,但最重要的是一种锻炼,培养一种理论与实践相结合的能力,希望能对将来步入社会奠定基础,实现自己人生价值!

第二章  系统分析与设计方案2.1 系统分析

利用MCS-51系列单片机对整个系统进行总体控制,采用数字化测量技术,把连续的模拟量(直流输入电压)转化成不连续、离散的数字形式并加以显示的仪表。传统的指针式电压表功能单一,精度低,不能满足数字化时代的需求采用单片机的数字电压表,精度高、抗干扰能力强,可扩展性强、集成方便。目前,由各种单片A/D转换器构成的数字电压表,已经被广泛用于电子及电工测量、工业自动化仪表、自动测量系统等智能化测量领域,显示出强大的生命力。

2.1.1 功能及指标

本次设计要具体目标如下:

1)分为三档量程:0~5V,0~10V,0~20V;

2)测量最小分辨率:0.02V;

3)自动选择量程;

4)采用字符液晶LCD1602显示。

2.2 系统总体方案设计
2.2.1 方案设计的基本思路

设计主要采用AT89S52单片机芯片和ADC0804模/数转换芯片来完成一个简易的数字电压表,能够对输入的0V~20V的模拟直流电压进行测量,并通过LCD1602进行显示,测量误差约为0.02 V。设计电路主要通过ADC0804芯片的模拟电压输入端输入的0V~20V的模拟量电压,产生相应的数字量经过其输出通道D0~D7传送给AT89S52芯片的P0口。该电压表的测量电路主要由四个模块组成:A/D转换模块、数据处理及控制模块、量程转换模块及显示控制模块。A/D转换主要由芯片ADC0804来完成,主要负责把采集到的模拟量转换为相应的数字量再传送到数据处理模块,数据处理则由单片机AT89S52来完成,其负责把ADC0804传送来的数字量经数据处理后,产生相应的显示码送到显示模块进行显示,量程转换模块主要由继电器和分压电阻组成,由单片机控制继电器切换衰减倍数来实现量程转换,显示模块主要由LCD1602组成,实时显示测量到的电压值。

2.2.2 数字电压表的两种设计方案

设计数字电压表有多种的设计方法,由于大规模集成电路数字芯片的高速发展,各种数字芯片品种多样,导致对模拟数据的采集部分不一致,进而又使对数据的处理及显示的方式的多样性。又由于在现实的工作生活中,需要测量的模拟电压范围是比较大的,所以必须要对输入电压作分压处理,而各个数据处理芯片的处理电压范围不同,则各种方案的分段也不同。下面介绍两种数字电压表的设计方案。

方案一:由数字电路及芯片构建。

这种设计方案是由模拟电路与数字电路两大部分组成,模拟部分包括输入放大器、A/D转换器和基准电压源;数字部分包括计数器、译码器、逻辑控制器、振荡器和显示器。其中,A/D转换器是它的核心器件,它将输入的模拟量转换成数字量。模拟电路和数字电路是相互联系的,由逻辑控制电路产生控制信号,按规定的时序将A/D转换器中个组模拟开关接通或断开,保证A/D转换正常进行。A/D转换结果通过计数译码电路变换成段码,最后驱动显示器显示出相应的数值。此方案设计的优点是设计成本低,能够满足一般的电压测量。但设计不灵活,都是采用纯硬件电路,很难将其在原有的基础上进行扩展。

方案二:由单片机系统及A/D转换芯片构建。

这种方案是利用单片机系统与模数转换芯片、显示模块等的结合构建数字电压表。由于单片机的发展已经成熟,利用单片机系统的软硬件结合,可以组装出许多的应用电路来。此方案的原理是模/数(A/D)转换芯片的基准电压源,被测量电压输入端分别输入基准电压和被测电压。模/数(A/D)转换芯片将被被测量电压输入端所采集到的模拟电压信号转换成相应的数字信号,然后通过对单片机系统进行软件编程,使单片机系统能按规定的时序来采集这些数字信号,通过一定的算法计算出被测量电压的值。最后单片机系统将计算好了的被测电压值按一定的时序送入显示电路模块加以显示。此方案不仅能够继承方案一的各种优点,还能改进方案一设计的不灵活,可以在原有的基础上进行扩展[4]。

综合比较以上两种设计方案的各方面的优点及现在所设计的电压表的实用性,选择第二种电压表的设计方案,及由单片机及数字芯片构建的方法来实现数字电压表的设计。

2.2.3  A/D转换模块的选择

方案一:A/D转换器采用ICL7107型三位半显示的芯片,输入信号,流经取样电路取样后送到ICL7107型三位半A/D转换器,只需要很少的简单外围元件,就可以组成数字电流表模块,直接驱动三位半LED显示器显示,最后输入电流在显示部件显示。由于ICL7107做的LED数字电压表最大的缺点是数字乱跳不稳定,特别是最后一位,所以不采用此方案。

方案二:A/D转换器采用ADC0804转换芯片,其中A/D转换器用于实现模拟量数字量的转换,单电源供电。ADC0804是属于连续渐进式的A/D转换器,这类型的A/D转换器除了转换速度快、分辨率高外,还有价钱便宜等优点。 ADC0804是采用单通道模拟量输入,8位数字量输出功能的A/D转换器,转换时间为100us,模拟输入电压范围为0V~5V,具有参考电压输入端,内含时钟发生器,不需要调零,因此,本次设计选用ADC0804作为AD转换芯片。

2.2.4 接口模块的选择

方案一:使用数字电路实现,采用译码芯片CD4543作为接口芯片,这种方案能实现功能,但稳定性不高,结构复杂。

方案二:采用AT89S52单片机作为系统的控制单元,通过A/D转换将被测量转换为数字量送入单片机中,再由单片机产生显示码送入显示模块显示。此方案各种功能易于实现,成本低、功耗低,显示稳定。

通过比较,选择方案二。

2.2.5 微控制器的选择

目前单片机种类很多,如何选择性价比最低、开发容易、开发周期最短的产品,是工程师考虑的主要问题之一。目前我国销售的主流MCU产品有8051、PIC、MCP430、STC、AVR等系列的单片机,,先购单片机总体上主要从两方面考虑,其一是目标系统需要哪些资源,其二是根据成本的控制选择价格最低的产品,即所谓的“性价比最高”原则。资源方面考虑的重要指标有速度、位数、电压、功耗、存储容量、系统扩展与驱动能力、抗干扰能力,是否嵌入ADC、DAC等其他的特殊要素。另外软件开发的简易性也是重要考虑的因素。例如MCS-51系列作为传统的8位单片机,现在仍在广泛的应用就是因为它具有非常方便的开发工具、集成环境和软件资源。成本方面主要看选择哪家厂商的产品。实际上同一类产品有很多兼容系列,不同的厂家价格有很大差别。更重要的是要选择供货服务好,能提供良好技术支持,信誉高的代理经销商。

AT89S系列与AT89C系列单片机的应用与区别:

              AT89C52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,功能强大的AT89C52单片机可为您提供许多较复杂系统控制应用场合。

AT89S52是一个低功耗,高性能CMOS 8位单片机,片内含8k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准 MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S52可为许多嵌入式控制应用系统提供高性价比的解决方案。因此为了下载的方便我采取AT89S52的单片机。

2.3 系统硬件分析

本设计是以单片机AT89S52和A/D转换器ADC0804为核心,测量连续信号的数字电压表。硬件主要由:5V直流电源供电模块,单片机AT89S52模块,AD转换模块,电压显示模块,量程转换模块组成。

数字电压表的总体框图如图2.1所示:

图2.1 系统总体框图

2.3.1 AT89S52单片机简介

AT89S52是一个低功耗,高性能CMOS 8位单片机,片内含4k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S52可为许多嵌入式控制应用系统提供高性价比的解决方案。

AT89S52实物图如图2.2所示:

                   

图2.2 AT89S52实物图

2.3.2 LCD1602显示器简介

普通的LED数码管只能用来显示数字,如果要显示英文、汉字或者图像,则必须使用液晶显示器。液晶显示器的英文名称是Liquid Crystal Display,简称LCD。液晶显示器作为显示器件具有体积小、重量轻、功耗低等优点,所以LCD日渐成为各种便携式电子产品的理想显示器,如电子表、计算器上的显示器等。

根据LCD的显示内容划分,可以分为段式LCD、字符式LCD和点阵式LCD3种。其中,字符式LCD以其价廉、显示内容丰富、美观、使用方便等特点,成为LED数码管的理想替代品。

1602LCD显示屏实物图如图2.3所示:

                       

                                                 图2.3 LCD1602显示屏实物图

2.3.3 ADC0804转换芯片简介

ADC0804 是8 位ADC0804是属于连续渐进式的A/D转换器。ADC0804是单通道模拟量输入,8位数字量输出功能的A/D转换器,转换时间为100us,模拟输入电压范围为0V~5V,具有参考电压输入端,内含时钟发生器,不需要调零。

ADC0804的控制信号时序图,由下图2.4所示。

图2.4 ADC0804控制信号时序图
ADC0804的主要电气特性如下:
工作电压:+5V,即VCC=+5V。
模拟输入电压范围:0~+5V,即0≤Vin≤+5V。
分辨率:8位,即分辨率为1/28=1/256,转换值介于0~255之间。
转换时间:100us(fCK=640KHz时)。
转换误差:±1LSB。
参考电压:2.5V,即Vref=2.5V。
第三章  系统硬件电路设计3.1系统组成

本系统是基于单片机的数字电压表电路设计,该系统主要由以下几个部分组成:单片机、AD转换、显示设备、量程转换,过压保护等。其中以单片机作为主控芯片控制系统中的A/D转换电路,量程转换电路和液晶显示电路,以实现电压测量功能。

3.2电源接口电路

由于本系统各模块均需+5V直流电源供电,故只需设计+5V直流电源电路即可。

电源电路采用六脚自锁开关控制,其电源两端并上两个滤波电容,其中D1为电源指示灯,R3为D1的限流电阻,如图3.1所示:

图3.1系统电源接口电路

3.3 AT89S52单片机最小系统电路

    AT89S52是美国ATMEL公司生产的低电压,高性能CMOS 8位单片机,片内含8KB可反复擦写的Flash只读程序存储器和128 字节随机存取数据存储器。该器件采用ATMEL公司高密度、非易失性存储技术制造,兼容标准MCS-51指令系统,灵活应用于各种控制领域。

   AT89S52单片机最小系统电路由主控电路、复位电路、晶振电路以及电源电路四部分组成。

3.3.1 主控芯片AT89S52

主控电路主要由单片机AT89S52芯片组成,主控芯片电路图如图3.2所示,电路中U1为单片机AT89S52,P4为单片机P0的上拉排阻,C5为单片机去耦电容。

图3.2 AT89S52芯片

3.3.2 复位电路

   AT89S52单片机在启动运行时或者出现死机时需要复位,使CPU以及其他功能部件处于一个确定的初始状态,并从这个状态开始工作。复位电路产生的复位信号(高电平有效)由RST引脚送入到内部的复位电路,对AT89S52单片机进行复位,复位信号要持续两个机器周期(24个时钟周期)以上,才能使AT89S52单片机可靠复位。

   AT89S52单片机复位电路如图3.3所示:

图3.3复位电路图

复位电路工作原理:上电瞬间RST引脚的电位与VCC等电位,RST引脚为高电平,随着电容C6充电电流的减少,RST引脚的电位不断下降,其充电时间常数为T=R9*C6=100ms,此时间常数足以RST引脚在保持为高电平的时间内完成复位操作。

当单片机已在运行当中时,按下复位键S1后松开,也能使单片机RST引脚维持一段时间的高电平,从而实现AT89S52单片机手动复位。

3.3.3 晶振电路

XTAL1和XTAL2是片内振荡电路输入端,这两个端子用来外接石英晶体和微调电容,即用来连接AT89S52单片机片内OSC的定时反馈回路。晶振起振后要能在XTAL2端输出一个3V左右的正弦波,以便使片内OSC电路按晶振相同频率自激振荡。通常,OSC的输出时钟频率FOSC为6MHZ—16MHZ,典型值为12MHZ或11.0592MHZ。电容C5和C6帮助晶振起振,典型值为30pf,调节它们可以达到微调FOSC的目的。本系统中,晶振为12MHZ,C5=C6=30pf。

晶振电路如图3.4所示:

图3.4 晶振电路图

3.4 LCD1602显示电路

LCD1602字符液晶的8位数据口接单片机的P0口,其三个控制信号脚分别接单片机的P1.0~P1.2脚,图中电位器R0(3脚)起着调节LCD1602的分辨率的作用。

LCD1602显示接口电路如图3.5所示:

图3.5 1602显示器接口电路

3.6 A/D转换电路

A/D转换电路外接电路如图3.6所示:图中U1为ADC0804芯片,电阻 R2=10KΩ、电容C5=150PF决定A/D转换速率,则内部的转换频率是fCK=1/(1.1×10 KΩ×150PF)=606KHz,电容C1为ADC0804的去耦电容。


图3.6 A/D转换电路外接电路图

3.7 量程转换电路

量程转换电路如图所示3.7所示:其中P8为模拟电压输入端,可输入0~20V电压,R10,R11,R12三个分压电阻和继电器RE1,RE2控制电压衰减倍数,使得输入到ADC0804的模拟电压不超过5V,D2为5v稳压管,作为ADC0804输入端过压保护。

          

图3.7 量程转换电路


第四章 系统软件设计4.1 系统主程序流程图

系统上电启动,首先配置好各个模块端口,初始化液晶显示和定时器,依次调用各功能模块。在主程序中实时显示系统状态和当前测量的电压值,并实时扫描中断。在中断服务子程序中,检测按键和当前电压值。系统总流程图如图4.1所示:

                                                                                                  图4.1 系统总流程图

4.2 LCD1602液晶流程图

系统上电后,配置好液晶端口,然后对LCD1602进行初始化,再调用LCD1602的读写函数,可将采集处理后的电压数值实时显示。当电压值在量程临界值是,液晶显示警告信息。
             


                                                                                                  图4.2 LCD1602 液晶显示流程图
4.3 ADC0804流程图

本系统采用中断扫描的方式,定时对外部电压进行采样。系统上电初始,首先初始化定时器,等待定时器中断。中断到达,首先选择最高量程,启动AD转换,比较输出数值,选择合适的量程,再次启动ADC0804,转换完成后对数据进行处理,再送入LCD1602中显示。
ADC0804的A/D转换流程图如图4.3所示:


                         图4.3 A/D转换流程图
第五章  性能测试与分析

基于单片机的数字电压表在设计中整个系统已经由设计图纸走向了模型机,标志着整个开发系统的初步成功。系统的设计工作进入到另外一个阶段——综合调试阶段。不过在系统的设计与实现中,调试的工作是伴随着整个系统开发过程的始终。只有经过所有各自软件程序的调试之后所剩下的公共的接口部分就需要进行联调了。

5.1 各模块独立测试

系统制作完成后,首先测试各器件是否焊接良好,是否存在漏焊、虚焊等现象。检查整个电路的线路是否存在短路或断路。检测电源电路,及各器件电源和地是否连接正常。

检测无误后,安装好单片机,给电路上电,开始测试单片机最小系统。主要检查复位电路,时钟晶振电路,P0口上拉排阻及EA引脚是否连接正常。测试单片机各引脚电压是否正常。

单片机最小系统测试无误后,可编制测试小程序,分别测试LCD1602、ADC0804电路是否正常工作,各模块单独测试,并且逐步深入,以防止芯片损坏。

5.2 系统联合调试

经过各部分的调试之后,就进入到了整个系统的联合调试之中。联合调试的主要目的就是查看系统各部分同时运行时的协调状况。在测试过程中,主要根据系统运行的条件和期望表现进行模拟,即模拟工作环境,查看系统的输出结果是否与之相符。如果不相符则作记录。

系统调试之初,首先利用Proteus仿真软件和Keil编程软件构成仿真图,仿真图如图5.1所示,在仿真环境下对系统进行调试、测试,逐步深入。在仿真环境下,系统能正常运行,则在实物上进行最终调试,待一次联调基本结束后生成测试报告,并得到反馈信息,并再次进行修改—局部联调—测试,等到经过协调之后再次进行系统联调直到系统稳定运行为止。

图5.1 系统仿真图

5.3 系统运行评估

经过联调之后,整个系统就处于性能评估之中,性能评估在实验室条件下对系统整体性能测定分析,主要有:电压测量精度,量程转换,显示效果等。分析系统的优势和不足,并尝试提出改进措施,为今后进一步研究提供依据。

第六章  总 结

   通过这次的毕业设计,使我在关于电子方面的实际动手能力有很大的提高,在元器件的布置、安装、焊接、调试等方面都有很大的进步。我在这项实践中主要负责实物的制作阶段,初期的时候由于对这个数字电压表没有一个实质性的概念,所以一时之间不知道该如何下手,后来通过查阅大量相关资料才渐渐的有了一点头绪。在原理图的设计过程中遇到很多难题,通过仿真,实验,不断对电路进行改进,逐步深入,将问题一一解决。最终将设计付诸实践,做出实物。
从总体来说,本文重点是实现数字电压表的功能以及对单片机的外围电路等进行了基础性的研究,由于时间和条件的限制,虽然取得了一定的效果,但尚存在一定不足之处,比如测量大电压时精度不够,保护电路不完善。并且现实中各种模拟量特点不一样,系统设计考虑不够全面,应用范围有限。这些问题主要由于原理设计及程序处理的原因,不能及时解决,有待今后进一步的研究。

回顾过去,展望未来,随着科技的发展,出现的各种高级芯片和技术,能够很大程度上提高电压表的精确性和稳定性。只有通过不断的学习,不断的探索,这样才能把自己的知识更好的运用与实践中。

参考文献(References)

[1]李广第.单片机基础[M].北京航空航天出版社.2007.

[2]宋凤娟,孙军,李国忠.基于89c51单片机的数字电压表设计[J].《制造业自动化》.207年第02期.

[3]翟蓓蓓,孙运强,姚爱琴.液晶显示数字电压表的设计[J].《山西电子技术》.2011年第05期

[4]陈尚松,郭庆,雷加.电子测量与仪器[M].电子工业出版社. 2009.

[5]吴金戍.8051 单片机实践与应用[M].清华大学出版社.2002.

[6]黄志伟.全国大学生电子竞赛培训教程[M]. 电子工业出版社.2011.

[7]贾培军,董军堂,高延华.一种量程自动切换数字电压表的设计[J].山西电子技术。2007年第06期.

[8]史九贵 编著,基于Altium Designer的原理图与PCB设计[M] .北京:机械工业出版社,2010.

[9]赵建领,薛圆圆等.51单片机开发与应用技术详解[M].北京:电子工业出版社.2009.
[10]王东峰,王会良,董冠良. 单片机C语言应用100例[M].北京:电子工业出版社.2009.        

  致 谢

通过这次毕业设计,我巩固了以前学过的很多知识,培养了分析与解决问题的能力,更使我检索和获取知识的能力的到了很大的提高,这跟老师们给我的指导是分不开的。本次毕业设计在吴静进老师的悉心指导和自己的积极努力下完成的。在他的谆谆教导下,我按时完成了设计,没有他的严要求,我恐怕就会放纵自己。谨此感谢学院对于这次学生科研的大力支持并向指导老师致以崇高的敬意和衷心的感谢!

附录1: 系统原理图及实物图


附图一.系统原理图


附图二 作品实物图
#include "reg52.h"
#include "lcd1602.h"
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
//sbit P13=P1^3;//警示灯
//sbit key1=P3^1;
//sbit key2=P3^2;
sbit P34=P3^4;
sbit P33=P3^3;
sbit adrd=P3^6;                        
sbit adwr=P3^7;
sbit cs=P3^5;
uchar n=0;
uchar temp=0;
uchar temp1=0;
uchar temp2=0;
uchar b=0,j=0;
float avr=0;
uchar c[8];
uchar table1[]="Digital";
uchar table2[]="Voltage Meter";
//延时程序
void delayms(uint n)
{
              uint i,j;
              for(i=n;i>0;i--)
                            for(j=120;j>0;j--);
}
//电压显示程序
void displayv()
{                           
                            uint val=0;
                            val=avr*100;            
            
                            c[0]=val/1000+'0';            
                            c[1]=val/100%10+'0';
                            c[2]='.';
                            c[3]=val/10%10+'0';
                            c[4]=val%10+'0';
                            c[5]='v';
                            c[6]='\0';
}
//主函数
void main()
{
              LCD_Initial();            
              TMOD=0x01;
    TH0 = (65536 - 10000)/256;
    TL0 = (65536 - 10000)%256;
              EA=1;
              ET0=1;            
              GotoXY(5,0);
    Print(table1);
              GotoXY(2,1);
    Print(table2);
              delayms(1000);
              delayms(1000);
              delayms(1000);
              GotoXY(0,0);
    Print("                  ");
              GotoXY(0,1);
    Print("                  ");            
              P33=1;
              P34=1;
              GotoXY(2,0);
                  Print(table2);
              TR0=1;            
              while(1)
              {
              }
}
void intt0() interrupt 1
{
              TH0=(65536-10000)/256;
              TL0=(65536-10000)%256;
              n++;
              if(n==10)
              {
                            P33=1;
                            P34=1;
                            delayms(10);
                            cs=0;
                            adwr=1;                     
                  adwr=0;                                         
                  _nop_();
                            _nop_();
                            adwr=1;            
                  delayms(10);                                       
                            adrd=0;
                            //temp=0;              
                            b=P2;                                         
                            adrd=1;
                            cs=1;                  
                            adwr=0;
                            for(j=0;j<7;j++)//将变b的值反序(因AD0809数据口接反了)
                            {
                                          if(b&(0x01<<j))
                                                        temp|=(0x80>>j);
                                          else
                                                        temp&=~(0x80>>j);
                            }
                            if(temp<64)
                            {
                            P33=0;
                            P34=1;
                            delayms(10);
                            cs=0;
                            adwr=1;                     
                  adwr=0;                                         
                  _nop_();
                            _nop_();
                            adwr=1;            
                  delayms(10);                                       
                            adrd=0;
                            //temp=0;              
                            b=P2;                                         
                            adrd=1;
                            cs=1;                  
                            adwr=0;
                            for(j=0;j<7;j++)//将变b的值反序(因AD0809数据口接反了)
                            {
                                          if(b&(0x01<<j))
                                                        temp1|=(0x80>>j);
                                          else
                                                        temp1&=~(0x80>>j);
                            }
                            if(temp1<128)
                            {
                            P33=0;
                            P34=0;
                            delayms(10);
                            cs=0;
                            adwr=1;                     
                  adwr=0;                                         
                  _nop_();
                            _nop_();
                            adwr=1;            
                  delayms(10);                                       
                            adrd=0;
                            //temp=0;              
                            b=P2;                                         
                            adrd=1;
                            cs=1;                  
                            adwr=0;
                            for(j=0;j<7;j++)//将变b的值反序(因AD0809数据口接反了)
                            {
                                          if(b&(0x01<<j))
                                                        temp2|=(0x80>>j);
                                          else
……………………
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                        
原文链接:https://blog.csdn.net/runweipa/article/details/139214765

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值