|
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 上傳
 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
|
評(píng)分
-
查看全部評(píng)分
|