標(biāo)題:
單片機(jī)ADC0808電壓表仿真程序
[打印本頁(yè)]
作者:
鄒民鑫
時(shí)間:
2018-9-29 21:10
標(biāo)題:
單片機(jī)ADC0808電壓表仿真程序
51單片機(jī)電壓表,ADC
0.png
(9.02 KB, 下載次數(shù): 66)
下載附件
2018-9-29 23:16 上傳
0.png
(41.22 KB, 下載次數(shù): 62)
下載附件
2018-9-29 23:16 上傳
LM324 CD4051
ADC0808
IN0~I(xiàn)N7:8路模擬量輸入端。
D0
~
D7
:8位數(shù)字量輸出端。
ADDA、ADDB、ADDC:3位地址輸入線,用于選通8路模擬輸入中的一路。
ALE:地址鎖存允許信號(hào),輸入端,產(chǎn)生一個(gè)正脈沖以鎖存地址。
START: A/D轉(zhuǎn)換啟動(dòng)脈沖輸入端,輸入一個(gè)正脈沖(至少100ns寬)使其啟動(dòng)(脈沖上升沿使0809復(fù)位,下降沿啟動(dòng)A/D轉(zhuǎn)換)。
EOC
:
A/D轉(zhuǎn)換結(jié)束信號(hào),輸出端,當(dāng)A/D轉(zhuǎn)換結(jié)束時(shí),此端輸出一個(gè)高電平(轉(zhuǎn)換期間一直為低電平)。
OE:
數(shù)據(jù)輸出
允許信號(hào),輸入端,高電平有效。當(dāng)A/D轉(zhuǎn)換結(jié)束時(shí),此端輸入一個(gè)高電平,才能打開輸出三態(tài)門,輸出數(shù)字量。
CLK:時(shí)鐘脈沖輸入端。要求
時(shí)鐘頻率
不高于640KHz。
REF(+)、REF(-):基準(zhǔn)電壓。
Vcc:電源,
接
+5V。
GND:地。
74LS74 74LS04
CD4511
A0
~
A3:二進(jìn)制數(shù)據(jù)輸入端
Ya
~
Yg:數(shù)據(jù)輸出端
BI:輸出消隱控制端,接電源
LT:燈測(cè)試端,接電源
LE:數(shù)據(jù)鎖定控制端,接地
VDD: 接電源
VSS:
接地
4位數(shù)碼管
AT89C52
單片機(jī)源程序如下:
#include <reg52.H>
#define uchar unsigned char;
uchar code scan_con[]={0x08,0x04,0x02,0x01}; //定義掃描片選
uchar dispbuf[4]={0,0,0,0}; //定義4個(gè)存儲(chǔ)空間
uchar getdata;
unsigned long int temp;//定義暫存空間
uchar i,j,k,l,m;
int a,b;
sbit s3=P3^7; //位定義,控制模擬開關(guān)
sbit s2=P3^6;
sbit s1=P3^5;
sbit dp=P0^7; //定義小數(shù)點(diǎn)
#define v20_on {s3=0;s2=0;s1=0;} //宏定義不同量程,不同的開關(guān)狀態(tài)
#define v2_on {s3=0;s2=0;s1=1;}
#define v02_on {s3=0;s2=1;s1=0;}
sbit ST=P3^1; //定義單片機(jī)和ADC的控制信號(hào)
sbit OE=P3^3;
sbit EOC=P3^2;
delay_ms(int n)
{
for(a=n;a>0;a--)
for(b=100;b>0;b--);
}
main(void)
{
while(1)
{
_20v: //2~20V量程
v20_on;
ST=1;
delay_ms(1); //啟動(dòng)A/D轉(zhuǎn)換
ST=0;
while(EOC==0)
OE=1;
getdata=P1;
OE=0;
if(getdata<21) //量程不合適,切換
{
goto _2v;
delay_ms(1);
}
l=3;
temp=getdata; //量程合適,數(shù)據(jù)處理
temp=temp*100;
temp=temp*5/51;
goto disp; //跳到數(shù)碼管顯示程序段
_2v: //200MV~2V量程
v2_on;
ST=1;
delay_ms(1); //啟動(dòng)A/D轉(zhuǎn)換
ST=0;
while(EOC==0)
OE=1;
getdata=P1;
OE=0;
if(getdata<21)
{
goto _02v;
delay_ms(1);
}
else if(getdata>204)
{
goto _20v;
delay_ms(1);
}
l=2;
temp=getdata;
temp=temp*100*5/51;
goto disp;
_02v: //0~200MV量程
v02_on;
OE=0;
ST=1;
delay_ms(1); //啟動(dòng)A/D轉(zhuǎn)換
ST=0;
while(EOC==0)
OE=1;
getdata=P1;
OE=0;
if(getdata>204)
{
goto _2v;
delay_ms(1);
}
l=1;
temp=getdata;
temp=temp*100*5/51;
disp:
dispbuf[3]=0;
dispbuf[2]=0;
dispbuf[1]=0;
dispbuf[0]=0;
i=0;
for(;temp;i++)//電壓值的每個(gè)位計(jì)
{
dispbuf[i]=temp%10;
temp=temp/10;
}
for(k=0;k<=3;k++) //數(shù)碼管顯示
{
if((k==3&&l==3&&i==3) ||(k==3&&l==1&&i==3))
continue;
P0=scan_con[k]; //位選
P2=dispbuf[k]&0x0f; //段選
if((l==3&&k==2)||(l==2&&k==3)||(l==1&&k==1))
dp=0 ;
else dp=1;
for(m=0;m<=2;m++)
for(j=0;j<=20;j++);
}
}
}
復(fù)制代碼
所有資料51hei提供下載:
電壓表.zip
(795.15 KB, 下載次數(shù): 23)
2018-9-29 21:09 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1