久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

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

QQ登錄

只需一步,快速開始

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

之前做的酒精檢測(cè)并lcd1602顯示的單片機(jī)代碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:639814 發(fā)表于 2019-12-2 18:45 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
1.本設(shè)計(jì)采用STC89C51/52(與AT89S51/52、AT89C51/52通用,可任選)單片機(jī)
2.采用AD0809模數(shù)轉(zhuǎn)換芯片將MQ-3酒精傳感器采集的電壓信號(hào)轉(zhuǎn)換成數(shù)字信號(hào)
3.液晶1602顯示酒精濃度。可以按鍵設(shè)置報(bào)警值,蜂鳴器和LED報(bào)警
4.當(dāng)濃度沒有超過設(shè)置的閥值的時(shí)候綠燈閃亮,當(dāng)超過上限值時(shí)候紅燈閃爍并蜂鳴器報(bào)警。


單片機(jī)源程序如下:
  1. //程序頭函數(shù)
  2. #include <reg52.h>
  3. //顯示函數(shù)
  4. #include <display.h>

  5. #include <intrins.h>
  6. #include "eeprom52.h"
  7. //宏定義
  8. #define uint unsigned int
  9. #define uchar unsigned char
  10. #define Data_ADC0809 P1

  11. //管腳聲明
  12. sbit LED_R= P2^2; //紅指示燈
  13. sbit LED_G= P2^0; //綠色指示燈
  14. sbit FENG = P2^5; //蜂鳴器
  15. //ADC0809
  16. sbit ST=P3^3;
  17. sbit EOC=P3^6;
  18. sbit OE=P3^2;
  19. //按鍵
  20. sbit Key1=P2^6;        //設(shè)置按鍵
  21. sbit Key2=P2^7; //加
  22. sbit Key3=P3^7;        //減

  23. bit bdata flag;//指示燈和蜂鳴器閃爍報(bào)警標(biāo)志位
  24. uchar set;          //設(shè)置標(biāo)志位


  25. //函數(shù)聲明
  26. extern uchar ADC0809();
  27. extern void Key();

  28. //酒精含量變量
  29. uchar temp=0;



  30. uchar WARNING=25; // 初始報(bào)警值

  31. /******************把數(shù)據(jù)保存到單片機(jī)內(nèi)部eeprom中******************/
  32. void write_eeprom()
  33. {
  34.         SectorErase(0x2000);
  35.         byte_write(0x2000, WARNING);
  36.         byte_write(0x2060, a_a);       
  37. }

  38. /******************把數(shù)據(jù)從單片機(jī)內(nèi)部eeprom中讀出來*****************/
  39. void read_eeprom()
  40. {
  41.         WARNING   = byte_read(0x2000);
  42.         a_a      = byte_read(0x2060);
  43. }

  44. /**************開機(jī)自檢eeprom初始化*****************/
  45. void init_eeprom()
  46. {
  47.         read_eeprom();                //先讀
  48.         if(a_a != 1)                //新的單片機(jī)初始單片機(jī)內(nèi)問eeprom
  49.         {
  50.                 WARNING   = 25;
  51.                 a_a = 1;
  52.                 write_eeprom();           //保存數(shù)據(jù)
  53.         }       
  54. }
  55. //初始化函數(shù)
  56. void init()         
  57. {
  58.         TMOD=0x01; //定時(shí)器0方式1
  59.         TL0=0xb0;
  60.         TH0=0x3c;  //賦初值
  61.         EA=1;        //開總中斷
  62.         ET0=1;        //允許定時(shí)器0中斷
  63.         TR0=1;        //定時(shí)器0開
  64. }
  65. //主函數(shù)
  66. void main()
  67. {
  68.         Init1602();        //1602初始化
  69.         init_eeprom();  //開始初始化保存的數(shù)據(jù)
  70.         init();         //初始化函數(shù)
  71.         while(1)//主循環(huán)
  72.         {
  73.                 if(set==0) //如果沒有按下設(shè)置(默認(rèn)set是0,就是正常顯示狀態(tài))
  74.                 {
  75.                         temp=ADC0809();        //讀取酒精值
  76.                         Display_1602(temp,WARNING);         //顯示酒精值
  77.                 }
  78.                 if(temp<WARNING&&set==0)        //如果實(shí)際的酒精值小于報(bào)警值且在正常顯示狀態(tài)下
  79.                 {
  80.                         flag=0;         //執(zhí)行下面flag=0的(主要就是綠燈閃,關(guān)蜂鳴器和繼電器)
  81.                 }
  82.                 else if(temp>WARNING&&set==0)  //如果實(shí)際的酒精值大于報(bào)警值且在正常顯示狀態(tài)下
  83.                 {
  84.                         flag=1;        //執(zhí)行下面flag=1的(主要就是紅燈閃,開蜂鳴器和繼電器)
  85.                 }
  86.                 Key();//按鍵掃描
  87.         }
  88. }
  89. //ADC0809讀取信息
  90. uchar ADC0809()
  91. {
  92.         uchar temp_=0x00;
  93.         //初始化高阻太

  94.         OE=0;
  95.         //轉(zhuǎn)化初始化
  96.         ST=0;
  97.         //開始轉(zhuǎn)換
  98.         ST=1;
  99.         ST=0;
  100.         //外部中斷等待AD轉(zhuǎn)換結(jié)束
  101.         while(EOC==0)
  102.         //讀取轉(zhuǎn)換的AD值
  103.         OE=1;
  104.         temp_=Data_ADC0809;
  105.         OE=0;
  106.         return temp_;
  107. }
  108. //按鍵函數(shù)
  109. void Key()
  110. {
  111.         if(Key1==0)        //如果設(shè)置按鍵按下
  112.         {
  113.                 while(Key1==0);//等待按鍵釋放
  114.                 FENG=0;        //蜂鳴器響
  115.                 set++;        //設(shè)置的變量加1
  116.                 flag=0;        //綠燈閃
  117.                 TR0=0;        //關(guān)定時(shí)器0
  118.                 write_com(0x0f);//打開顯示 無光標(biāo) 光標(biāo)閃爍
  119.                 write_com(0x80+0x40+13);//位置
  120. //                   write_com(0x06);//當(dāng)讀或?qū)懸粋(gè)字符是指針后一一位
  121.                 FENG=1;        //蜂鳴器關(guān)
  122.         }
  123.         if(set>=2)        //又按了下設(shè)置
  124.         {
  125.                 set=0;        //正常顯示狀態(tài)
  126. //                write_com(0x38);//屏幕初始化
  127.                 write_com(0x0c);//打開顯示 無光標(biāo) 無光標(biāo)閃爍
  128.                 FENG=1;        //蜂鳴器關(guān)
  129.                 flag=1;        //紅燈閃
  130.                 TR0=1;        //定時(shí)器0開
  131.         }
  132.         if(Key2==0&&set!=0)          //在設(shè)置的狀態(tài)下按下加
  133.         {
  134.                 while(Key2==0);          //等待按鍵釋放
  135.                 FENG=0;                //蜂鳴器響
  136.                 WARNING++;        //報(bào)警值加1
  137.                 if(WARNING>=255)  //如果報(bào)警值大于等于255
  138.                 WARNING=0;                 //報(bào)警值歸零
  139.                 write_com(0x80+0x40+11);
  140.                 write_data('0'+WARNING/100);
  141.                 write_data('0'+WARNING/10%10);
  142.                 write_data('0'+WARNING%10);           //顯示報(bào)警值
  143.                 write_com(0x80+0x40+13);//調(diào)整位置
  144.                 FENG=1;         //蜂鳴器關(guān)
  145.                 write_eeprom();                           //保存數(shù)據(jù)
  146.         }
  147.         if(Key3==0&&set!=0)         //在設(shè)置的狀態(tài)下按下減
  148.         {
  149.                 while(Key3==0);         //等待按鍵釋放
  150.                 FENG=0;                 //蜂鳴器響
  151.                 WARNING--;         //報(bào)警值減1
  152.                 if(WARNING<=0)        //如果報(bào)警值小于等于0
  153.                 WARNING=255;        //那么報(bào)警值為255
  154.                 write_com(0x80+0x40+11);
  155.                 write_data('0'+WARNING/100);
  156.                 write_data('0'+WARNING/10%10);
  157.                 write_data('0'+WARNING%10);
  158.                 write_com(0x80+0x40+13);//調(diào)整位置
  159.                 FENG=1;         //蜂鳴器關(guān)
  160.                 write_eeprom();                           //保存數(shù)據(jù)
  161.         }
  162. }

  163. void  time1_int(void) interrupt 1 //定時(shí)器中斷0
  164. {
  165.         uchar count;
  166.         TL0=0xb0;
  167.         TH0=0x3c;  //重賦初值50ms
  168.           count++;  ///溢出值加1
  169.         if(count==10)  //如果時(shí)間到半秒
  170.         {
  171.                 if(flag==0)          //如果flag為0
  172.                 {
  173.                         LED_G=0;  //綠燈亮
  174.                         LED_R=1;  //紅燈滅
  175.                         FENG=1;          //蜂鳴器關(guān)
  176.                 }
  177.                 if(flag==1)           //如果flag為1
  178.                 {
  179.                         LED_G=1;   //綠燈關(guān)
  180.                         LED_R=0;   //紅燈亮
  181.                         FENG=0;           //蜂鳴器開
  182.                 }
  183.         }

  184.            if(count==20)          //如果時(shí)間到1秒
  185.            {
  186.                 count=0;          //溢出值清零
  187.                 if(flag==0)         //如果flag為0
  188.                 {
  189.                         LED_G=1;        //綠燈關(guān)
  190.                         LED_R=1;        //紅燈滅
  191.                         FENG=1;           //蜂鳴器關(guān)
  192.                 }
  193.                 if(flag==1)           //如果flag為1
  194.                 {
  195.                         LED_G=1;   //綠燈關(guān)
  196.                         LED_R=1;        //紅燈滅
  197.                         FENG=1;           //蜂鳴器關(guān)
  198.                 }
  199.         }
  200. }
復(fù)制代碼

所有資料51hei提供下載:
1-程序.zip (46.29 KB, 下載次數(shù): 28)

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

使用道具 舉報(bào)

沙發(fā)
ID:1 發(fā)表于 2019-12-4 18:17 | 只看該作者
本帖需要重新編輯補(bǔ)全電路原理圖,源碼,詳細(xì)說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 黄色毛片在线看 | 色接久久| 成人在线日韩 | 精品久久久久久亚洲精品 | 日韩欧美精品 | 欧美精品区 | 欧美二三区 | 国产亚洲精品美女久久久久久久久久 | 国产乱码精品1区2区3区 | 欧美精品久久久久久 | 天天天天操 | 国产一区免费视频 | 久久久久久久一区 | 在线不卡 | 国产免费福利在线 | 日本一区二区三区视频在线 | 欧美综合一区 | 精品国产1区2区3区 在线国产视频 | 五月激情婷婷在线 | 亚洲日日夜夜 | 97国产一区二区精品久久呦 | 欧美一级二级在线观看 | 高清黄色毛片 | 国产精品福利网站 | 男女视频在线观看免费 | 日本不卡高字幕在线2019 | 日韩电影在线一区 | 成人动慢 | 九色 在线 | 国产电影一区二区三区爱妃记 | 国产成人精品av | 久久中文字幕电影 | 成人亚洲视频 | 激情国产视频 | 色精品 | 日本三级全黄三级a | 99re国产视频| 蜜桃免费av | 久久久www成人免费无遮挡大片 | 91视频在线观看 | 欧美又大粗又爽又黄大片视频 |