專注差異化嵌入式產(chǎn)品解決方案 給智能產(chǎn)品定制注入靈魂給予生命
提供開發(fā)工具、應(yīng)用測試 完善的開發(fā)代碼案例庫分享
從全面的產(chǎn)品導(dǎo)入到強(qiáng)大技術(shù)支援服務(wù) 全程貼心伴隨服務(wù),創(chuàng)造無限潛能!
在現(xiàn)實生活中,我們經(jīng)常使用到電器產(chǎn)品,電磁爐、微波爐、熱水壺、冰箱等等。為了安全性,使用8051單片機(jī)的電壓表測量的電壓為0V至25V。所以,輸入電壓為直流電壓,在LCD上也能獲得準(zhǔn)確、穩(wěn)定的輸出。如果你施加交流電壓作為輸入,則隨著交流電壓的不斷變化,LCD上將顯示的數(shù)字并不是穩(wěn)定的,這也是市電的常見狀態(tài)。
該方案的主要組件是8051單片機(jī),電壓傳感器模塊和IC ADC0804。在這個方案中,我們使用模擬到數(shù)字的轉(zhuǎn)換過程中顯示的電壓。
一、數(shù)字電壓表模數(shù)轉(zhuǎn)換原理圖
此處,ADCIC根據(jù)輸入電壓生成輸出數(shù)字值。8051單片機(jī)讀取該數(shù)字值并將其顯示在LCD上。
1.傳感器:傳感器或傳感器用于將物理量轉(zhuǎn)換為電能。光相關(guān)電阻器,溫度傳感器,濕度傳感器,氣體傳感器等是換能器的例子。
2.ADC(模數(shù)轉(zhuǎn)換器):ADC將輸入電壓轉(zhuǎn)換為數(shù)字值。
3.數(shù)字系統(tǒng):該系統(tǒng)讀取輸入的數(shù)字?jǐn)?shù)據(jù)并在LCD上顯示物理量以供理解。
二、使用8051單片機(jī)的數(shù)字電壓表電路圖
三、使用8051單片機(jī)數(shù)字電壓表所需電路元件
(1)AT89C51單片機(jī);
(2)ADC0804集成電路;
(3)25V電壓傳感器(如下圖);
(4)AT89C51編程板;
(5)可變電阻;
(6)直流適配器或電池。
四、使用8051單片機(jī)的數(shù)字電壓表電路設(shè)計
在上述電路中,模數(shù)轉(zhuǎn)換器IC數(shù)據(jù)位連接到PORT2。LCD數(shù)據(jù)引腳連接到控制器的POTR3,控制引腳RS和EN分別連接到P1.6和P1.7。
什么是ADC0804?
ADC0804是一個8位模數(shù)轉(zhuǎn)換器。該IC使用逐次逼近法將模擬值轉(zhuǎn)換為數(shù)字。它只能接受一個模擬數(shù)據(jù)作為輸入。該IC的步長大小通過改變引腳9上的參考電壓來改變。如果未連接此引腳,則VCC將作為參考電壓。
對于每19.53mV的輸入電壓,當(dāng)步長為5V時,輸出將增加1值。該IC的轉(zhuǎn)換時間取決于時鐘源。
ADC功能:(1)0至5V模擬輸入電壓;(2)內(nèi)置時鐘發(fā)生器;(3)差分模擬輸入;(4)可調(diào)參考電壓。
五、8051單片機(jī)的數(shù)字電壓表源代碼
#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>
以上就是英銳恩單片機(jī)開發(fā)工程師分享的使用8051單片機(jī)制作的數(shù)字電壓表。