简单的单片机数字电压表

作者&投稿:歹态 (若有异议请与网页底部的电邮联系)
基于51单片机的简易数字电压表~

你把程序好像不全
如果是因为采集数据中有杂质而造成闪烁,那么你单纯的加延时是不起作用的,需要滤波

这是我以前用的,范围可能只有0-5V,你找人帮改改就可以了OUTBIT EQU 08002HOUTSEG EQU 08004HCS0809 EQU 0A000HLEDBUF EQU 60HDELAYT EQU 75HORG 0000HLJMP STARTLEDMAP: DB 3FH,06H,5BH,4FH DB 66H,6DH,7DH,07H DB 7FH,6FH,77H,7CH DB 39H,5EH,79H,71HDELAY: MOV R7,#0
wj: DJNZ R7,wj DJNZ R6,wj RET
DISP: MOV R0,#LEDBUF+2 MOV R1,#3 MOV R2,#00000100BLOOP: MOV DPTR,#OUTBIT MOV A,#0 MOVX @DPTR,A MOV DPTR,#OUTSEG MOV A,@R0 MOVX @DPTR,A MOV DPTR,#OUTBIT MOV A,R2 MOVX @DPTR,A MOV R6,#01 CALL DELAY MOV A,R2 RR A MOV R2 ,A DEC R0 DJNZ R1,LOOP MOV DPTR,#OUTSEG MOV A,#80H MOVX @DPTR,A MOV DPTR,#OUTBIT MOV A,#000000010B MOVX @DPTR,A MOV R6,#01 CALL DELAY MOV DPTR,#OUTBIT MOV A,#0 MOVX @DPTR,A RETSTART: MOV SP,#40H z: MOV DPTR,#CS0809 MOV A,#0 MOVX @DPTR,A MOV A,#40H DJNZ ACC,$ MOVX A,@DPTR
MOV R5,A MOV A,#205 SUBB A,R5 MOV B,#4 DIV AB
MOV R1,#LEDBUF MOV @R0,A MOV A,#2 MUL AB MOV DPTR,#LEDMAP MOVC A,@A+DPTR MOV @R1,A MOV A,@R0 INC R1 MOV B,#10 DIV AB MOV @R0,A MOV A,B MOV DPTR,#LEDMAP MOVC A,@A+DPTR MOV @R1,A MOV A,@R0 INC R1 MOV B,#10 DIV AB MOV @R0,A MOV A,B MOV DPTR,#LEDMAP MOVC A,@A+DPTR MOV @R1,A MOV DELAYT ,#30 lp: CALL DISP DJNZ DELAYT ,lp LJMP z END

摘 要:
本文介绍了用ADC0808集成电压转换芯片和AT89C51单片机设计制作的数字直流电压表。在测量仪器中,电压表是必须的,而且电压表的好坏直接影响到测量精度。具有一个精度高、转换速度快、性能稳定的电压表才能符合测量的要求。为此,我们设计了数字电压表,此作品主要由A/D0808转换器和单片机AT89C51构成,A/D转换器在单片机的控制下完成对模拟信号的采集和转换功能,最后由数码管显示采集的电压值。此设计通过调试完全满足设计的指标要求。电路设计简单,设计制作方便有较强的实用性。

关键词:
ADC0808;单片机AT89C51;数字电压表

Abstract:
In this paper, with ADC0808 voltage converter integrated chips and microcontroller designed AT89C51 the number of DC voltage table. In measuring instruments, voltage meter is necessary, and voltage meter will have a direct impact on measurement accuracy. With a high precision, the conversion speed and stable performance of the voltage meter to conform to the requirements of measurement. To this end, we design a digital voltage meter, this works mainly by A/D0808 converter and a microcontroller AT89C51, A / D converter under the control of the MCU to complete the acquisition and analog signal conversion functions, from the final Acquisition of the digital display voltage value. This design through debugging to fully meet the design requirements of the target. Circuit design simple, designed to facilitate a more practical.

Key words:
ADC0808; SCM AT89C51; Digital Voltmeter

目 录
1.设计方案……………………………………………………………………………………1
2. 系统硬件设计……………………………………………………………………………2
2.1单片机芯片……………………………………………………………………………2
2.1.1.单片机芯片选择……………………………………………………………2
2.1.2.单片机管脚说明……………………………………………………………3
2.2.A/D转换器……………………………………………………………………………5
2.2.1.A/D转换器芯片选择………………………………………………………5
2.2.2.A/D转换器管脚说明………………………………………………………6
2.3.电压显示电路…………………………………………………………………………7
3.系统程序设计……………………………………………………………………………………8
3.1.软件总体框架设计……………………………………………………………………8
4.系统总图及程序…………………………………………………………………………………9
5.参考文献………………………………………………………………………………………………12
6.结束语……………………………………………………………………………………………………13

1.设计方案
在电量的测量中,电压、电流和频率是最基本的三个被测量,其中电压量的测量最为经常。而且随着电子技术的发展,更是经常需要测量高精度的电压,所以数字电压表就成为一种必不可少的测量仪器。数字电压表(Digital Voltmeter)简称DVM,它是采用数字化测量技术,把连续的模拟量(直流或交流输入电压)转换成不连续、离散的数字形式并加以显示的仪表。由于数字式仪器具有读数准确方便、精度高、误差小、灵敏度高和分辨率高、测量速度快等特点而倍受青睐。本设计从各个角度分析了由单片机组成的数字电压表的设计过程及各部分电路的组成及其原理,并且分析了程序如何驱动单片机进而使系统运行起来的原理及方法。框图如下:

本设计主要分为两部分:硬件电路及软件程序。而硬件电路又大体可分为A/D转换电路、LED显示电路,各部分电路的设计及原理将会在硬件电路设计部分详细介绍;程序的设计使用汇编语言编程,利用WAVE和PROTEUS 软件对其编译和仿真,详细的设计算法将会在程序设计部分详细介绍。

2.系统硬件电路设计
2.1 单片机芯片
2.1.1.单片机芯片选择
AT89C51简介
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。外形及引脚排列如图所示

图2.1_1 AT89C51引脚图

2.1.2.单片机管脚说明
主要特性:
•与MCS-51 兼容
•4K字节可编程闪烁存储器
•寿命:1000写/擦循环
•数据保留时间:10年
•全静态工作:0Hz-24Hz
•三级程序存储器锁定
•128×8位内部RAM
•32可编程I/O线
•两个16位定时器/计数器
•5个中断源
•可编程串行通道
•低功耗的闲置和掉电模式
•片内振荡器和时钟电路

管脚接法说明:
VCC:供电电压我们接+5V。
GND:接地。
P0口:在这个设计中我们将AT89C51做为BCD码的输出口与LED显示器相连。由于P0口输出驱动电路中没有上拉电阻,所以我们在外接电路上接上拉电阻。
P1口:把AT89C51中的P1口与ADC0808的输出端相连,做为数字信号的接收端。
P2口:我们把P2口做为位码输出口,以P2.0—2.3输出位控线与LED显示器相连.
P3口:利用P3.0,P3.1,P3.2,P3.4,P3.5,P3.6分别与ADC0808的OE,EOC,START/ALE,A,B,C端相连。
XTAL1 ,XTAL2:外接一振荡电路。

图2.1.2 振荡电路

RST:在此端接一复位电路。

图2.1.3 复位电路

2.2 A/D转换器与单片机接口电路
2.2.1.A/D转换器芯片选择
A/D转换器是模拟量输入通道中的一个环节,单片机通过A/D转换器把输入模拟量变成数字量再处理。
随着大规模集成电路的发展,目前不同厂家已经生产出了多种型号的A/D转换器,以满足不同应用场合的需要。如果按照转换原理划分,主要有3种类型,即双积分式A/D转换器、逐次逼近式A/D转换器和并行式A/D转换器。目前最常用的是双积分和逐次逼近式。
双积分式A/D转换器具有抗干扰能力强、转换精度高、价格便宜等优点,比如ICL71XX系列等,它们通常带有自动较零、七段码输出等功能。与双积分相比,逐次逼近式A/D转换的转换速度更快,而且精度更高,比如ADC0808、ADC0809等,它们通常具有8路模拟选通开关及地址译码、锁存电路等,它们可以与单片机系统连接,将数字量送入单片机进行分析和显示。
本设计中,由于对精度没做很大要求,我们采用逐次逼近式A/D转换ADC0808,精度为0.02,所以四位LED显示中的最后一位我们设置为V。

图2.2.1 ADC0808引脚图
2.2.2.A/D转换器ADC0808的管脚说明:
IN0~IN7:为模拟量的输入口,我们选取IN3口为入口,外接可变电阻,通过改变阻值来控制模拟量的输入。
A、B、C:3位地址输入,2个地址输入端的不同组合选择八路模拟量输入。这里我们将A,B接高电平,C为低电平。
ALE:地址锁存启动信号,在ALE的上升沿,将A、B、C上的通道地址锁存到内部的地址锁存器。
D0~D7:八位数据输出线,A/D转换结果由这8根线传送给单片机。
OE:允许输出信号。当OE=1时,即为高电平,允许输出锁存器输出数据。
START:启动信号输入端,START为正脉冲,其上升沿清除ADC0808的内部的各寄存器,其下降沿启动A/D开始转换。
EOC:转换完成信号,当EOC上升为高电平时,表明内部A/D转换已完成。
CLK:时钟输入信号,选用频率500KHZ。

图2.2.2 时钟信号
2.3 电压显示电路:
设计中采用的是4段LED数码管来显示电压值。LED具有耗电低、亮度高、视角大、线路简单、耐震及寿命长等优点,它由4个发光二极管组成,其中3个按‘8’字型排列,另一个发光二极管为圆点形状,位于右下角,常用于显示小数点。把4个发光二极管连在一起,公共端接高电平,叫共阳极接法,相反,公共端接低电平的叫共阴极接法,我们采用共阴极接法。当发光二极管导通时,相应的一段笔画或点就发亮,从而形成不同的发光字符。其8段分别命名为dp g f e d c b a。例如,要显示“0”,则dp g f e d c b a分别为:00111111B;若要显示多个数字,只要让若干个数码管的位码循环为高电平就可以了。
根据设计要求,显示电路需要至少4位LED数码管来显示电压值,我们再多加一位用来显示电压单位“V”,则有7位LED循环显示。利用单片机的I/O口驱动LED数码管的亮灭,设计中由P0口驱动LED的段码显示,即显示字符,由P2口选择LED位码,即选择点
亮哪位LED来显示。

图2.3 LED管
另外,一般I/O接口芯片的驱动能力是很有限的,在LED显示器接口电路中,输出口所能提供的驱动电流一般是不够的尤其是设计中需要用到多位LED,此时就需要增加LED驱动电路。驱动电路有多种,常用的是TTL或MOS集成电路驱动器,在本设计中采用了ADC0808芯片驱动电路。

3.系统程序设计
3.1软件总体框架设计
在编写汇编语言时,先存放数码管的段码,再存放转换后的数据,选取通道并设值.再将AD转换结果转换成BCD码,通过换算LED上显示.
再换算中,利用关系得到LED上个位,十位,百位的显示,然后设置小数点:

开始

预设初值

选取通道3

启动A/D转换





数码显示子程序

延时显示结果

结束

在系统上电开始测量前,要用万用表的电压档对被测电压进行估测,然后再测。

4.系统总图及程序
LED_0 EQU 30H;
LED_1 EQU 31H;
LED_2 EQU 32H;
LED_3 EQU 33H;

ADC EQU 35H;
ST BIT P3.2;
OE BIT P3.0;
EOC BIT P3.1;
ORG 00H;

START: MOV LED_0,#00H;
MOV LED_1,#00H;
MOV LED_2,#00H;
MOV LED_3,#00H;
MOV DPTR,#TABLE;

SETB P3.4;
SETB P3.5;
CLR P3.6;

WAIT: CLR ST;
SETB ST;
CLR ST;
JNB EOC,$;
SETB OE;
MOV ADC,P1;
CLR OE;
MOV A,ADC;
MOV B,#51;
DIV AB;
MOV LED_3,A;
MOV A,B;
MOV B,#5;
DIV AB;
MOV LED_2,A;
MOV LED_1,B;
LCALL DISP;
SJMP WAIT;
DISP: MOV A,#3EH;
CLR P2.3;
MOV P0,A;
LCALL DELAY;
SETB P2.3;

MOV A,LED_1;
MOVC A,@A+DPTR;
CLR P2.2;
MOV P0,A;
LCALL DELAY;
SETB P2.2;

MOV A,LED_2;
MOVC A,@A+DPTR;
CLR P2.1;
MOV P0,A;
LCALL DELAY;
SETB P2.1;

MOV A,LED_3;
MOVC A,@A+DPTR;
ORL A,#80H;
CLR P2.0;
MOV P0,A;
LCALL DELAY;
SETB P2.0;
RET;
DELAY: MOV R6,#10;
D1: MOV R7,#250;
DJNZ R7,$;
DJNZ R6,D1;
RET
TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,
END

数字直流电压表的总图

PIC16f877带10位AD,利用片内AD可以达到1/1024的精度 ,IO驱动能力强,可以直接驱动数码管3个


简单的单片机数字电压表
数字电压表(Digital Voltmeter)简称DVM,它是采用数字化测量技术,把连续的模拟量(直流或交流输入电压)转换成不连续、离散的数字形式并加以显示的仪表。由于数字式仪器具有读数准确方便、精度高、误差小、灵敏度高和分辨率高、测量速度快等特点而倍受青睐。本设计从各个角度分析了由单片机组成的数字电压表的设计过程及各部...

单片机的数字电压表工作原理是什么?
由单片机模数转换器构成基本的直流电压表(200毫伏),相当于机械表的微安级表头,其他量由外部电路其他元件进行变换后测量。

单片机简易数字电压表电子元器清单那些
单片机:这是制作数字电压表的核心元器件,负责控制电压表的运行。液晶显示屏:用于显示电压表测量结果。电阻:用于分压和模拟模数转换。放大器:用于放大微小的电压信号。电压参考源:用于校准电压表的测量精度。开关:用于控制电压表的电源。插座:用于连接电压表测量的电压源。这些电子元器件是制作简易数字...

数字电压表的简介
数字电压表(DigitalVoltmeter)简称DVM,它是采用数字化测量技术,把连续的模拟量转换成不连续、离散的数字形式并加以显示的仪表。传统的指针式电压表功能单一,精度低,读数不方便。不能满足数字化时代的需求,采用单片机的数字电压表,其精度高、抗干扰能力强,可扩展性强、集成方便,还可与PC进行实时通信...

单片机设计制作数字电压表
i. 由于ADC0809在进行转换为相应的数宇量的电路">A\/D转换时需要有CLK信号,而此时的ADC0809的CLK是接在AT89S51单片机的P3.3端口上,也就是要求从P3.3输出CLK信号供ADC0809使用。因此产生CLK信号的方法就得用软件来产生了。ii. 由于ADC0809的参考电压VREF=VCC">CC,所以转换之后的数据要经过数据处理...

单片机毕业设计数字电压表问题。
可能是AD转换器的精度不够,比如说位数只有8位,那么它的精度就会比10位的差一些,这样下来积累起来的误差就会很快显现出来。所以,要想让误差减小,有两个方面的问题需要考虑:1.如果被采集的电压最大值不是很大可以采用精度差一些的AD转换器;2.如果被采集的电压最大值不是很大可以采用精度差一些的AD...

单片机 数字电压表设计
(1),用放大镜放大即可。实际得到的值为0-5V。显示的时候你乘个合适的倍数即可放大。当然,步进也会放大的。精度减少了。(2)。设定一个值。用if语句把得到的值和设定值进行判断即可。

毕设:基于单片机的数字电压表的设计
在四位LED数码管上轮流显示或者选择显示被测电压的有效值这个应该比较容易,只要AD来过的数据根据采样比例转换出来,并显示就可以了。如果使用F2012的话,由于IO比较少,可以使用BCD码的显示芯片,这样可以节省IO。数据上传功能可以使用上位机来实现,最常用的方法是串口通读取,当然单片机的IO口足够时也可以...

求基于单片机的数字电压表C51程序
\/\/晶振:11.0592MHz,定时器T0每50ms中断一次,每隔0.1秒读ADC一次 \/* AD转换器使用 TLC549 p1.0-Clock p1.1-Data out p1.2-CS \/ include "reg51.h"include "intrins.h"include "math.h"sbit ad_clk=P1^0;sbit ad_dout=P1^1;sbit ad_cs=P1^2;unsigned char data re_data;unsig...

基于51单片机的数字电压表总结与体会
通过与同学的讨论与认真计算设计分析所完成的,课程设计的任务是设计、组装并调试一个数字电压表测量系统。需要我们综合运用单片机等课程的知识,通过查阅资料、方案论证与选定;设计和选取电路和元器件;分析指标及讨论,完成设计任务。在这次课程设计中,我学会了怎样去根据课题的要求去设计电路和调试电路。动...

邛崃市13118875098: 利用单片机开发板上做一个电压表 -
全牲开博: 硬件上: 外部电压直接接到0804的Ain上,0804的其余外围电路网上有现成的.然后0804的并行输出端接的51单片机的哪个并行口你要查电路板原理图.数据流通原理:单片机通过P0口先设置ADC0804的工作模式,之后ADC0804开始工作,...

邛崃市13118875098: 单片机(型号89C52)之简易数字电压表的设计 -
全牲开博: 数字电压表...

邛崃市13118875098: 单片机数字电压表(0~5V)的设计程序 -
全牲开博: 程序:#include<reg51.h> #define uchar unsigned char #define uint unsigned int sbit START=P3^0; sbit OE=P3^1; sbit EOC=P3^2; bit Flag; uchar data led[4]; uint data tvdata; uchar code tv[]={0xfe,0xfd,0xfb,0xf7}; uchar code a[]={0x3f,0x06,0x5b,0x...

邛崃市13118875098: 单片机(型号89C52)之简易数字电压表的设计 -
全牲开博: ///暂存转换结果 CLR OE ;/,R5 DA A ,A LCALL DISP ;///这个是最基本的,R4 DA A MOV R4;/存放转换后的数据,A MOV R5;数码管字形码表//,LED_1 MOVC A;/延时子程序//// ORG 0000H AJMP START ORG 0030H;/################...

邛崃市13118875098: 基于STC12C5A60S2单片机来设计一个简易数字电压表,但是它自身带有的A/D转换模块不用,用 -
全牲开博: 可能是ad转换器的精度不够,比如说位数只有8位,那么它的精度就会比10位的差一些,这样下来积累起来的误差就会很快显现出来.所以,要想让误差减小,有两个方面的问题需要考虑:1.如果被采集的电压最大值不是很大可以采用精度差一些的ad转换器;2.如果被采集的电压最大值不是很大可以采用精度差一些的ad转换器;另外还可以从软件上对这些数据进行纠正,因为事先可以对数据进行预测.

邛崃市13118875098: 简易数字电压表的设计 -
全牲开博: 你这个用单片机和ADC0809的方案本身就不简便,应该用专门为电压表设计的通用器件7107、7117、7135来实现,什么程序都不需要编制,只要外接一支基准二极管、几支电阻和电容、一支电位器即可实现对电压的测量、AD转换、码制转换和显示驱动等所有功能.

邛崃市13118875098: 数字式电压表设计
全牲开博: 利用单片机AT89S51与ADC0809设计一个数字电压表,能够测量0-5V之间的直流电压值,四位数码显示,但要求使用的元器件数目最少. 2. 电路原理图 系统板上硬件连线 a) 把“单片机系统”区域中的P1.0-P1.7与“动态数码显示”区域中的...

邛崃市13118875098: 基于51单片机的简易电压表 要求:1.基本的0~5伏电压测量 2.数据处理 求各位大神指导,需要什么元件?? -
全牲开博: 需要一块ad,和显示部分 过程是将0~5信号输入给单片机,然后单片机计算,显示如果你的开发板上没有ad和显示部分的话,建议你用adc0809 和数码管 这2个都是给初学者的希望可以帮到你,谢谢

邛崃市13118875098: 数字电压表的程序设计,谁有啊?说下,谢谢
全牲开博: 一、设计题目 数字式电压表设计. 二、设计任务 数字式电压表是电压测量的常用仪表,本课题即要求应用单片机、A/D转换器及其他器件组成数字式电压检测仪表. 三、设计要求 1、基本要求 (1)以MCS-51系列单片机为核心器件,组成一个...

邛崃市13118875098: 单片机 数字电压表设计 -
全牲开博: (1),用放大镜放大即可.实际得到的值为0-5V.显示的时候你乘个合适的倍数即可放大.当然,步进也会放大的.精度减少了.(2).设定一个值.用if语句把得到的值和设定值进行判断即可.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网