實(shí)驗(yàn)要求: 應(yīng)用A/D轉(zhuǎn)換器將滑動(dòng)電阻輸出的模擬電壓量轉(zhuǎn)換為數(shù)字電壓量,將數(shù)字電壓量輸出到四位數(shù)碼管,并通過(guò)電壓表給出模擬電壓量的讀數(shù)。下圖是實(shí)驗(yàn)截圖。
實(shí)驗(yàn)方案: 應(yīng)用proteus設(shè)計(jì)實(shí)驗(yàn)用模擬電路,A/D轉(zhuǎn)換器采用ADC0804模擬器件,滑動(dòng)電阻采用proteus支持的POT-HG,四位數(shù)碼管采用7SEG-MPX4CA。
ADC0804模數(shù)轉(zhuǎn)換器
有20個(gè)引腳,分辨率為8位,轉(zhuǎn)換時(shí)間為100μs,輸入電壓范圍為0~5V。
分辨率:A/D轉(zhuǎn)換器對(duì)輸入模擬信號(hào)的分辨能力,ADC0804分辨率為8位,即輸出位數(shù)為8個(gè)二進(jìn)制位,可以區(qū)分2^8(256)不同等級(jí)的輸入模擬電壓,能區(qū)分輸入的電壓最小值為滿量程輸入的1/2^8(1/256),若需要區(qū)分更小的輸入電壓。就需要增加輸出位數(shù),提高A/D轉(zhuǎn)換器的分辨率。
轉(zhuǎn)換時(shí)間:A/D轉(zhuǎn)換器從接收到模擬電壓到輸出數(shù)字電壓需要的時(shí)間,不同類型的轉(zhuǎn)換器轉(zhuǎn)換時(shí)間不同,并行比較的A/D轉(zhuǎn)換器轉(zhuǎn)換時(shí)間可達(dá)50ns以內(nèi),逐次比較的A/D轉(zhuǎn)換器轉(zhuǎn)換時(shí)間一般在10~100μs之間,雙積分A/D轉(zhuǎn)換器轉(zhuǎn)換時(shí)間一般在幾十毫秒到幾百毫秒之間。
CS引腳:芯片的片選信號(hào),低電平有效。若該引腳為低電平,芯片開(kāi)始工作,若該引腳為高電平,芯片停止工作。當(dāng)外接多個(gè)ADC0804芯片時(shí),該引腳可作為芯片的選擇地址,通過(guò)不同的地址信號(hào)使用不同的ADC0804芯片,從而可以實(shí)現(xiàn)多個(gè)ADC通道的分時(shí)復(fù)用。
WR引腳:采樣觸發(fā)信號(hào),低電平有效。若該引腳由高電平變?yōu)榈碗娖綍r(shí),芯片對(duì)模擬信號(hào)進(jìn)行一次采樣,并進(jìn)行AD轉(zhuǎn)換。
RD引腳:轉(zhuǎn)換數(shù)據(jù)完成信號(hào),低電平有效。若檢測(cè)到該引腳為低電平,說(shuō)明一次轉(zhuǎn)換完成,轉(zhuǎn)換完成的數(shù)據(jù)從DB0~DB7引腳讀取。
VIN+和VIN-引腳:模擬電壓輸入端,用以接收單極性、雙極性和差模輸入信號(hào)。雙極性輸入信號(hào)有正負(fù)電壓、零電壓,單極性輸入信號(hào)僅有正電壓。若為單極性輸入信號(hào),VIN+接模擬電壓的輸入,VIN-接地;若為雙極性輸入信號(hào),VIN+和VIN-分別接模擬輸入電壓的正極和負(fù)極。
VREF/2引腳:參考電壓接入引腳。該引腳可外接電壓,也可懸空。
CLKIN引腳:引入外部時(shí)鐘脈沖,用于芯片的時(shí)鐘信號(hào)。
CLKR引腳:內(nèi)部時(shí)鐘發(fā)生器外接電阻端,與CLKIN端配合可由芯片自身產(chǎn)生時(shí)鐘脈沖,時(shí)鐘脈沖頻率范圍一般為100KHz~1460KHz。
INTR引腳:轉(zhuǎn)換結(jié)束輸出信號(hào),低電平有效,當(dāng)一次A/D轉(zhuǎn)換完成后,該引腳被設(shè)置為0。在實(shí)際應(yīng)用中,該引腳可與外部中斷輸入引腳相連(如51單片機(jī)的INT0,INT1腳),觸發(fā)中斷請(qǐng)求,中斷發(fā)生后,還需等待RD=0才能正確讀出A/D轉(zhuǎn)換結(jié)果。若不使用中斷,該引腳可以懸空。
AGAND和DGAND引腳:模擬接地和數(shù)字接地,兩個(gè)引腳可以直接接地。
VCC引腳:接+5V電源。
DB0~DB7引腳:輸出A/D轉(zhuǎn)換后的8位二進(jìn)制結(jié)果。
四位數(shù)碼管7SEG-MPX4CA
實(shí)驗(yàn)用顯示器件采用四位數(shù)碼管7SEG-MPX4CA,該器件共有12個(gè)引腳。其中1、2、3、4引腳為位選信號(hào),用于控制幾個(gè)數(shù)碼管亮,A~G引腳為顯示數(shù)字的段選信號(hào),DP引腳為小數(shù)點(diǎn)。
實(shí)驗(yàn)電路設(shè)計(jì)
ADC0804中的VCC接入5V電源,REF/2引腳懸空(懸空則相當(dāng)于與VCC共接5V電源),因此ADC轉(zhuǎn)換的參考電壓為VCC的值,即5V。DB0DB7引腳連接單片機(jī)的P1.0P1.7,RD和WR引腳連接單片機(jī)的P3.6和P3.7,VIN+引腳接滑動(dòng)變阻器的可調(diào)節(jié)端,VIN-引腳接地,在VIN+和VIN-引腳之間接入電壓表,CLKIN引腳和CLKR引腳連接的電容和電阻構(gòu)成外部時(shí)鐘脈沖。單片機(jī)P0.0~P0.7接四位數(shù)碼管的段選線。
單片機(jī)內(nèi)運(yùn)行的完整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引腳,用于控制信號(hào)采樣和讀取采樣信號(hào)。數(shù)組變量dis[]定義了數(shù)碼管顯示的數(shù)字編碼。
delay(uint x)是延遲函數(shù),參數(shù)x為延時(shí)的毫秒數(shù)。
display(uchar db)是數(shù)碼管顯示函數(shù),參數(shù)db為P1口,P1口存儲(chǔ)了采集到的電壓數(shù)字量。ADC0804的分辨率為8位,可以區(qū)分2^8(256)不同等級(jí)的輸入模擬電壓,且輸入電壓量程為0 ~ 5V,ADC0804輸出的數(shù)值范圍為0~256,轉(zhuǎn)換為電壓(單位V)的公式為:
輸出的數(shù)值*輸入最大量程 / 256
下面的代碼將輸出的數(shù)值轉(zhuǎn)換為電壓的數(shù)字量(單位V),并分別計(jì)算出數(shù)字量的各個(gè)位數(shù)。
value = (float)db * 5 / 256 * 100;
// 輸出數(shù)值轉(zhuǎn)換為電壓,乘以1000方便計(jì)算出數(shù)值的各個(gè)位數(shù)
voltage = (int)value;
bw=voltage/100; // 計(jì)算出百位數(shù)
sw=voltage%100/10; // 計(jì)算出十位數(shù)
gw=voltage%10; // 計(jì)算出個(gè)位數(shù)
語(yǔ)句P2=0x01選擇數(shù)碼管的第1位顯示數(shù)字,語(yǔ)句P0=dis[bw]&0x7f用于顯示數(shù)字和小數(shù)點(diǎn),dis[bw]指定的數(shù)字的編碼,再和0x7f做與操作,顯示小數(shù)點(diǎn)。
main()函數(shù)是主控函數(shù),應(yīng)用while結(jié)構(gòu)循環(huán)采集和轉(zhuǎn)換可變電阻輸出的電壓,并將采集的電壓輸出到數(shù)碼管顯示。語(yǔ)句wr=0將ADC0804的wr引腳設(shè)為低電平,通知ADC0804進(jìn)行采樣,語(yǔ)句_nop_()執(zhí)行_nop_()函數(shù), nop ()函數(shù)不是C語(yǔ)言標(biāo)準(zhǔn)庫(kù)的函數(shù),它是51單片機(jī)提供的指令,它執(zhí)行一個(gè)機(jī)器周期的空操作,讓ADC0804完成數(shù)據(jù)采樣和模數(shù)轉(zhuǎn)換,其后執(zhí)行語(yǔ)句wr=1,將ADC0804的wr引腳設(shè)為高電平。語(yǔ)句P1=0xff將P1各端口都設(shè)置為高電平,準(zhǔn)備接收采集的數(shù)據(jù),語(yǔ)句rd=0將ADC0804的rd引腳設(shè)為低電平,從DB0~DB7引腳讀取數(shù)據(jù)到P1口。
-
轉(zhuǎn)換器
+關(guān)注
關(guān)注
27文章
8705瀏覽量
147195 -
數(shù)碼管
+關(guān)注
關(guān)注
32文章
1882瀏覽量
91132 -
模數(shù)轉(zhuǎn)換器
+關(guān)注
關(guān)注
26文章
3204瀏覽量
126842 -
引腳
+關(guān)注
關(guān)注
16文章
1196瀏覽量
50497 -
adc0804
+關(guān)注
關(guān)注
1文章
31瀏覽量
22206
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論