|
酒精傳感器仿真中沒(méi)有,其實(shí)就是傳感器檢測(cè)時(shí)相應(yīng)的電阻值會(huì)變化,用滑動(dòng)電位器代替就ok
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png (17.75 KB, 下載次數(shù): 65)
下載附件
2019-6-1 02:57 上傳
數(shù)碼管顯示酒精測(cè)試儀元件清單
1) 9*15萬(wàn)用板
2) STC89C51單片機(jī)
3) AD0809
4) 40腳IC座
5) 28腳IC座
6) MQ-3酒精傳感器
7) 103排阻
8) 0.56四位一體共陽(yáng)數(shù)碼管
9) 9012三極管*5
10) 2.2k電阻*6
11) 220歐姆電阻
12) 10k電阻
13) 10uf電容
14) 30pf電容*2
15) 12M晶振
16) 5mm紅LED
17) 按鍵*3
18) 蜂鳴器
19) 自鎖開(kāi)關(guān)
20) DC電源插口
21) 導(dǎo)線若干
22) 焊錫若干
23) USB電源線或電池盒+DC插頭
單片機(jī)源程序如下:
- //程序頭函數(shù)
- #include <reg52.h>
- //宏定義
- #define uint unsigned int
- #define uchar unsigned char
- #define Data_ADC0809 P1 //定義P1口為Data_ADC0809
-
- //管腳聲明
- sbit Feng = P3^0; //蜂鳴器
- //ADC0809
- sbit ST=P3^3;
- sbit EOC=P3^4;
- sbit OE=P3^2;
- //按鍵
- sbit Key1=P3^5;
- sbit Key2=P3^6;
- sbit Key3=P3^7;
- bit shan=0; //閃爍標(biāo)志位
- //顯示數(shù)組 0-9+F
- uchar Data_[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x71,0x3f}; //共陰顯示數(shù)組
- sbit Wei1 = P2^7;
- sbit Wei2 = P2^6;
- sbit Wei3 = P2^5;
- sbit Wei4 = P2^4; //四個(gè)數(shù)碼管的位選端口
- //函數(shù)聲明
- extern uchar ADC0809();
- void Display(uchar X,uchar Data);
- void delay(uint t);
- //酒精含量變量
- uchar temp=0;
- //蜂鳴器變量
- uchar FF=10;
- //顯示模式
- uchar Mode=0;
- uchar p;
- void main() //主函數(shù)
- {
- TH0=0x3c;
- TL0=0xb0;//賦初值50ms
- TMOD=0x01;//設(shè)置工作方式
- EA=1;//打開(kāi)中斷總開(kāi)關(guān)
- ET0=1;//打開(kāi)允許開(kāi)關(guān)
- TR0=1; //打開(kāi)定時(shí)器定時(shí)開(kāi)關(guān)
- while(1) //進(jìn)入循環(huán),括號(hào)內(nèi)為1,所以程序進(jìn)入循環(huán)就不會(huì)出來(lái)了,所以就叫死循環(huán)
- {
- //正常模式
- if(Mode==0)
- {
- //讀取AD值
- temp=ADC0809();
- for(p=0;p<30;p++) //調(diào)用三十次顯示函數(shù)
- Display(0,temp);
- //判斷是否報(bào)警
- if((shan==1)&&(temp>FF)) //閃爍變量為1時(shí)并且大于報(bào)警值
- {
- Feng=0; //蜂鳴器響
- }
- if(shan==0) //閃爍變量為0時(shí)
- {
- Feng=1; //關(guān)閉蜂鳴器
- } //(閃爍變量shan受定時(shí)器控制,500ms取反一次,達(dá)到1秒響一下的效果)
- }
- //調(diào)整模式
- else
- {
- Display(1,FF); //顯示報(bào)警值界面
- }
- //功能鍵
- if(Key3==0) //設(shè)置鍵按下(按鍵一端接地,一端接單片機(jī)IO口,當(dāng)按鍵按下時(shí),單片機(jī)的IO口就會(huì)檢測(cè)到低電平)
- {
- Feng=0; //蜂鳴器響
- delay(100); //延時(shí)去抖
- while(Key3==0) //判斷按鍵是否按下
- {
- if(Mode==0) //正常模式
- Display(0,temp);//顯示正常界面
- else //設(shè)置報(bào)警值
- Display(1,FF); //顯示報(bào)警值界面
- }
- if(Mode==0) //如果是正常模式,按下設(shè)置鍵,就切換到設(shè)置模式
- Mode=1;
- else //如果是設(shè)置模式,按下設(shè)置鍵,就切換到正常模式
- Mode=0;
- Feng=1; //關(guān)閉蜂鳴器
- }
- //增加
- if(Key2==0&&Mode==1) //加鍵按下
- {
- Feng=0; //蜂鳴器響
- delay(100);
- while(Key2==0)
- {
- Display(1,FF); //顯示設(shè)置界面
- }
- FF++; //報(bào)警值加
- if(FF>=251) //最大加到250
- FF=250;
- Feng=1; //關(guān)閉蜂鳴器
- }
- //減少
- if(Key1==0&&Mode==1) //減按鍵按下,注釋參考加按鍵注釋
- {
- Feng=0;
- delay(100);
- while(Key1==0)
- {
- Display(1,FF);
- }
- FF--;
- if(FF==0xff) //報(bào)警值減到小于0
- FF=0; //最小值就是0
- Feng=1;
- }
- }
- }
- //ADC0809讀取信息
- uchar ADC0809()
- {
- uchar temp_=0x00;
- //初始化高阻太
- OE=0;
- //轉(zhuǎn)化初始化
- ST=0;
- //開(kāi)始轉(zhuǎn)換
- ST=1;
- ST=0;
- //外部中斷等待AD轉(zhuǎn)換結(jié)束
- while(EOC==0)
- //讀取轉(zhuǎn)換的AD值
- OE=1;
- temp_=Data_ADC0809;
- OE=0;
- return temp_;
- }
- //延時(shí)
- void delay(uint t)
- {
- uint i,j;
- for(i=0;i<t;i++)
- for(j=0;j<10;j++);
- }
- //顯示 X表示狀態(tài) Data表示數(shù)據(jù)
- void Display(uchar X,uchar Data)
- {
- Wei1=1;
- Wei2=1;
- Wei3=1;
- Wei4=1;
- P0=0xff; //關(guān)閉顯示
- //正常模式
- if(X==0)
- {
- P0=~Data_[11]; //顯示0,也就是正常模式時(shí),第一個(gè)位置顯示0
- }
- //非正常
- else
- {
- P0=~Data_[10]; //設(shè)置模式,第一位顯示字母F
- }
- Wei1=0; //選中第一位,其他位關(guān)閉
- Wei2=1;
- Wei3=1;
- Wei4=1;
- delay(10); //延時(shí)
- Wei1=1; //關(guān)閉所有位
- Wei2=1;
- Wei3=1;
- Wei4=1;
- P0=~Data_[Data/100]; //顯示數(shù)值的百位,例如數(shù)據(jù)是123,除以100的商是1,這里顯示的就是數(shù)字1
- Wei1=1;
- Wei2=0; //選中第二位
- Wei3=1;
- Wei4=1;
- delay(10); //延時(shí)
- Wei1=1; //關(guān)閉所有位
- Wei2=1;
- Wei3=1;
- Wei4=1;
- P0=~Data_[Data%100/10];//顯示數(shù)值的十位,數(shù)值是123,取余的作用就是除以100后的余數(shù),是23,23再除以10得到的商是2,這里顯示的就是2
- Wei1=1;
- Wei2=1;
- Wei3=0;
- Wei4=1;
- delay(10);
- Wei1=1;
- Wei2=1;
- Wei3=1;
- Wei4=1;
- P0=~Data_[Data%10]; //顯示數(shù)值的個(gè)位,數(shù)值是123,取余10就是數(shù)值除以10的余數(shù)就是3,這里顯示的就是3
- Wei1=1;
- Wei2=1;
- Wei3=1;
- Wei4=0;
- delay(10);
- Wei1=1;
- Wei2=1;
- Wei3=1;
- Wei4=1;
- }
- void time0() interrupt 1//定時(shí)器函數(shù)
- {
- uchar m;
- TH0=0x3c;
- TL0=0xb0;//重新賦初值
- m++; //定時(shí)器進(jìn)入一次是50ms,m加一次
- if(m==10) //加10次,也就是500ms
- {
- shan=~shan; //控制shan變量取反,就是0變1,1變0
- m=0; //m清零
- }
- }
復(fù)制代碼
所有資料51hei提供下載:
數(shù)碼管酒精濃度測(cè)試儀.rar
(2.8 MB, 下載次數(shù): 113)
2019-5-31 16:58 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|