当前位置:首页 » 编程软件 » 电压表编程

电压表编程

发布时间: 2022-05-27 09:38:38

A. 怎样用单片机设计多路数字电压表

单片机设计多路数字电压表,主要是设计采集,将输入的电压量(模拟信号)转换成数字量(二进制),通常老的方案都是用51单片机+AD转换芯片。AD转换芯片的位数就决定了你的分辨率,你的是5V/0.019=263,转换成为二进制数8位AD芯片可能精度不够,要选用10位AD芯片,最小分辨率可以达到0.0048V,如果按照经典老方案来做,你的成本会比较高51单片机6元+10位AD芯片20元。建议你采用带有51内核并自带AD功能的单片机,如STC5412AD,价格只要13-14元就可以了,而且编程方便,不需要增加外围电路。因为STC5412AD芯片IO口比较少,只有23个IO口,我数码管显示和键盘扫描用的ZLG7289,我自己做出来一个,效果很好,电压能精确到0.001V显示。我只了1路显示,STC5412AD单片机还有其他AD口可以用,一块芯片可以做出4路电压采集来。多路的话建议用多路开关进行切换就好了,否则成本太高。

B. 数字电压表设计论文

基于PC的数字电压表设计
本文运用AT89S51和AD678进行A/D转换,根据数据采集的工作原理,设计实现数字电压表,最后完成单片机与PC的数据通信,传送所测量的电压值
数字电压表的设计和开发,已经有多种类型和款式。传统的数字电压表各有特点,它们适合在现场做手工测量,要完成远程测量并要对测量数据做进一步分析处理,传统数字电压表是无法完成的。然而基于PC通信的数字电压表,既可以完成测量数据的传递,又可借助PC,做测量数据的处理。所以这种类型的数字电压表无论在功能和实际应用上,都具有传统数字电压表无法比拟的特点,这使得它的开发和应用具有良好的前景。

新型数字电压表的整机设计

该新型数字电压表测量电压类型是直流,测量范围是-5~+5V。整机电路包括:数据采集电路的单片机最小化设计、单片机与PC接口电路、单片机时钟电路、复位电路等。下位机采用AT89S51芯片,A/D转换采用AD678芯片。通过RS232串行口与PC进行通信,传送所测量的直流电压数据。整机系统电路如图1所示。

数据采集电路的原理
在单片机数据采集电路的设计中,做到了电路设计的最小化,即没用任何附加逻辑器件做接口电路,实现了单片机对AD678转换芯片的操作。
AD678是一种高档的、多功能的12位ADC,由于其内部自带有采样保持器、高精度参考电源、内部时钟和三态缓冲数据输出等部件,所以只需要很少的外部元件就可以构成完整的数据采集系统,而且一次A/D转换仅需要5ms。

在电路应用中,AD678采用同步工作方式,12位数字量输出采用8位操作模式,即12位转换数字量采用两次读取的方式,先读取其高8位,再读取其低4位。根据时序关系,在芯片选择/CS=0时,转换端/SC由高到低变化一次,即可启动A/D转换一次。再查询转换结束端/EOC,看转换是否已经结束,若结束则使输出使能/OE变低,输出有效。12位数字量的读取则要控制高字节有效端/HBE,先读取高字节,再读取低字节。整个A/D操作大致如此,在实际开发应用中调整。
由于电路中采用AD678的双极性输入方式,输入电压范围是-5~+5V,根据公式Vx10(V)/4096*Dx,即可计算出所测电压Vx值的大小。式中Dx为被测直流电压转换后的12位数字量值。

RS232接口电路的设计
AT89S51与PC的接口电路采用芯片Max232。Max232是德州仪器公司(TI)推出的一款兼容RS232标准的芯片。该器件包含2个驱动器、2个接收器和1个电压发生器电路提供TIA/EIA-232-F电平。Max232芯片起电平转换的功能,使单片机的TTL电平与PC的RS232电平达到匹配。
串口通信的RS232接口采用9针串口DB9,串口传输数据只要有接收数据针脚和发送针脚就能实现:同一个串口的接收脚和发送脚直接用线相连,两个串口相连或一个串口和多个串口相连。在实验中,用定时器T1作波特率发生器,其计数初值X按以下公式计算:

串行通信波特率设置为1200b/s,而SMOD=1,fosc=6MHz,计算得到计数初值X=0f3H。在编程中将其装入TL1和THl中即可。
为了便于观察,当每次测量电压采集数据时,单片机有端口输出时,用发光二极管LED指示。

软件编程
软件程序主要包括:下位机数据采集程序、上位机可视化界面程序、单片机与PC串口通信程序。单片机采用C51语言编程,上位机的操作显示界面采用VC++6.0进行可视化编程。在串口通信调试过程中,借助“串口调试助手”工具,有效利用这个工具为整个系统提高效率。
单片机编程
下位机单片机的数据采集通信主程序流程如图2所示、中断子程序如图3所示、采集子程序如图4所示。单片机的编程仿真调试借助WAVE2000仿真器,本系统有集成的ISP仿真调试环境。

在采集程序中,单片机的编程操作要完全符合AD678的时序规范要求,在实际开发中,要不断加以调试。最后将下位机调试成功而生成的.bin文件固化到AT89S51的Flash单元中。

人机界面编程
打开VC++6.0,建立一个基于对话框的MFC应用程序,串口通信采用MSComm控件来实现。其他操作此处不赘述,编程实现一个良好的人机界面。数字直流电压表的操作界面如图5所示。运行VC++6.0编程实现的Windows程序,整个样机功能得以实现。

功能结果
根据上面所述工作原理及实施方案,在实践中很好地实现了整个样机的功能,各项指标达到了预先的设计要求。电路工作稳定,每次测量均伴有LED发光指示,可视化界面显示也正常。
AD678转换精度是12位,它的分辨率为1/4096。这为整机系统的高精度提供了保障。为了提高测量精度,运用了AD678自带的校准电路,这样使其A/D转换精度更高。在实际测量中,整机测量精度达到了0.8%。

C. 数字电压表 一、 要求:以单片机为核心,设计一个数字电压表

单片机为控制器,采用中断方式,对2路0~5V的模拟电压进行?
更好被了

D. 数字电压表电路怎么设计啊

摘 要:
本文介绍了用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

数字直流电压表的总图

E. 数字电压表软件编程,需要测0~5V,误差怎么改

有个基准采样电压。把那个弄准确了。。。一般就不会错了。。。

F. 单片机at89s51和adc0809设计一个数字电压表,能够测量0~5v 的直流电压,三位数码显示,要求使用元件尽量

转载:数字电压表程序,
用数字滤波的方式,并在LCD 1602上显示
//////////////////////////////////////////////////
// Author : Toby
// Date : 2009/03/08
// Function : 数字电压表程序,用数字滤波的方式,并在LCD 1602上显示
// MCU : PIC16F877A
// C Compiler : PICC 8.05
// IDE : MPLAB IDE v8.10
/////////////////////////////////////////////////
__CONFIG(0x1832);
//芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡
union adres //定义一个共用体,用于存放10位A/D转换的结果
{int y1;
unsigned char adre[2];
}adresult;
unsigned int ADC=0;
void adinitial_voltage(void); // RA0为AD输入
const char TABLE[]={'0','1','2','3','4','5','6','7','8','9'}; //定义常数0-9的数据表格
const char data[4]={'0','0','0','0'};
#define rs RA1
#define rw RA2
#define e RA3
const char voltage[ ]={'V','O','L','T','A','G','E','='};
unsigned char ge=0,shi=0,=0,qian=0; //定义6个临时变量
void init(); //申明I/O口初始化函数
void lcd_init(); //申明LCD初始化函数
void lcd_dis();
void write_voltage();
void write(char x); //申明显示1字节数据函数
void lcd_enable(); //申明LCD显示设置函数
void delay(); //申明延时函数
//---------------------------------------
//主函数
void main()
{
unsigned char a;
init(); //调用I/O口初始化函数
while(1)
{
adinitial_voltage();
lcd_init(); //调用LCD初始化函数
for(a=10;a>=1;a--)
{
PORTD=0X80;
lcd_enable();
write_voltage();
PORTD=TABLE[qian]; //待显示数据送PORTD口
lcd_dis();

PORTD='.'; //待显示数据送PORTD口
lcd_dis();
PORTD=TABLE[]; //待显示数据送PORTD口
lcd_dis();

PORTD=TABLE[shi]; //待显示数据送PORTD口
lcd_dis();

PORTD=TABLE[ge]; //待显示数据送PORTD口
lcd_dis();
}

}
}

//---------------------------------------
//I/O口初始化函数
void init()
{
ADCON1=0X0; //设置A口为普通I/O口
TRISA=0B00000001; //设置A口为输出
TRISD=0X00; //设置D口为输出
}
//---------------------------------------
//LCD初始化函数
void lcd_init()
{
PORTD=0X1; //清除显示
lcd_enable();
PORTD=0X38; //8位2行5*7点阵
lcd_enable();
PORTD=0X0c; //显示开,光标开,闪烁
lcd_enable();
PORTD=0X06; //文字不动,光标右移
lcd_enable();
}
//--------------------------------------
//显示公司tel函数
void write_voltage()
{
unsigned char i;
for(i=0;i<=7;i++) //一共显示16字节数据
{
write(voltage[i]); //查表获取数据并调用写一个字节数据函数送LCD显示
}
}

//--------------------------------------
//写一个字节数据函数
void write(char x)
{
PORTD=x; //待显示数据送PORTD口
lcd_dis();
}
//--------------------------------------
//LCD显示设置函数
void lcd_enable()
{
rs=0; //该字节数据为命令,而不是数据 RS=1数据RS=0命令
rw=0; //此次操作为写,而不是读 RW=1读RW=0写
e=0; //拉低使能信号
delay(); //保持使能信号为低一段时间
e=1; //拉高使能信号,建立LCD操作所需要的上升沿
}
void lcd_dis()
{
rs=1; //该字节数据为命令,而不是数据 RS=1数据RS=0命令
rw=0; //此次操作为写,而不是读 RW=1读RW=0写
e=0; //拉低使能信号
delay(); //保持使能信号为低一段时间
e=1; //拉高使能信号,建立LCD操作所需要的上升沿
}

//延时函数
void delay()
{
int i;
for(i=0;i<50;i++);
}

void adinitial_voltage(void) // RA0为AD输入
{
unsigned int AD_data[5]={0,0,0,0,0},j=0,temp=0;
for(j=0;j<=4;++j)
{
ADCON0=0B01000001; //A/D 转换器模块工作;但AD转换不进行;FOSC/8
ADCON1=0B11101110; //ADRESH 寄存器的高6 位读为0;6位与7位须置1
ADGO=1;
while(ADGO); //等AD转换完成
adresult.adre[0]=ADRESL;
adresult.adre[1]=ADRESH; //读取并存储A/D转换结果
AD_data[j]=adresult.y1;

}
for(j=0;j<=4;++j)
if(AD_data[j]>AD_data[j+1])
{temp=AD_data[j];AD_data[j]=AD_data[j+1];AD_data[j+1]=temp;} //找出最大的数,
for(j=0;j<=3;++j)
if(AD_data[j]<AD_data[j+1])
{temp=AD_data[j];AD_data[j]=AD_data[j+1];AD_data[j+1]=temp;} //找出最小数
ADC=((AD_data[0]+AD_data[1]+AD_data[2])/3)/213.20008328128253175098896523006*1000; //中间数作平均

qian=ADC/1000;
=ADC%1000/100;
shi=ADC%100/10;
ge=ADC%10;
}

G. 用51单片机制作电压表怎么编程

AD574全12位转换读数据函数:

http://blog.21ic.com/user1/3074/archives/2008/53881.html
希望能解决您的问题。

H. 使用icl7106/7做电压表用不用编程

icl7106/7是3位半的A/D转换芯片,7106用单电源9V,显示用液晶(LED),7107用正负5V双电源工作,显示用LED。标准电路,内部时序都已固定好了。不用编程,按标准电路外围器件连接好就能应用。

I. 求单片机高手,编程序实现下图(两路数字电压表),四位数码管轮流显示两路电压,最左边一位显示通道数

我来试试,照你的图画好了,正在编程序……

热点内容
java返回this 发布:2025-10-20 08:28:16 浏览:705
制作脚本网站 发布:2025-10-20 08:17:34 浏览:968
python中的init方法 发布:2025-10-20 08:17:33 浏览:676
图案密码什么意思 发布:2025-10-20 08:16:56 浏览:828
怎么清理微信视频缓存 发布:2025-10-20 08:12:37 浏览:737
c语言编译器怎么看执行过程 发布:2025-10-20 08:00:32 浏览:1076
邮箱如何填写发信服务器 发布:2025-10-20 07:45:27 浏览:308
shell脚本入门案例 发布:2025-10-20 07:44:45 浏览:188
怎么上传照片浏览上传 发布:2025-10-20 07:44:03 浏览:875
python股票数据获取 发布:2025-10-20 07:39:44 浏览:829