導航:首頁 > 操作系統 > 51單片機數字電壓表

51單片機數字電壓表

發布時間:2023-09-24 16:46:30

A. 利用單片機AT89C51與ADC0808設計一個數字電壓表,能夠測量0~5V的直流電壓值,精度越高越好

本文介紹了用ADC0808集成電壓轉換晶元和AT89C51單片機設計製作的數字直流電壓表。在測量儀器中,電壓表是必須的,而且電壓表的好壞直接影響到測量精度。具有一個精度高、轉換速度快、性能穩定的電壓表才能符合測量的要求。為此,我們設計了數字電壓表,此作品主要由A/D0808轉換器和單片機AT89C51構成,A/D轉換器在單片機的控制下完成對模擬信號的採集和轉換功能,最後由數碼管顯示採集的電壓值。此設計通過調試完全滿足設計的指標要求。電路設計簡單,設計製作方便有較強的實用性。
關鍵詞:
ADC0808;單片機AT89C51;數字電壓表
Abstract:
In this paper, with ADC0808 voltage converter integrated chips and microcontroller designed AT89C51 the number of DC voltage table. In measuring instruments, voltage meter is necessary, and voltage meter will have a direct impact on measurement accuracy. With a high precision, the conversion speed and stable performance of the voltage meter to conform to the requirements of measurement. To this end, we design a digital voltage meter, this works mainly by A/D0808 converter and a microcontroller AT89C51, A / D converter under the control of the MCU to complete the acquisition and analog signal conversion functions, from the final Acquisition of the digital display voltage value. This design through debugging to fully meet the design requirements of the target. Circuit design simple, designed to facilitate a more practical.
Key words:
ADC0808; SCM AT89C51; Digital Voltmeter
目 錄
1.設計方案……………………………………………………………………………………1
2. 系統硬體設計……………………………………………………………………………2
2.1單片機晶元……………………………………………………………………………2
2.1.1.單片機晶元選擇……………………………………………………………2
2.1.2.單片機管腳說明……………………………………………………………3
2.2.A/D轉換器……………………………………………………………………………5
2.2.1.A/D轉換器晶元選擇………………………………………………………5
2.2.2.A/D轉換器管腳說明………………………………………………………6
2.3.電壓顯示電路…………………………………………………………………………7
3.系統程序設計……………………………………………………………………………………8
3.1.軟體總體框架設計……………………………………………………………………8
4.系統總圖及程序…………………………………………………………………………………9
5.參考文獻………………………………………………………………………………………………12
6.結束語……………………………………………………………………………………………………13
1.設計方案
在電量的測量中,電壓、電流和頻率是最基本的三個被測量,其中電壓量的測量最為經常。而且隨著電子技術的發展,更是經常需要測量高精度的電壓,所以數字電壓表就成為一種必不可少的測量儀器。數字電壓表(Digital Voltmeter)簡稱DVM,它是採用數字化測量技術,把連續的模擬量(直流或交流輸入電壓)轉換成不連續、離散的數字形式並加以顯示的儀表。由於數字式儀器具有讀數准確方便、精度高、誤差小、靈敏度高和解析度高、測量速度快等特點而倍受青睞。本設計從各個角度分析了由單片機組成的數字電壓表的設計過程及各部分電路的組成及其原理,並且分析了程序如何驅動單片機進而使系統運行起來的原理及方法。框圖如下:
本設計主要分為兩部分:硬體電路及軟體程序。而硬體電路又大體可分為A/D轉換電路、LED顯示電路,各部分電路的設計及原理將會在硬體電路設計部分詳細介紹;程序的設計使用匯編語言編程,利用WAVE和PROTEUS 軟體對其編譯和模擬,詳細的設計演算法將會在程序設計部分詳細介紹。
2.系統硬體電路設計
2.1 單片機晶元
2.1.1.單片機晶元選擇
AT89C51簡介
AT89C51是一種帶4K位元組閃爍可編程可擦除只讀存儲器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低電壓,高性能CMOS8位微處理器,俗稱單片機。由於將多功能8位CPU和閃爍存儲器組合在單個晶元中,ATMEL的AT89C51是一種高效微控制器,AT89C2051是它的一種精簡版本。AT89C單片機為很多嵌入式控制系統提供了一種靈活性高且價廉的方案。外形及引腳排列如圖所示
圖2.1_1 AT89C51引腳圖
2.1.2.單片機管腳說明
主要特性:
?與MCS-51 兼容
?4K位元組可編程閃爍存儲器
?壽命:1000寫/擦循環
?數據保留時間:10年
?全靜態工作:0Hz-24Hz
?三級程序存儲器鎖定
?128×8位內部RAM
?32可編程I/O線
?兩個16位定時器/計數器
?5個中斷源
?可編程串列通道
?低功耗的閑置和掉電模式
?片內振盪器和時鍾電路
管腳接法說明:
VCC:供電電壓我們接+5V。
GND:接地。
P0口:在這個設計中我們將AT89C51做為BCD碼的輸出口與LED顯示器相連。由於P0口輸出驅動電路中沒有上拉電阻,所以我們在外接電路上接上拉電阻。
P1口:把AT89C51中的P1口與ADC0808的輸出端相連,做為數字信號的接收端。
P2口:我們把P2口做為位碼輸出口,以P2.0—2.3輸出位控線與LED顯示器相連.
P3口:利用P3.0,P3.1,P3.2,P3.4,P3.5,P3.6分別與ADC0808的OE,EOC,START/ALE,A,B,C端相連。
XTAL1 ,XTAL2:外接一振盪電路。
圖2.1.2 振盪電路
RST:在此端接一復位電路。
圖2.1.3 復位電路
2.2 A/D轉換器與單片機介面電路
2.2.1.A/D轉換器晶元選擇
A/D轉換器是模擬量輸入通道中的一個環節,單片機通過A/D轉換器把輸入模擬量變成數字量再處理。
隨著大規模集成電路的發展,目前不同廠家已經生產出了多種型號的A/D轉換器,以滿足不同應用場合的需要。如果按照轉換原理劃分,主要有3種類型,即雙積分式A/D轉換器、逐次逼近式A/D轉換器和並行式A/D轉換器。目前最常用的是雙積分和逐次逼近式。
雙積分式A/D轉換器具有抗干擾能力強、轉換精度高、價格便宜等優點,比如ICL71XX系列等,它們通常帶有自動較零、七段碼輸出等功能。與雙積分相比,逐次逼近式A/D轉換的轉換速度更快,而且精度更高,比如ADC0808、ADC0809等,它們通常具有8路模擬選通開關及地址解碼、鎖存電路等,它們可以與單片機系統連接,將數字量送入單片機進行分析和顯示。
本設計中,由於對精度沒做很大要求,我們採用逐次逼近式A/D轉換ADC0808,精度為0.02,所以四位LED顯示中的最後一位我們設置為V。
圖2.2.1 ADC0808引腳圖
2.2.2.A/D轉換器ADC0808的管腳說明:
IN0~IN7:為模擬量的輸入口,我們選取IN3口為入口,外接可變電阻,通過改變阻值來控制模擬量的輸入。
A、B、C:3位地址輸入,2個地址輸入端的不同組合選擇八路模擬量輸入。這里我們將A,B接高電平,C為低電平。
ALE:地址鎖存啟動信號,在ALE的上升沿,將A、B、C上的通道地址鎖存到內部的地址鎖存器。
D0~D7:八位數據輸出線,A/D轉換結果由這8根線傳送給單片機。
OE:允許輸出信號。當OE=1時,即為高電平,允許輸出鎖存器輸出數據。
START:啟動信號輸入端,START為正脈沖,其上升沿清除ADC0808的內部的各寄存器,其下降沿啟動A/D開始轉換。
EOC:轉換完成信號,當EOC上升為高電平時,表明內部A/D轉換已完成。
CLK:時鍾輸入信號,選用頻率500KHZ。
圖2.2.2 時鍾信號
2.3 電壓顯示電路:
設計中採用的是4段LED數碼管來顯示電壓值。LED具有耗電低、亮度高、視角大、線路簡單、耐震及壽命長等優點,它由4個發光二極體組成,其中3個按『8』字型排列,另一個發光二極體為圓點形狀,位於右下角,常用於顯示小數點。把4個發光二極體連在一起,公共端接高電平,叫共陽極接法,相反,公共端接低電平的叫共陰極接法,我們採用共陰極接法。當發光二極體導通時,相應的一段筆畫或點就發亮,從而形成不同的發光字元。其8段分別命名為dp g f e d c b a。例如,要顯示「0」,則dp g f e d c b a分別為:00111111B;若要顯示多個數字,只要讓若干個數碼管的位碼循環為高電平就可以了。
根據設計要求,顯示電路需要至少4位LED數碼管來顯示電壓值,我們再多加一位用來顯示電壓單位「V」,則有7位LED循環顯示。利用單片機的I/O口驅動LED數碼管的亮滅,設計中由P0口驅動LED的段碼顯示,即顯示字元,由P2口選擇LED位碼,即選擇點
亮哪位LED來顯示。
圖2.3 LED管
另外,一般I/O介面晶元的驅動能力是很有限的,在LED顯示器介面電路中,輸出口所能提供的驅動電流一般是不夠的尤其是設計中需要用到多位LED,此時就需要增加LED驅動電路。驅動電路有多種,常用的是TTL或MOS集成電路驅動器,在本設計中採用了ADC0808晶元驅動電路。
3.系統程序設計
3.1軟體總體框架設計
在編寫匯編語言時,先存放數碼管的段碼,再存放轉換後的數據,選取通道並設值.再將AD轉換結果轉換成BCD碼,通過換算LED上顯示.
再換算中,利用關系得到LED上個位,十位,百位的顯示,然後設置小數點:
開始
預設初值
選取通道3
啟動A/D轉換


數碼顯示子程序
延時顯示結果
結束
在系統上電開始測量前,要用萬用表的電壓檔對被測電壓進行估測,然後再測。
4.系統總圖及程序
LED_0 EQU 30H;
LED_1 EQU 31H;
LED_2 EQU 32H;
LED_3 EQU 33H;
ADC EQU 35H;
ST BIT P3.2;
OE BIT P3.0;
EOC BIT P3.1;
ORG 00H;
START: MOV LED_0,#00H;
MOV LED_1,#00H;
MOV LED_2,#00H;
MOV LED_3,#00H;
MOV DPTR,#TABLE;
SETB P3.4;
SETB P3.5;
CLR P3.6;
WAIT: CLR ST;
SETB ST;
CLR ST;
JNB EOC,$;
SETB OE;
MOV ADC,P1;
CLR OE;
MOV A,ADC;
MOV B,#51;
DIV AB;
MOV LED_3,A;
MOV A,B;
MOV B,#5;
DIV AB;
MOV LED_2,A;
MOV LED_1,B;
LCALL DISP;
SJMP WAIT;
DISP: MOV A,#3EH;
CLR P2.3;
MOV P0,A;
LCALL DELAY;
SETB P2.3;
MOV A,LED_1;
MOVC A,@A+DPTR;
CLR P2.2;
MOV P0,A;
LCALL DELAY;
SETB P2.2;
MOV A,LED_2;
MOVC A,@A+DPTR;
CLR P2.1;
MOV P0,A;
LCALL DELAY;
SETB P2.1;
MOV A,LED_3;
MOVC A,@A+DPTR;
ORL A,#80H;
CLR P2.0;
MOV P0,A;
LCALL DELAY;
SETB P2.0;
RET;
DELAY: MOV R6,#10;
D1: MOV R7,#250;
DJNZ R7,$;
DJNZ R6,D1;
RET
TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,
END
數字直流電壓表的總圖

B. 用單片機製作數字電壓表,待測電壓經A/D轉換器得到的8位數字量進入51單片機後怎樣轉換成實際的電壓數值

假設ADC的參考電壓是Vref,ADC轉換結果是X所示實際電壓V是:

V=Vref×X÷256

要得到兩位小數?如果使用C語言編寫那就沒有問題了。但是還有一種方法,假設Vref=2.56V,即2560mV,所以V=2560×X÷256=10×X,單位是mV,只要自己加小數點就行了,比如X=65H=101,則V=1010mV=1.01V。

C. 51單片機數字電壓表P0口改到P1口程序怎麼改

delay(1);
EN=1;//拉高使能端,為製造有效的下降沿做准備。
delay(1);
EN=0;//en由高變低,產生下降沿,液晶執行命令
}
void write_1602dat(uchar dat)//液晶寫入數據函數
{
RS=1;//數據/指令選擇置為數據
P0=dat;//送入數據 *******************************這個我改成了P1
delay(1);
EN=1; //en置高電平,為製造下降沿做准備。
delay(1);
EN=0; //en由高變低,產生下降沿,液晶執行命。
}
void lcd1602_init()//液晶初始化函數
{
uchar a;
RW=0;
write_1602com(0x38);//設置液晶工作模式,意思:16*2行顯示,5*7點陣,8位數據。
write_1602com(0x0c);//開顯示不顯示游標
write_1602com(0x06);//整屏不移動,游標自動右移。
write_1602com(0x01);//清顯示
write_1602com(0x80);//顯示固定符號從第一行第0個(從第0個開始數)位置開始顯示
for(a=0;a<4;a++)
{
write_1602dat(tab1[a]);//向液晶屏寫固定符號部分
}
write_1602com(0x80+9);//顯示固定符號寫入位置,從第一行第9個(從第0個開始數)位置開始顯示。
for(a=0;a<8;a++)
{
write_1602dat(tab2[a]);//寫顯示固定符號
}
}
/*************轉速顯示函數**********/
void display(unsigned long speed)//轉速顯示函數
{
if(speed<=99999)
{
uchar wan,qian,,shi,ge;//定義拆字變數
wan=speed/10000;//轉速/10000得到萬位
qian=speed%10000/1000;//轉速/10000的余數/1000得到千位

D. 用51單片機和ADC0809製作數字電壓表,ADC的輸入怎麼接

1ADC有一個IN0-IN7的模擬輸入端,模擬輸入多少多少電壓開始測,但是等我做出來以後,要測量怎麼把信號接進來呢,有八個腳呢,或者是其他接法??
你肯定要做一個板子吧,ADC0809的8路模擬量,能過導線連接到某個外部接線端子上面或者與某個電路連接。
2還有這種方法是不是只能測量直流電壓,那要是交流信號電壓的測量應該用什麼方法?
這個ADC0809隻能測直流電壓0-5V,如果想測交流電壓或者別的幅值的直流電壓都得加電流,簡單的話可以選一個變送器。

E. 關於51單片機做數碼電壓表時有段程序始終看不懂,請各位單片機高手們指點迷津

void也可以看成是數據類型,只是他是特殊的數據類型,這個類型就是「沒有東西」。
比如一個函數
int a(int b){ }
表示函數的參數是int類型的,返回值是int類型的。如果沒有返回值,也沒有參數,就都把類型名稱寫成void,既然沒有了,那麼也就沒有名稱了,所以b也可以省了,便成了 void a(void) { }。
函數的定義是很基本的c語言知識,這個說起來很啰嗦,隨便看書就能明白了。

void delay(void) 這個函數沒什麼特別意義,只是一個延時而已。因為單片機運行速度很快,數碼管也不是恆定的點亮一個,而是動態掃描的,就是說,先點亮一個位,然後關閉,點亮另一個位。這個過程很快,由於視覺暫留作用,人眼只能看到所有的位都是同時亮的,這個原理和放電影一樣,不過,如果點亮一個後,立即點亮另一個,會因為點亮時間太短,燈還沒全亮就滅了(本人估計的,但應該也是這樣),造成燈光太暗。所以要延時一下。

單片機的電源電壓是5V,那麼所有埠的承受電壓就一定是5V,如果是3.3V單片機,就一定只能承受3.3V,所以測量量程一定是0 至 5V。如果實際測量量程遠遠小於這個范圍,必須用放大器放大。如果量程大於這個范圍,必須分壓。

void convdata(unsigned char i)

這個 i 明顯就是數模轉換得到的結果,作為參數傳遞給這個函數處理。void以及函數參數等名詞術語,說起來就是一本教科書的量,請自行看書,這是很基本的。

dis[0] = i/51 以及後面的兩句,是一個數學問題。(dis[i]就是一個數組,這個不用多言)。

為什麼是51呢?看他的注釋「將0-255級換算成0.00-5.00的電壓數值」。
也就是說,如果測得的電壓是5V,那麼數模轉換的結果就是255,這是一個8位數的最大值,這個數模轉換器的最大值就是8位,所以5V的電壓轉換得到就是255.
然後就可以照推了,如果測得的值是2.5V,那麼得到的值就是255 / 2 = 127.5。也就是說,實際測得的值和這個轉換值的關系是正比的,他們的比值就是 255 / 5 = 51 ,所以用測到的值去除以51,就得到實際值。明白了嗎?如果這樣說還不明白,那就沒辦法了~
然後,為什麼後面又要搞那兩條式子呢?這是因為,要把一個數值在數碼管上顯示出來,必須把一個數值上每一個位的數字單獨處理給數碼管顯示。比如,上面除以51後,得到的數可能會有小數,比如1.45,那麼要把這個數用數碼管顯示出來,就必須把 1、4、5和小數點都單獨取出來。
以這個(i%51)*10/51*2為例:

i%51 , 是 i 除以 51 後的余數。這個數再除以51,再乘以10,再取整,就是第一個小數了。他這個式子把"乘以10"放在前面,是因為如果先除以51,那麼因為i 和 51 都是int類型,結果也必將是int類型,沒有小數,再乘以10也沒意義了。至於後面為什麼還要乘以2,這個還真不清楚,不過他這個dis數組是用來查表的,就是後面的tab[],要看他的表是怎麼定義的。他第一個數沒有乘以2,但是這個數和小數點的顯示有關,可能不顯示小數點的就要乘以2。
後面的求第二個小數,參照這個解釋自己理解一下。

F. 基於51單片機的數字電壓表總結與體會

通過與同學的討論與認真計算設計分析所完成的,課程設計的任務是設計、組裝並調試一個數字電壓表測量系統。需要我們綜合運用單片機等課程的知識,通過查閱資料、方案論證與選定;設計和選取電路和元器件;分析指標及討論,完成設計任務。
在這次課程設計中,我學會了怎樣去根據課題的要求去設計電路和調試電路。動手能力得到很大的提高。從中我發現自己並不能很好的熟練去使用我所學到的高頻電路知識。在以後學習中我要加強對使用電路的設計和選用能力。但由於電路比較簡單、定型,而不是真實的生產、科研任務,所以我們基本上能有章可循,完成起來並不困難。把過去熟悉的定型分析、定量計算逐步,元器件選擇等手段結合起來,掌握工程設計的步驟和方法,了解科學實驗的程序和實施方法。這對今後從事技術工作無疑是個很好的訓練。通過這種綜合訓練,我們可以掌握電路設計的基本方法,提高動手組織實驗的基本技能,培養分析解決電路問題的實際本領,為以後畢業設計和從事電子實驗實際工作打下基礎。
還有就是每次在組團做試驗都會感覺特別的充實,我們可以按照自己設計的電路去完成,老師也不是死板的要求我們怎麼怎麼,而是給了我們盡可能大的自己決定的餘地,這次的元器件都是按照我們設計出來的電路參數給定的,而且每位老師都很耐心的為我們解決試驗中所出現的問題,最後真心的感謝老師對我們課程設計的建議和幫助,我們才得以圓滿的完成這次課程設計!

閱讀全文

與51單片機數字電壓表相關的資料

熱點內容
手機建立文件夾用什麼軟體 瀏覽:723
oss壓縮上傳 瀏覽:974
藍色學校網站源碼 瀏覽:823
androidgridview表格 瀏覽:604
壓縮怎麼eq閃 瀏覽:740
流密碼演算法openssl 瀏覽:262
怎麼數黃豆個數python 瀏覽:799
混沌序列加密的結論 瀏覽:224
最新脫單app哪個好 瀏覽:638
如何用自己電腦做伺服器做網頁 瀏覽:140
伺服器安全配置要考什麼證書 瀏覽:633
ipadpro可以編程 瀏覽:541
外國的程序員和中國的程序員 瀏覽:151
抖音小店app如何聯系客服 瀏覽:975
linux打開多個終端 瀏覽:500
linux中的命令 瀏覽:580
優化小米6相機演算法 瀏覽:259
ak47pdf 瀏覽:150
人與文化pdf 瀏覽:642
原子幣app在哪裡注冊的 瀏覽:530