|
實(shí)驗(yàn)內(nèi)容及過程記錄 利用電位器提供模擬量輸入,送往 ADC0808/ADC0809 的 IN3 輸入 端,編制程序,將模擬量轉(zhuǎn)換成數(shù)字量,并在數(shù)碼管上顯示出來。 1.ADC0809由一個(gè)8路模擬開關(guān)、一個(gè)地址鎖存與譯碼器、一個(gè)A/D轉(zhuǎn)換器和一個(gè)三態(tài)輸出鎖存器組成。多路開關(guān)可宣統(tǒng)8個(gè)模擬通道,允許8路模擬量分時(shí)輸入,共用A/D轉(zhuǎn)換器進(jìn)行轉(zhuǎn)換。三態(tài)輸出鎖存器用于鎖存A/D轉(zhuǎn)換完的數(shù)字量,當(dāng)OE端為高電平時(shí),才可以從三態(tài)輸出鎖存器取走轉(zhuǎn)換完的數(shù)據(jù)。 2.ADC0809引腳結(jié)構(gòu): D7~D0:8位數(shù)字量輸出引腳。 IN0~IN7:8位模擬量輸入引腳。 VCC:+5V工作電壓。 GND:地 REF(+):參考電壓正端。 REF(-):參考電壓負(fù)端。 START:A/D轉(zhuǎn)換啟動(dòng)信號(hào)輸入端。 ALE:地址鎖存允許信號(hào)輸入端。 EOC:轉(zhuǎn)換結(jié)束信號(hào)輸出引腳,開始轉(zhuǎn)換時(shí)為低電平,當(dāng)轉(zhuǎn)換結(jié)束時(shí)為高電平。 OE:輸出允許控制端,用以打開三態(tài)數(shù)據(jù)輸出鎖存器。 CLK:時(shí)鐘信號(hào)輸入端。 A、B、C:地址輸入線。 1.在 Proteus 中畫出 ADC0809 與單片機(jī) AT89C52 的連線接口電路原 理圖,選擇數(shù)碼管用于輸出數(shù)字量的顯示 2.進(jìn)入 Keil C51 軟件的操作環(huán)境,根據(jù)步驟 1 的接線電路編制 A/D 轉(zhuǎn)換程序,編輯源程序并進(jìn)行編譯,生成 .hex 文件 3.設(shè)置 Protes 與 Keil C51 之間的連接 4.改變輸入電壓值并記錄,電壓范圍為 0~5V,記錄對(duì)應(yīng)的數(shù)字量輸出 四、實(shí)驗(yàn)結(jié)果及分析 1.A/D轉(zhuǎn)換程序如下圖4-1和4-2所示: 圖4-1 圖4-2 2.五組數(shù)字量輸出數(shù)據(jù)如下圖所示: (1)當(dāng)滑動(dòng)變阻器滑到11%時(shí),為第一組模擬量輸入,經(jīng)過AD轉(zhuǎn)換器送入AT89C51中,在數(shù)碼管中輸出0.5 圖4-3 (2)當(dāng)滑動(dòng)變阻器滑到21%時(shí),為第一組模擬量輸入,經(jīng)過AD轉(zhuǎn)換器送入AT89C51中,在數(shù)碼管中輸出1.0 圖4-4 (3) 當(dāng)滑動(dòng)變阻器滑到31%時(shí),為第一組模擬量輸入,經(jīng)過AD轉(zhuǎn)換器送入AT89C51中,在數(shù)碼管中輸出1.5 圖4-5 (4) 當(dāng)滑動(dòng)變阻器滑到41%時(shí),為第一組模擬量輸入,經(jīng)過AD轉(zhuǎn)換器送入AT89C51中,在數(shù)碼管中輸出2.0 圖4-6 (5) 當(dāng)滑動(dòng)變阻器滑到51%時(shí),為第一組模擬量輸入,經(jīng)過AD轉(zhuǎn)換器送入AT89C51中,在數(shù)碼管中輸出1.5 圖4-7 程序如下: - #include <reg51.h> //頭文件
- #define uchar unsigned char //定義無符號(hào)字符
- #define uint unsigned int //定義無符號(hào)整型
- uchar DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,ox6f}; //數(shù)碼管的數(shù)字段碼(共陰極數(shù)碼管)
- sbit CLK=P1^3; //定義CLK為P1口的第四位
- sbit ST=P1^2; //定義ST為P1口的第三位
- sbit EOC=P1^1; //定義EOC為P1口的第二位
- sbit OE=P1^0; //定義OE為P1口的第一位
- void DelayMS(uint ms) //延時(shí)程序
- {
- uchar i;
- while(ms--)
- for(i=0;i<120;i++);
- }
- void Display_Result(uchar d) //數(shù)碼管顯示程序
- {
- int i,j;
- P2=0xfb; //第三位數(shù)碼管顯示
- i=d*5/256;
- P0=DSY_CODE[i]; //數(shù)碼管顯示
- DelayMS(5); //延時(shí)
- P0=0x80 ;//數(shù)碼管顯示“.”
- DelayMS(5);
- P2=0xf7; //第四位數(shù)碼管顯示
- j=(d-i*51)*10/51;
- P0=DSY_CODE[j];
- DelayMS(5);
- }
- void main() //主程序
- {
- TMOD=0x02; //選擇T0定時(shí)計(jì)數(shù)器工作在方式2
- TH0=0x14; //設(shè)置加1計(jì)數(shù)器TL0的初值為0x14
- TL0=0x00;
- IE=0x82; //設(shè)定中斷允許控制寄存器IE:開放所有中斷,開放T0的溢出中斷
- TR0=1; //啟動(dòng)T0工作
- P1=0x3f; //選通IN3通道
- while(1)
- {
- ST=0;
- ST=1;
- ST=0;
- while(EOC==0);
- OE=1;
- Display_Result(P3);
- OE=0;
- }
- }
- void Timer0_INT()interrupt 1
- {
- CLK=~CLK;
- }
復(fù)制代碼
3.實(shí)驗(yàn)結(jié)果及分析 由實(shí)驗(yàn)結(jié)果可得,將滑動(dòng)變阻器的阻值變化設(shè)定為模擬量輸入,經(jīng)過AD轉(zhuǎn)換器的IN3口輸入,并進(jìn)行轉(zhuǎn)換,送入51單片機(jī)中。單片機(jī)P0口連接著共陰極數(shù)碼管,將模擬量變化進(jìn)行輸出。當(dāng)滑動(dòng)變阻器滑動(dòng)時(shí),數(shù)碼管顯示也隨之變化,若輸入成一定線性關(guān)系,輸出也呈一定的線性關(guān)系。由此實(shí)現(xiàn)了數(shù)字量到模擬量的轉(zhuǎn)換。
實(shí)驗(yàn)總結(jié)與體會(huì)
通過本次實(shí)驗(yàn),我學(xué)習(xí)了如何將模擬量轉(zhuǎn)換為數(shù)字量的操作。掌握了ADC0809的接口以及運(yùn)用,以及與單片機(jī)的連接和數(shù)碼管的輸出。在實(shí)驗(yàn)過程中,雖然使用了仿真器件,但是在操作滑動(dòng)變阻器可能依然存在誤差。因此還需要不斷優(yōu)化。由于在計(jì)算機(jī)控制過程中,將外界模擬量轉(zhuǎn)換為數(shù)字量輸入到計(jì)算機(jī)是非常重要的一步。因此我們要牢牢掌握AD轉(zhuǎn)換的原理。
word格式的文檔下載:http://www.denmoz.com/bbs/dpj-198095-1.html
|