實驗要求: 應用A/D轉換器將滑動電阻輸出的模擬電壓量轉換為數(shù)字電壓量,將數(shù)字電壓量輸出到四位數(shù)碼管,并通過電壓表給出模擬電壓量的讀數(shù)。下圖是實驗截圖。

實驗方案: 應用proteus設計實驗用模擬電路,A/D轉換器采用ADC0804模擬器件,滑動電阻采用proteus支持的POT-HG,四位數(shù)碼管采用7SEG-MPX4CA。
ADC0804模數(shù)轉換器
有20個引腳,分辨率為8位,轉換時間為100μs,輸入電壓范圍為0~5V。
分辨率:A/D轉換器對輸入模擬信號的分辨能力,ADC0804分辨率為8位,即輸出位數(shù)為8個二進制位,可以區(qū)分2^8(256)不同等級的輸入模擬電壓,能區(qū)分輸入的電壓最小值為滿量程輸入的1/2^8(1/256),若需要區(qū)分更小的輸入電壓。就需要增加輸出位數(shù),提高A/D轉換器的分辨率。
轉換時間:A/D轉換器從接收到模擬電壓到輸出數(shù)字電壓需要的時間,不同類型的轉換器轉換時間不同,并行比較的A/D轉換器轉換時間可達50ns以內,逐次比較的A/D轉換器轉換時間一般在10~100μs之間,雙積分A/D轉換器轉換時間一般在幾十毫秒到幾百毫秒之間。

CS引腳:芯片的片選信號,低電平有效。若該引腳為低電平,芯片開始工作,若該引腳為高電平,芯片停止工作。當外接多個ADC0804芯片時,該引腳可作為芯片的選擇地址,通過不同的地址信號使用不同的ADC0804芯片,從而可以實現(xiàn)多個ADC通道的分時復用。
WR引腳:采樣觸發(fā)信號,低電平有效。若該引腳由高電平變?yōu)榈碗娖綍r,芯片對模擬信號進行一次采樣,并進行AD轉換。
RD引腳:轉換數(shù)據完成信號,低電平有效。若檢測到該引腳為低電平,說明一次轉換完成,轉換完成的數(shù)據從DB0~DB7引腳讀取。
VIN+和VIN-引腳:模擬電壓輸入端,用以接收單極性、雙極性和差模輸入信號。雙極性輸入信號有正負電壓、零電壓,單極性輸入信號僅有正電壓。若為單極性輸入信號,VIN+接模擬電壓的輸入,VIN-接地;若為雙極性輸入信號,VIN+和VIN-分別接模擬輸入電壓的正極和負極。
VREF/2引腳:參考電壓接入引腳。該引腳可外接電壓,也可懸空。
CLKIN引腳:引入外部時鐘脈沖,用于芯片的時鐘信號。
CLKR引腳:內部時鐘發(fā)生器外接電阻端,與CLKIN端配合可由芯片自身產生時鐘脈沖,時鐘脈沖頻率范圍一般為100KHz~1460KHz。
INTR引腳:轉換結束輸出信號,低電平有效,當一次A/D轉換完成后,該引腳被設置為0。在實際應用中,該引腳可與外部中斷輸入引腳相連(如51單片機的INT0,INT1腳),觸發(fā)中斷請求,中斷發(fā)生后,還需等待RD=0才能正確讀出A/D轉換結果。若不使用中斷,該引腳可以懸空。
AGAND和DGAND引腳:模擬接地和數(shù)字接地,兩個引腳可以直接接地。
VCC引腳:接+5V電源。
DB0~DB7引腳:輸出A/D轉換后的8位二進制結果。
四位數(shù)碼管7SEG-MPX4CA
實驗用顯示器件采用四位數(shù)碼管7SEG-MPX4CA,該器件共有12個引腳。其中1、2、3、4引腳為位選信號,用于控制幾個數(shù)碼管亮,A~G引腳為顯示數(shù)字的段選信號,DP引腳為小數(shù)點。

實驗電路設計
ADC0804中的VCC接入5V電源,REF/2引腳懸空(懸空則相當于與VCC共接5V電源),因此ADC轉換的參考電壓為VCC的值,即5V。DB0DB7引腳連接單片機的P1.0P1.7,RD和WR引腳連接單片機的P3.6和P3.7,VIN+引腳接滑動變阻器的可調節(jié)端,VIN-引腳接地,在VIN+和VIN-引腳之間接入電壓表,CLKIN引腳和CLKR引腳連接的電容和電阻構成外部時鐘脈沖。單片機P0.0~P0.7接四位數(shù)碼管的段選線。

單片機內運行的完整C程序如下:
#include
#include
#define uint unsigned int
#define uchar unsigned char
sbit wr=P3^6;
sbit rd=P3^7;
uchar code dis[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void delay(uint x)
{
uchar i;
while(x--)
for(i=0;i< 120;i++);
}
void display(uchar db)
{
uchar bw,sw,gw;
float value;
int voltage;
value = (float)db * 5 / 256 * 100;
voltage = (int)value;
bw=voltage/100;
sw=voltage%100/10;
gw=voltage%10;
P2=0x01;
P0=dis[bw]&0x7f;
delay(5);
P2=0x02;
P0=dis[sw];
delay(5);
P2=0x04;
P0=dis[gw];
delay(5);
P2=0x08;
P0=dis[0];
delay(5);
}
void main()
{
uchar i;
while(1)
{
wr=0;
_nop_();
wr=1;
delay(1);
P1=0xff;
rd=0;
_nop_();
for(i=0;i< 10;i++)
display(P1);
}
}
位變量wr和rd用于操作P3.6和P3.7,P3.6和P3.7連接到了ADC0804的WR和RD引腳,用于控制信號采樣和讀取采樣信號。數(shù)組變量dis[]定義了數(shù)碼管顯示的數(shù)字編碼。
delay(uint x)是延遲函數(shù),參數(shù)x為延時的毫秒數(shù)。
display(uchar db)是數(shù)碼管顯示函數(shù),參數(shù)db為P1口,P1口存儲了采集到的電壓數(shù)字量。ADC0804的分辨率為8位,可以區(qū)分2^8(256)不同等級的輸入模擬電壓,且輸入電壓量程為0 ~ 5V,ADC0804輸出的數(shù)值范圍為0~256,轉換為電壓(單位V)的公式為:
輸出的數(shù)值*輸入最大量程 / 256
下面的代碼將輸出的數(shù)值轉換為電壓的數(shù)字量(單位V),并分別計算出數(shù)字量的各個位數(shù)。
value = (float)db * 5 / 256 * 100;
// 輸出數(shù)值轉換為電壓,乘以1000方便計算出數(shù)值的各個位數(shù)
voltage = (int)value;
bw=voltage/100; // 計算出百位數(shù)
sw=voltage%100/10; // 計算出十位數(shù)
gw=voltage%10; // 計算出個位數(shù)
語句P2=0x01選擇數(shù)碼管的第1位顯示數(shù)字,語句P0=dis[bw]&0x7f用于顯示數(shù)字和小數(shù)點,dis[bw]指定的數(shù)字的編碼,再和0x7f做與操作,顯示小數(shù)點。
main()函數(shù)是主控函數(shù),應用while結構循環(huán)采集和轉換可變電阻輸出的電壓,并將采集的電壓輸出到數(shù)碼管顯示。語句wr=0將ADC0804的wr引腳設為低電平,通知ADC0804進行采樣,語句_nop_()執(zhí)行_nop_()函數(shù), nop ()函數(shù)不是C語言標準庫的函數(shù),它是51單片機提供的指令,它執(zhí)行一個機器周期的空操作,讓ADC0804完成數(shù)據采樣和模數(shù)轉換,其后執(zhí)行語句wr=1,將ADC0804的wr引腳設為高電平。語句P1=0xff將P1各端口都設置為高電平,準備接收采集的數(shù)據,語句rd=0將ADC0804的rd引腳設為低電平,從DB0~DB7引腳讀取數(shù)據到P1口。
-
轉換器
+關注
關注
27文章
9443瀏覽量
156895 -
數(shù)碼管
+關注
關注
32文章
1894瀏覽量
94404 -
模數(shù)轉換器
+關注
關注
26文章
4099瀏覽量
130245 -
引腳
+關注
關注
16文章
2118瀏覽量
55994 -
adc0804
+關注
關注
1文章
31瀏覽量
22811
發(fā)布評論請先 登錄
單片機外設AD轉換器ADC0804時序圖
5962-9581501HXA高端AD模數(shù)轉換器
模數(shù)轉換器ADC簡介
ADC0804中文資料.pdf
模數(shù)轉換ADC0804的應用(含源程序及電路)
電流積分模數(shù)轉換器(ADC),什么是電流積分模數(shù)轉換器(AD
數(shù)模模數(shù)轉換芯片ADC0804數(shù)據手冊
adc0804工作原理
ADC0804模數(shù)轉換51單片機程序與電路
adc0804和adc0809區(qū)別
adc0804操作方法
ADC0804模數(shù)轉換器的應用實例
評論