#include<reg51.h>//頭文件 #include<intrins.h>//庫文件 #define uchar unsigned char #define uint unsigned int sbit W1=P2^0; sbit W2=P2^1; sbit W3=P2^2; sbit W4=P2^3; /*ADC0809初始定義*/ sbit ST=P3^0;//ADC0809轉(zhuǎn)換開始控制 sbit OE=P3^2;//ADC0809輸出允許控制 sbit EOC=P3^1;//ADC0809轉(zhuǎn)換結(jié)束信號 sbit CLK=P3^3;//ADC0809轉(zhuǎn)換時鐘 uchar date; //數(shù)字電壓量 uchar code table1[]={ 63,6,91,79,102, 109,125,7,127, 111,119,124,57, 94,121,113,118, 56,115,49,62, 110,64,128,0 }; //延時子函數(shù) void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } //顯示電壓值子函數(shù) void display(uchar date) { uchar tab[3]; uint temp; temp=(date*1.0/255)*500/1.41; tab[0]=temp%10; tab[1]=temp/10%10; tab[2]=temp/100%10; if(tab[2]==0) P0=(0); else P0=(table1[tab[2]]); //再傳段碼 W1=0; delay(1); //延遲時間2ms以內(nèi) W1=1; if(tab[2]==0&&tab[1]==0) P0=(0); else P0=(table1[tab[1]]); //再傳段碼 W2=0; delay(1); //延遲時間2ms以內(nèi) W2=1; P0=(table1[tab[0]]); //再傳段碼 W3=0; delay(1); //延遲時間2ms以內(nèi) W3=1; P0=(0); //再傳段碼 W4=0;; delay(1); //延遲時間2ms以內(nèi) W4=1; } void main()//主函數(shù) { while(1)//大循環(huán) { ST=0; ST=1; //獲得上升沿復位 ST=0; //獲得下降沿啟動轉(zhuǎn)換,同時ALE開鎖存 do { CLK=~CLK; //時鐘信號 } while(EOC==0);//等待轉(zhuǎn)換結(jié)束,eoc=1結(jié)束 OE=1;//三態(tài)鎖存緩沖器打開 date=P1;//數(shù)字電壓信號輸出 OE=0;//三態(tài)鎖存緩沖器關閉 display(date);//調(diào)用液晶顯示電壓值子函數(shù) } }
|