在現實生活中,我們經常使用到電器產品,電磁爐、微波爐、熱水壺、冰箱等等。為了安全性,使用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單片機制作的數字電壓表。