使用8051微控制器的数字电压表的实现方法

2024-01-11  

数字电压表是一种测量电信号电压的电子仪器。它用于各种应用,包括电子、电力系统和自动化领域。在本文中,我们将讨论使用8051微控制器的数字电压表的实现。

8051微控制器是一种广泛使用的微控制器,适用于各种应用。它具有 4KB 片上 ROM、128 字节片上 RAM、32 个 I/O 引脚和一个 16位定时器。微控制器可以用汇编语言或高级语言(如C)进行编程。


该微控制器具有多种特性,非常适合用作数字电压表,例如内置ADC(模数转换器)和8位定时器。

所需组件

要使用 8051 微控制器构建数字电压表,我们需要以下组件:

8051微控制器(AT89C51)。

LCD 显示屏 –(7 段 4 位)。

模数转换器(ADC0804 IC)。

电压传感器(25V)。

电池或直流适配器。

微控制器编程板。

晶体振荡器 = 12MHz。

3 个电阻数 = 10kΩ。

4 个电容器 = 2 个 33pF,1 个 150pF,第四个为 10μF/16V。

电路图

1.png

电路概述:

使用8051微控制器的数字电压表电路由多个组件组成,例如8051微控制器、LCD显示器、分压器网络和一些其他无源组件。分压器网络用于将电压降低到微控制器可以读取的水平。

分压器电路(ADC0804 IC)

分压器电路用于将输入信号的ADC范围增加到25V或将输入电压降压到安全水平,这可以通过微控制器进行测量。电位器用于调节电压表的电压范围。ADC用于将模拟电压信号转换为数字信号,并可显示在LCD显示屏上。

分压器电路由两个电阻R1和R2组成,串联连接。输入电压施加在R1和R2的串联组合上,输出电压施加在R2上。R2与(R1+R2)之比决定了输出电压。我们可以通过改变R1和R2的值来调整输出电压范围。

ADC通过将输入电压与基准电压进行比较,将模拟电压信号转换为数字信号。ADC的分辨率取决于转换器中使用的位数。例如,8位ADC可以测量0-5V的电压范围,每步分辨率为19.53
mV。

数字电压表的软件是用汇编语言或C语言编写的。该软件从ADC读取电压信号,将其转换为数字值,并将其显示在LCD显示屏上。该软件还可以编程以实现其他功能,例如峰值电压测量、电压平均和电压记录。

总而言之,使用8051微控制器的数字电压表是一种简单且经济高效的解决方案,用于测量各种应用中的电压信号。它需要一个分压器电路、一个ADC、一个电位计和一个LCD显示器。微控制器可以用汇编语言或C语言进行编程,以实现其他功能。

电路工作:

分压器网络由两个串联电阻组成。其中一个电阻器是电位计,可以调节以校准电压表。分压器网络的输出连接到微控制器的模拟输入引脚。微控制器使用其内置ADC将模拟电压转换为数字值。

然后,数字值显示在LCD显示屏上。LCD显示屏通过数字接口连接到微控制器。微控制器将数字值发送到LCD显示屏,然后LCD显示屏以可读格式显示。

微控制器的编程包括初始化ADC,读取模拟电压,将其转换为数字值,然后将其发送到LCD显示器。微控制器持续读取电压并更新显示。

如何为数字电压表编程微控制器AT89C51?

上述过程概述了测试已编程和构建的电路的步骤(电路图和项目代码如下所述)。以下是比较和更详细解释的步骤:

将程序刻录到 AT89C51 微控制器:此步骤涉及使用程序员将编译的程序代码传输到微控制器。程序代码通常用编程语言(如 C
或汇编语言)编写。程序代码包含微控制器为执行所需功能而执行的指令。

连接电路:将程序刻录到微控制器上后,可以使用电路图作为指导组装电路。该电路包括at89c51微控制器、电压传感器和显示元件。应小心连接,以确保电路接线正确且所有组件均正确供电。

连接电压源:电压源连接到电压传感器的输入端。确保最大模拟输入电压小于25V DC以防止损坏电路非常重要。

连接数字万用表:数字万用表连接到电压传感器的输入端子。万用表用于验证LCD和万用表上显示的电压读数是否相同或非常相似。

打开电路板电源:电路的电源已打开。这为微控制器和电路的其他组件提供电源。

观察显示:LCD和数字万用表显示器应显示相同或非常相似的电压读数。这表明电压表工作正常。

改变输入电压:如果可能,可以缓慢改变输入电压,以验证电压表是否继续显示准确的读数。

关闭电路板电源:关闭电路的电源以关闭组件的电源。
编程代码:

#include

#define lcd P3

#define dat P2

sbit rs=P1^6;

sbit e=P1^7;


void delay (int);

void display (unsigned char);

void cmd (unsigned char);

void init (void);

void string (char *);

void intro (void);

char i=0;


void delay (int d)

{

unsigned char i=0;

for(;d >0;d--)

{

for(i=250;i >0;i--);

for(i=248;i >0;i--);

}

}

void cmd (unsigned char c)

{

lcd=c;

rs=0;

e=1;

delay(10);

e=0;

}

void display (unsigned char c)

{

lcd=c;

rs=1;

e=1;

delay(10);

e=0;

}

void string (char *c)

{

while(*c)

{

display(*c++);

}

}

void init (void)

{

cmd(0x38);

cmd(0x01);

cmd(0x0c);

cmd(0x80);

}

void intro (void)

{

string(" Electronics ");

cmd(0xc0);

string(" Hub ");

delay(2000);

cmd(0x01);

string(" Digital ");

cmd(0xc0);

string(" Voltmeter ");

delay(2000);

cmd(0x01);

cmd(0x80);

}


void main()

{

unsigned int temp=0;

unsigned int temp1=0;

float val=0.0;


init();

intro();

dat=0xff;

while(1)

{

if(i==0)

{

string(" Volts - ");

i++;

}

val=dat*0.02; // 0.02 is resolution of adc

val=val/0.2; // 0.2 is nothing but (R2/(R1+R2)) resistor values in the voltage sensor

cmd(0x89);

if((val >=1.0) && (val< 10.0)) { display(' '); temp=val*1000; temp1=((temp/1000)+48); display(temp1); display('.'); temp1=(((temp/100)%10)+48); display(temp1); } else if((val >=10.0) && (val< 100.0))

{

temp=val*100;

temp1=((temp/1000)+48);

display(temp1);


temp1=(((temp/100)%10)+48);

display(temp1);


display('.');


temp1=(((temp/10)%10)+48);

display(temp1);

}

else

{

display(' ');

string("0.0");

}

delay(1000);

}

while(1);

}


使用8051微控制器的数字电压表的优点:

1.数字电压表比模拟电压表更准确,更精密。

  1. 微控制器可以编程为执行除测量电压之外的其他任务。

3.数字显示易于阅读和解释。

4.电路简单,建造成本低廉。

5.电压表可以使用电池供电,便于携带,易于现场使用。

局限性

该电路只能用于测量低压应用(高达25V)。

模拟电压的输入信号应在0V至5V之间。

该系统在任何给定时间只能测量单个模拟输入值。


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。