|
從ADC0809的通道IN0輸入0-5V之間的模擬量,通過(guò)ADC0809轉(zhuǎn)換成數(shù)字量在數(shù)碼管上以十進(jìn)制形成顯示出來(lái)。ADC0809的VREF接+5V電壓。
電路原理圖如下:
程序如下:
#include <reg52.h> //頭文件定義
#include<intrins.h>
#define uchar unsigned char //宏定義
#define uint unsigned int
sbit EOC=P3^3;//EOC轉(zhuǎn)換結(jié)束信號(hào),高電平說(shuō)明轉(zhuǎn)換結(jié)束。如果只是作為P3.3口,查詢編程;如果是INT1,中斷編程方法。
sbit CS=P3^0;
sbit AD_WR=P3^6;//控制ST,WR=0,ST=1;WR=1,ST=0;上升沿(0—1)啟動(dòng)A/D轉(zhuǎn)換,下降沿(1—0)進(jìn)入A/D轉(zhuǎn)換。
sbit AD_RD=P3^7;//控制OE,RD=0,OE=1;RD=1,OE=0;OE=1,允許數(shù)據(jù)輸出給單片機(jī)。OE=0,停止數(shù)據(jù)輸出給單片機(jī)
uchar code table[ ]={0x3F,0x06,0x5B,0x4F,
0x66,0x6D,0x7D,0x07,
0x7F,0x6F,0x77,0x7C,
0x39,0x5E,0x79,0x71};
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void display(uchar bai,uchar shi,uchar ge)//顯示子函數(shù)
{
P2=table[bai];//P2連接DATA 顯示數(shù)字
P1=0x04; //P1連接BIT 選擇哪一位數(shù)碼管
delayms(1);
P2=table[shi];
P1=0x02;
delayms(1);
P2=table[ge];
P1=0x01;
delayms(1);
}
void main()
{
uchar A1,A2,A3,ad_dat,a;
CS=0;//WR=1;RD=1;
while(1)
{
AD_WR=1;//st=1;
_nop_();
_nop_();
_nop_();
AD_WR=0; //上升沿啟動(dòng)A/D轉(zhuǎn)換
_nop_();
_nop_();
_nop_();
AD_WR=1; //下降沿開(kāi)始A/D轉(zhuǎn)換
while(!EOC);//等待A/D轉(zhuǎn)換結(jié)束,當(dāng)EOC變?yōu)?時(shí),A/D轉(zhuǎn)換結(jié)束。
for(a=5;a>0;a--);
AD_RD=0;//輸出轉(zhuǎn)換數(shù)據(jù)給單片機(jī)
_nop_();
ad_dat=P0;//段選顯示
AD_RD=0;//輸出數(shù)據(jù)線為高阻狀態(tài) 每改變一次電壓值,就需要按下仿真器復(fù)位按鈕,再點(diǎn)擊下載,才能顯示新的數(shù)字量
A1=ad_dat/100;
A2=ad_dat%100/10;
A3=ad_dat%10;
display(A1,A2,A3);
}
}
|
|