在现实生活中,我们经常使用到电器产品,电磁炉、微波炉、热水壶、冰箱等等。为了安全性,使用8051单片机的电压表测量的电压为0V至25V。所以,输入电压为直流电压,在LCD上也能获得准确、稳定的输出。如果你施加交流电压作为输入,则随着交流电压的不断变化,LCD上将显示的数字并不是稳定的,这也是市电的常见状态。
该方案的主要组件是8051单片机,电压传感器模块和IC ADC0804。在这个方案中,我们使用模拟到数字的转换过程中显示的电压。
一、数字电压表模数转换原理图
此处,ADCIC根据输入电压生成输出数字值。8051单片机读取该数字值并将其显示在LCD上。
1.传感器:传感器或传感器用于将物理量转换为电能。光相关电阻器,温度传感器,湿度传感器,气体传感器等是换能器的例子。
2.ADC(模数转换器):ADC将输入电压转换为数字值。
3.数字系统:该系统读取输入的数字数据并在LCD上显示物理量以供理解。
二、使用8051单片机的数字电压表电路图
三、使用8051单片机数字电压表所需电路元件
(1)AT89C51单片机;
(2)ADC0804集成电路;
(3)25V电压传感器(如下图);
(4)AT89C51编程板;
(5)可变电阻;
(6)直流适配器或电池。
四、使用8051单片机的数字电压表电路设计
在上述电路中,模数转换器IC数据位连接到PORT2。LCD数据引脚连接到控制器的POTR3,控制引脚RS和EN分别连接到P1.6和P1.7。
什么是ADC0804?
ADC0804是一个8位模数转换器。该IC使用逐次逼近法将模拟值转换为数字。它只能接受一个模拟数据作为输入。该IC的步长大小通过改变引脚9上的参考电压来改变。如果未连接此引脚,则VCC将作为参考电压。
对于每19.53mV的输入电压,当步长为5V时,输出将增加1值。该IC的转换时间取决于时钟源。
ADC功能:(1)0至5V模拟输入电压;(2)内置时钟发生器;(3)差分模拟输入;(4)可调参考电压。
五、8051单片机的数字电压表源代码
#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); }#include<reg51.h>
以上就是英锐恩单片机开发工程师分享的使用8051单片机制作的数字电压表。