使用8051微控制器的数字电压表的实现方法
2024-01-11 来源:elecfans
数字电压表是一种测量电信号电压的电子仪器。它用于各种应用,包括电子、电力系统和自动化领域。在本文中,我们将讨论使用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。
电路图
电路概述:
使用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.数字电压表比模拟电压表更准确,更精密。
微控制器可以编程为执行除测量电压之外的其他任务。
3.数字显示易于阅读和解释。
4.电路简单,建造成本低廉。
5.电压表可以使用电池供电,便于携带,易于现场使用。
局限性
该电路只能用于测量低压应用(高达25V)。
模拟电压的输入信号应在0V至5V之间。
该系统在任何给定时间只能测量单个模拟输入值。