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

QQ登錄

只需一步,快速開始

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

注釋詳細(xì)的單片機(jī)火災(zāi)報(bào)警器程序和電路原理圖

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
51單片機(jī)火災(zāi)報(bào)警器電路原理圖如下:



單片機(jī)源程序如下:
  1. //程序頭函數(shù)
  2. #include <reg52.h>
  3. //顯示函數(shù)
  4. #include <display.h>        //顯示函數(shù)display.h在工程里        也可鼠標(biāo)選中左邊右鍵open document <display.h>

  5. //宏定義
  6. #define uint unsigned int
  7. #define uchar unsigned char
  8. #define Data_ADC0809 P1                 //定義P1口為Data_ADC0809 (之后的程序里Data_ADC0809即代表P1口)

  9. //管腳聲明
  10. sbit LED_yanwu= P2^1;                 //煙霧報(bào)警燈
  11. sbit baojing= P2^5;                         //蜂鳴器接口
  12. //ADC0809
  13. sbit ST=P3^3;
  14. sbit EOC=P3^6;
  15. sbit OE=P3^2;
  16. //按鍵
  17. sbit Key1=P2^6;                                 //設(shè)置鍵
  18. sbit Key2=P2^7;                                 //加按鍵
  19. sbit Key3=P3^7;                                 //減按鍵

  20. //酒精含量變量
  21. uchar temp;                                         //用于讀取ADC數(shù)據(jù)
  22. uchar yushe_yanwu=45;                 //煙霧預(yù)設(shè)值
  23. //按鈕模式|  
  24. uchar Mode=0;                                 //=1是設(shè)置溫度閥值  =2是設(shè)置煙霧閥值

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

  28. //ADC0809讀取信息
  29. uchar ADC0809()
  30. {
  31.         uchar temp_=0x00;
  32.         //初始化高阻太

  33.         OE=0;
  34.         //轉(zhuǎn)化初始化
  35.         ST=0;
  36.         //開始轉(zhuǎn)換
  37.         ST=1;
  38.         ST=0;
  39.         //外部中斷等待AD轉(zhuǎn)換結(jié)束
  40.         while(EOC==0)
  41.         //讀取轉(zhuǎn)換的AD值
  42.         OE=1;
  43.         temp_=Data_ADC0809;
  44.         OE=0;
  45.         return temp_;
  46. }

  47. void Key()
  48. {
  49.         //模式選擇
  50.         if(Key1==0)          //設(shè)置按鍵
  51.         {
  52.                 while(Key1==0);
  53.                 if(Mode>=2) Mode=0;
  54.                 else
  55.                 {
  56. //                           write_com(0x38);//屏幕初始化
  57.                            write_com(0x0f);//打開顯示 無(wú)光標(biāo) 光標(biāo)閃爍
  58. //                           write_com(0x06);//當(dāng)讀或?qū)懸粋(gè)字符是指針后一一位
  59.                         Mode++;                        //模式加一
  60.                         switch(Mode)        //判斷模式的值
  61.                         {
  62.                                 case 1:
  63.                                 {
  64.                                         write_com(0x80+7);//為1時(shí) 溫度閥值的位置閃爍
  65.                                         break;                          //執(zhí)行后跳出switch
  66.                                 }
  67.                                 case 2:                                        //當(dāng)模式加到3時(shí)
  68.                                 {
  69. //                                        write_com(0x38);//屏幕初始化
  70.                                         write_com(0x0c);//打開顯示 無(wú)光標(biāo) 無(wú)光標(biāo)閃爍
  71.                                         Mode=0;                        //模式清零
  72.                                         break;
  73.                                 }
  74.                         }
  75.                 }
  76.         }
  77.         if(Key2==0&&Mode!=0)         //加按鍵只有在模式不等于0時(shí)有效
  78.         {
  79.                 while(Key2==0);
  80.                 yushe_yanwu++;                                           //同溫度閥值設(shè)置
  81.                 if(yushe_yanwu>=255)
  82.                 yushe_yanwu=255;
  83.                 write_com(0x80+13);
  84.                 write_data(0x30+yushe_yanwu/100);
  85.                 write_data(0x30+yushe_yanwu%100/10);
  86.                 write_data(0x30+yushe_yanwu%10);
  87.                 write_com(0x80+15);
  88.         }
  89.         if(Key3==0&&Mode!=0)
  90.         {
  91.                 while(Key3==0);
  92.                 yushe_yanwu--;                                                          //同上
  93.                 if(yushe_yanwu<=0)
  94.                 yushe_yanwu=0;
  95.                 write_com(0x80+13);
  96.                 write_data(0x30+yushe_yanwu/100);
  97.                 write_data(0x30+yushe_yanwu%100/10);
  98.                 write_data(0x30+yushe_yanwu%10);
  99.                 write_com(0x80+15);
  100.         }
  101. }
  102. /*****主函數(shù)*****/
  103. void main()
  104. {
  105.         Init1602();                          //調(diào)用初始化顯示函數(shù)
  106.         while(1)                          //進(jìn)入循環(huán)
  107.         {
  108.                 temp=ADC0809();          //讀取煙霧值
  109.                 Key();                          //調(diào)用按鍵函數(shù)  掃描按鍵

  110.                 if(Mode==0)                  //只有當(dāng)模式為0時(shí)才會(huì)執(zhí)行以下的閥值判斷部分
  111.                 {
  112.                         Display_1602(yushe_yanwu,temp);  //顯示預(yù)設(shè)煙霧,煙霧值
  113.                         if(temp>=yushe_yanwu)          //煙霧值大于等于預(yù)設(shè)值時(shí)
  114.                         {
  115.                                 LED_yanwu=0;                  //煙霧指示燈亮
  116.                                 baojing=0;                          //蜂鳴器報(bào)警
  117.                         }
  118.                         else                                          //煙霧值小于預(yù)設(shè)值時(shí)
  119.                         {
  120.                                 LED_yanwu=1;                  //關(guān)掉報(bào)警燈
  121.                         }
  122.                         if(temp<yushe_yanwu)          //當(dāng)煙霧小于預(yù)設(shè)值并且溫度也小于預(yù)設(shè)值時(shí) (&&:邏輯與,左右兩邊的表達(dá)式都成立(都為真,也就是1)時(shí),該if語(yǔ)句才成立)
  123.                         {
  124.                                 baojing=1;                          //停止報(bào)警
  125.                         }
  126.                 }
  127.         }
  128. }        
復(fù)制代碼

Keil代碼下載: 火災(zāi)報(bào)警器程序和pdf格式原理圖.7z (79.91 KB, 下載次數(shù): 31)

評(píng)分

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

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:1075763 發(fā)表于 2023-5-6 21:51 來(lái)自手機(jī) | 只看該作者
哥,我現(xiàn)在做設(shè)計(jì),我缺一個(gè)文件代碼,,哥,能不能幫幫我
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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