摘 要: 本方案以單片機AT89C51為系統的控制核心,結合A/D轉換芯片ADC0809設計一個數字電壓表,能夠測量0—5V之間的直流電壓值,并通過四位數碼顯示。數字電壓表的電路圖設計在Proteus軟件中進行,執行程序應用C語言在Keil中編寫、調試。
關鍵詞: 單片機(AT89C51) 電壓 A/D轉換 ADC0809
數字電壓表(Dligita Voltmeter)簡稱DVM,是利用A/D轉換原理,把連續的模擬量(直流輸入電壓)轉換成不連續、離散的數字形式并加以顯示的儀表。通常數字電壓表都采用大規模的A/D轉換集成電路,測量精度高,讀數方便,在體積、重量、耗電、穩定性及可靠性等方面性能指標均明顯優于指針式萬用表。其中,A/D轉換器將輸入的模擬量轉換成數字量,邏輯控制電路產生控制信號,按規定的時序將A/D轉換器中各組模擬開關接通或斷開,保證A/D轉換正常進行。A/D轉換結果通過計數譯碼電路變換成段碼,最后驅動數碼管顯示相應的數值。目前,由各種單片A/D轉換器構成的數字電壓表,已被廣泛用于電子及電工測量、工業自動化儀表、自動測試系統等智能化測量領域,顯示出強大的生命力。本方案以單片機AT89C51為系統的控制核心,結合A/D轉換芯片ADC0809設計一個數字電壓表,能夠測量0—5V之間的直流電壓值,通過四位數碼顯示。數字電壓表的電路圖設計在Proteus軟件中進行,執行程序用C語言在Keil中編寫、調試。
1.數字電壓表硬件電路設計
數字電壓表由AT89C51單片機控制電路、12MHz時鐘電路、復位電路、數碼管顯示電路、AD轉換電路和電源電路等主要電路組成,總體組成框圖如圖1所示。
1.1時鐘電路
時鐘電路也稱為振蕩電路,在計算機系統中起著非常重要的作用,是保證系統正常工作的基礎。80C51單片機芯片機集成了振蕩電路,只要在芯片的第18、19腳外接晶體振蕩器即可工作。如圖4中的晶體振蕩器(X1)、電容C1和C2即構成了單片機所需的時鐘電路。
1.2復位電路
復位電路的作用是使CPU和系統中的其他功能部件都處在初始狀態,并從初始狀態開始工作。單片機的復位電路是由外部電路來執行的,在RST引腳上加上持續二個機器周期以上的高電平就執行狀態復位。通常采用上電復位和開關復位二種方式。如圖4中單片機第9腳與R1、R2、C3和按鍵開關構成了單片機的復位電路。
1.3電源電路
電源電路是給數字電壓表提供+5V的供電電路,保證各電路正常工作。
1.4數碼管顯示電路
數碼管顯示電路的作用是顯示輸入0.00—5.00V的電壓值。系統通過對LED燈的動態顯示及不停的輪流給數碼管位選端加驅動電壓,在給其中一個數碼管位選段加驅動電壓的時候它才能變亮,而其他的是暗的,由于數碼管暗下來需要一定的時間,人眼具有視覺暫留特點,同時系統又給其他的施加驅動電壓,因此我們看到的就是穩定的亮著的數字了,如圖4所示。
1.5A/D轉換電路
A/D轉換電路的作用是將所輸入的模擬信號轉換成數字信號,然后進行處理。A/D轉換器的轉換精度對測量電路極其重要,它的參數關系到測量電路性能。A/DC0809轉換器的性能比較穩定,轉換精度高,具有很高的抗干擾能力,電路結構簡單。ADC08098路模擬信號的分時采集,片內有8路模擬選通開關,以及相應的通道抵制鎖存用譯碼電路,其轉換時間為100μs左右,圖2為0809引腳圖。
1.5.1ADC0809的內部結構
ADC0809的內部邏輯結構圖如上圖3所示。
圖中多路開關可選通8個模擬通道,允許8路模擬量分時輸入,共用一個A/D轉換器進行轉換,這是一種經濟的多路數據采集方法。地址鎖存與譯碼電路完成對A、B、C3個地址位進行鎖存和譯碼,其譯碼輸出用于通道選擇,其轉換結果通過三態輸出鎖存器存放、輸出,因此可以直接與系統數據總線相連,表1為通道選擇表。
1.5.2信號引腳
ADC0809芯片為28引腳為雙列直插式封裝,其引腳排列見圖3。對ADC0809主要信號引腳的功能說明如下。
IN7~IN0——模擬量輸入通道。
ALE——地址鎖存允許信號。對應ALE上跳沿,A、B、C地址狀態送入地址鎖存器中。
START——轉換啟動信號。START上升沿時,復位ADC0809;START下降沿時啟動芯片,開始進行A/D轉換;在A/D轉換期間,START應保持低電平。本信號有時簡寫為ST。
A、B、C——地址線。通道端口選擇線,A為低地址,C為高地址,引腳圖中為ADDA,ADDB和ADDC。其地址狀態與通道對應關系見表1。
CLK——時鐘信號。ADC0809的內部沒有時鐘電路,所需時鐘信號由外界提供,因此有時鐘信號引腳。通常使用頻率為500KHz的時鐘信號。
EOC——轉換結束信號。EOC=0,正在進行轉換;EOC=1,轉換結束。使用中該狀態信號即可作為查詢的狀態標志,又可作為中斷請求信號使用。
D7~D0——數據輸出線。為三態緩沖輸出形式,可以和單片機的數據線直接相連。D0為最低位,D7為最高位。
OE——輸出允許信號。用于控制三態輸出鎖存器向單片機輸出轉換得到的數據。OE=0,輸出數據線呈高阻;OE=1,輸出轉換得到的數據。
Vcc——+5V電源。
Vref——參考電源參考電壓用來與輸入的模擬信號進行比較,作為逐次逼近的基準。其典型值為+5V(Vref(+)=+5V,Vref(-)=-5V)。
1.5.3電路電路連接
ADC0809與單片機的電路連接主要涉及兩個問題。一是8路模擬信號通道的選擇,二是A/D轉換完成后轉換數據的傳送。根據表1中所示將ADC0809的地址線A、B、C接低電平即可選擇通道1(IN0),ADC0809的數據輸出線D7~D0接80C51的P0口,如圖4所示。
1.6測試電壓輸入電路
輸入電路的作用是把不同量程的被測的電壓規范到A/D轉換器所要求的電壓值。本電路設計所用電壓為0.00—5.00V,其大小通過滑動變阻器調節。
數字電壓表硬件電路如圖4所示。
2.數字式電壓表程序設計
2.1數字式電壓表程序流程圖
2.2Keil C51參考程序如下
#include "reg51.h"
#define uchar unsigned char
#define uint unsigned int
//*————————數碼管段碼定義————————*//
uchar code table={0xc0,0x99,0xa4,
0xb0,0xf9,0x92,0x82,0xf8,0x80,0x90};
//*————————0809引腳定義————————*//
sbit st=P2^7;
sbit oe=P2^5;
sbit eoc=P2^6;
sbit clk=P2^4;
//*——————-延時子函數————————*//
void delay(uchar z)
{
uint x,y;
for(x=z;x>0;x——)
for(y=110;y>0;y——);
}
//*———————啟動轉換子函數————————*//
void start()
{
st=0;oe=0;st=1;st=0;
}
//*————————顯示子函數——————————*//
xian(uchar b)
{
P2=0x01;
P0=table[b%10];
delay(1);
P2=0x02;
P0=table[b/10%10];
delay(1);
P2=0x04;
P0=table[b/100%10]&0x7f;
delay(1);
P2=0x08;
P0=table[b/1000];
delay(1);
}
//*————————-主函數————————*//
void main()
{
uint B;
uchar date;
TMOD=0x01;
TH0=(65536-20)/256;
TL0=(65536-20)%256;
EA=1;
ET0=1;
TR0=1;
start();//啟動轉換
while(1)
{
while(eoc==0);//等待轉換結束
oe=1;//允許輸出
date=P0;
start();
oe=0;
B=date*5.0/255;
xian(B);//顯示轉換結果
}
}
//*————-T0定時器中斷子函數給ADC0809提供時鐘信號————-*//
void time0()interrupt 1 using 1
{
TH0=(65536-20)/256;
TL0=(65536-20)%256;
clk=~clk;
}
3.測試與調試
本設計應用Proteus和Keil51軟件,首先根據自己設計的電路圖用Proteus軟件畫出電路模型,然后用Keil51軟件對所編寫的程序進行編譯、鏈接,如果沒有錯誤和警告便可生成程序的hex文件,再將此文件加到電路圖上使軟硬件結合運行,最后進行端口電壓的對比測試,測試的結果如圖5所示。
參考文獻:
[1]姜治臻.單片機技術及應用.高等教育出版社,2009,7.
[2]彭偉.單片機C語言程序設計實訓100例.電子工業出版社,2009,6.