找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 6313|回復(fù): 6
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)數(shù)碼顯示酒精濃度測(cè)試儀的仿真程序設(shè)計(jì)與制作

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:66679 發(fā)表于 2019-5-31 16:58 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
酒精傳感器仿真中沒(méi)有,其實(shí)就是傳感器檢測(cè)時(shí)相應(yīng)的電阻值會(huì)變化,用滑動(dòng)電位器代替就ok
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


數(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ī)源程序如下:
  1. //程序頭函數(shù)
  2. #include <reg52.h>

  3. //宏定義
  4. #define uint unsigned int
  5. #define uchar unsigned char
  6. #define Data_ADC0809 P1                   //定義P1口為Data_ADC0809

  7. //管腳聲明
  8. sbit Feng = P3^0;                   //蜂鳴器
  9. //ADC0809
  10. sbit ST=P3^3;
  11. sbit EOC=P3^4;
  12. sbit OE=P3^2;
  13. //按鍵
  14. sbit Key1=P3^5;
  15. sbit Key2=P3^6;
  16. sbit Key3=P3^7;
  17. bit shan=0;                                   //閃爍標(biāo)志位

  18. //顯示數(shù)組                0-9+F
  19. uchar Data_[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x71,0x3f};         //共陰顯示數(shù)組
  20. sbit Wei1 = P2^7;
  21. sbit Wei2 = P2^6;
  22. sbit Wei3 = P2^5;
  23. sbit Wei4 = P2^4;                                 //四個(gè)數(shù)碼管的位選端口
  24. //函數(shù)聲明
  25. extern uchar ADC0809();
  26. void Display(uchar X,uchar Data);
  27. void delay(uint t);

  28. //酒精含量變量
  29. uchar temp=0;
  30. //蜂鳴器變量
  31. uchar FF=10;
  32. //顯示模式
  33. uchar Mode=0;
  34. uchar p;

  35. void main()                                  //主函數(shù)
  36. {
  37.         TH0=0x3c;
  38.         TL0=0xb0;//賦初值50ms
  39.         TMOD=0x01;//設(shè)置工作方式
  40.         EA=1;//打開(kāi)中斷總開(kāi)關(guān)
  41.         ET0=1;//打開(kāi)允許開(kāi)關(guān)
  42.         TR0=1;        //打開(kāi)定時(shí)器定時(shí)開(kāi)關(guān)
  43.         while(1)           //進(jìn)入循環(huán),括號(hào)內(nèi)為1,所以程序進(jìn)入循環(huán)就不會(huì)出來(lái)了,所以就叫死循環(huán)
  44.         {
  45.                 //正常模式
  46.                 if(Mode==0)
  47.                 {
  48.                         //讀取AD值
  49.                         temp=ADC0809();
  50.                         for(p=0;p<30;p++)           //調(diào)用三十次顯示函數(shù)
  51.                         Display(0,temp);
  52.                         //判斷是否報(bào)警
  53.                         if((shan==1)&&(temp>FF))   //閃爍變量為1時(shí)并且大于報(bào)警值
  54.                         {
  55.                                 Feng=0;                                   //蜂鳴器響
  56.                         }
  57.                         if(shan==0)                                   //閃爍變量為0時(shí)
  58.                         {
  59.                                 Feng=1;                                   //關(guān)閉蜂鳴器
  60.                         }                                                                   //(閃爍變量shan受定時(shí)器控制,500ms取反一次,達(dá)到1秒響一下的效果)
  61.                 }
  62.                 //調(diào)整模式
  63.                 else
  64.                 {
  65.                         Display(1,FF);                //顯示報(bào)警值界面
  66.                 }
  67.                 //功能鍵
  68.                 if(Key3==0)                                   //設(shè)置鍵按下(按鍵一端接地,一端接單片機(jī)IO口,當(dāng)按鍵按下時(shí),單片機(jī)的IO口就會(huì)檢測(cè)到低電平)
  69.                 {
  70.                         Feng=0;                                        //蜂鳴器響
  71.                         delay(100);                                //延時(shí)去抖
  72.                         while(Key3==0)                        //判斷按鍵是否按下
  73.                         {
  74.                                 if(Mode==0)                        //正常模式
  75.                                         Display(0,temp);//顯示正常界面       
  76.                                 else                                //設(shè)置報(bào)警值
  77.                                         Display(1,FF);        //顯示報(bào)警值界面                                                               
  78.                         }
  79.                         if(Mode==0)                                //如果是正常模式,按下設(shè)置鍵,就切換到設(shè)置模式
  80.                                 Mode=1;
  81.                         else                                        //如果是設(shè)置模式,按下設(shè)置鍵,就切換到正常模式
  82.                                 Mode=0;
  83.                         Feng=1;                                        //關(guān)閉蜂鳴器
  84.                 }
  85.                 //增加
  86.                 if(Key2==0&&Mode==1)                //加鍵按下
  87.                 {
  88.                         Feng=0;                                        //蜂鳴器響
  89.                         delay(100);
  90.                         while(Key2==0)
  91.                         {
  92.                                         Display(1,FF);        //顯示設(shè)置界面                                                               
  93.                         }
  94.                         FF++;                                        //報(bào)警值加
  95.                         if(FF>=251)                                //最大加到250
  96.                                 FF=250;       
  97.                         Feng=1;                                        //關(guān)閉蜂鳴器
  98.                 }
  99.                 //減少
  100.                 if(Key1==0&&Mode==1)                //減按鍵按下,注釋參考加按鍵注釋
  101.                 {
  102.                         Feng=0;
  103.                         delay(100);
  104.                         while(Key1==0)
  105.                         {
  106.                                         Display(1,FF);                                                                       
  107.                         }
  108.                         FF--;
  109.                         if(FF==0xff)                        //報(bào)警值減到小于0
  110.                                 FF=0;                                //最小值就是0
  111.                         Feng=1;
  112.                 }
  113.         }
  114. }
  115. //ADC0809讀取信息
  116. uchar ADC0809()
  117. {
  118.         uchar temp_=0x00;
  119.         //初始化高阻太
  120.         OE=0;
  121.         //轉(zhuǎn)化初始化
  122.         ST=0;
  123.         //開(kāi)始轉(zhuǎn)換
  124.         ST=1;
  125.         ST=0;
  126.         //外部中斷等待AD轉(zhuǎn)換結(jié)束
  127.         while(EOC==0)
  128.         //讀取轉(zhuǎn)換的AD值
  129.         OE=1;
  130.         temp_=Data_ADC0809;
  131.         OE=0;
  132.         return temp_;
  133. }
  134. //延時(shí)
  135. void delay(uint t)
  136. {
  137.         uint i,j;
  138.         for(i=0;i<t;i++)
  139.                 for(j=0;j<10;j++);
  140. }

  141. //顯示       X表示狀態(tài)     Data表示數(shù)據(jù)
  142. void Display(uchar X,uchar Data)
  143. {
  144.         Wei1=1;
  145.         Wei2=1;
  146.         Wei3=1;
  147.         Wei4=1;
  148.         P0=0xff;                        //關(guān)閉顯示

  149.         //正常模式
  150.         if(X==0)
  151.         {
  152.                 P0=~Data_[11];         //顯示0,也就是正常模式時(shí),第一個(gè)位置顯示0
  153.         }
  154.         //非正常
  155.         else                                 
  156.         {
  157.                 P0=~Data_[10];         //設(shè)置模式,第一位顯示字母F
  158.         }
  159.         Wei1=0;                                 //選中第一位,其他位關(guān)閉
  160.         Wei2=1;
  161.         Wei3=1;
  162.         Wei4=1;
  163.         delay(10);                         //延時(shí)
  164.         Wei1=1;                                 //關(guān)閉所有位
  165.         Wei2=1;
  166.         Wei3=1;
  167.         Wei4=1;

  168.         P0=~Data_[Data/100]; //顯示數(shù)值的百位,例如數(shù)據(jù)是123,除以100的商是1,這里顯示的就是數(shù)字1
  169.         Wei1=1;
  170.         Wei2=0;                                 //選中第二位
  171.         Wei3=1;
  172.         Wei4=1;
  173.         delay(10);                         //延時(shí)
  174.         Wei1=1;                                 //關(guān)閉所有位
  175.         Wei2=1;
  176.         Wei3=1;
  177.         Wei4=1;


  178.         P0=~Data_[Data%100/10];//顯示數(shù)值的十位,數(shù)值是123,取余的作用就是除以100后的余數(shù),是23,23再除以10得到的商是2,這里顯示的就是2
  179.         Wei1=1;
  180.         Wei2=1;
  181.         Wei3=0;
  182.         Wei4=1;
  183.         delay(10);
  184.         Wei1=1;
  185.         Wei2=1;
  186.         Wei3=1;
  187.         Wei4=1;

  188.         P0=~Data_[Data%10];          //顯示數(shù)值的個(gè)位,數(shù)值是123,取余10就是數(shù)值除以10的余數(shù)就是3,這里顯示的就是3
  189.         Wei1=1;
  190.         Wei2=1;
  191.         Wei3=1;
  192.         Wei4=0;
  193.         delay(10);
  194.         Wei1=1;
  195.         Wei2=1;
  196.         Wei3=1;
  197.         Wei4=1;

  198. }
  199. void time0() interrupt 1//定時(shí)器函數(shù)
  200. {
  201.         uchar m;
  202.         TH0=0x3c;
  203.         TL0=0xb0;//重新賦初值
  204.         m++;          //定時(shí)器進(jìn)入一次是50ms,m加一次
  205.         if(m==10)  //加10次,也就是500ms
  206.         {
  207.                 shan=~shan;          //控制shan變量取反,就是0變1,1變0
  208.                 m=0;                  //m清零
  209.         }
  210. }
復(fù)制代碼

所有資料51hei提供下載:
數(shù)碼管酒精濃度測(cè)試儀.rar (2.8 MB, 下載次數(shù): 113)



評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:555934 發(fā)表于 2019-6-5 22:40 | 只看該作者
您好,為什么protuce仿真不出來(lái)?
回復(fù)

使用道具 舉報(bào)

板凳
ID:555934 發(fā)表于 2019-6-6 09:37 來(lái)自手機(jī)
您好,急用啊,馬上交課程設(shè)計(jì)了,請(qǐng)問(wèn)為啥仿真不出來(lái)?

地板
ID:640963 發(fā)表于 2019-11-22 17:09 | 只看該作者
請(qǐng)問(wèn)有p'c'b
回復(fù)

使用道具 舉報(bào)

5#
ID:66679 發(fā)表于 2020-2-27 21:46 | 只看該作者
JKlxr 發(fā)表于 2019-6-5 22:40
您好,為什么protuce仿真不出來(lái)?

不好意思,一直沒(méi)登錄,可以仿真出來(lái)。
回復(fù)

使用道具 舉報(bào)

6#
ID:747411 發(fā)表于 2020-5-9 14:41 | 只看該作者
不能仿真運(yùn)行
回復(fù)

使用道具 舉報(bào)

7#
ID:747411 發(fā)表于 2020-5-9 22:20 來(lái)自手機(jī) | 只看該作者
hyjxxy 發(fā)表于 2020-2-27 21:46
不好意思,一直沒(méi)登錄,可以仿真出來(lái)。

運(yùn)行不了,運(yùn)行后不顯示數(shù)字
回復(fù)

使用道具 舉報(bào)

8#
ID:935804 發(fā)表于 2021-6-10 09:06 | 只看該作者
運(yùn)行不了還需要怎么修改啊
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表