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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機(jī)煙霧報(bào)警器程序設(shè)計(jì)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1026441 發(fā)表于 2022-5-14 13:12 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #include <key.h>
  4. #include "DS18B20.h"   
  5. #define uint unsigned int
  6. #define uchar unsigned char   //宏定義
  7. //#define BEEP P3_4    //定義蜂鳴器
  8. //#define hujiao P1_3
  9. sbit BEEP=P1^6;
  10. sbit hujiao=P1^3;
  11. sbit RS=P2^5;
  12. sbit RW=P2^6;
  13. sbit EN=P2^7;
  14. sbit led_h=P1^4;
  15. sbit led_l=P1^5;
  16. sbit JDQ=P1^7;
  17. sbit ADCS = P3^7;
  18. sbit ADCLK = P3^5;
  19. sbit ADDI = P3^6;
  20. sbit ADDO = P3^6;
  21. bit shanshuo_st;    //閃爍間隔標(biāo)志
  22. bit beep_st;     //蜂鳴器間隔標(biāo)志
  23. bit flag=0;//緊急呼叫標(biāo)志
  24. uint abc;
  25. uchar x=4;      //計(jì)數(shù)器
  26. signed char m;     //溫度值全局變量
  27. uchar n;      //溫度值全局變量
  28. uchar data disdata[5];

  29. uchar code LEDData[]={0x28,0xeb,0x32,0xa2,0xe1,0xa4,0x24,0xea,0x20,0xa0};
  30. uchar code table[]={0x18,0x18,0x00,0x07,0x08,0x08,0x07,0x00};        // 攝氏溫度符號(hào)

  31. /*****初始化定時(shí)器0*****/
  32. void InitTimer(void)
  33. {
  34.         TMOD=0x01;
  35.         TH0=0x3c;
  36.         TL0=0xb0;     //50ms(晶振12M)
  37. }
  38. /*****定時(shí)器0中斷服務(wù)程序*****/
  39. void timer0(void) interrupt 1
  40. {
  41.         TH0=0x3c;
  42.         TL0=0xb0;
  43.         x++;
  44. }
  45. /*****讀取溫度*****/
  46. void check_wendu(void)
  47. {
  48.         uint a,b,c;
  49.         c=ReadTemperature()-5; //獲取溫度值并減去DS18B20的溫漂誤差
  50.         a=c/100;     //計(jì)算得到十位數(shù)字
  51.         b=c/10-a*10;    //計(jì)算得到個(gè)位數(shù)字
  52.         m=c/10;      //計(jì)算得到整數(shù)位
  53.         n=c-a*100-b*10;    //計(jì)算得到小數(shù)位
  54.         if(m<0){m=0;n=0;}   //設(shè)置溫度顯示上限
  55.         if(m>99){m=99;n=9;}   //設(shè)置溫度顯示上限   
  56. }
  57. /*************************lcd1602程序**************************/
  58. void delay1ms(uint ms)//延時(shí)1毫秒(不夠精確的)
  59. {  uint i,j;
  60.    for(i=0;i<ms;i++)
  61.     for(j=0;j<100;j++);
  62. }

  63. void wr_com(uchar com)//寫指令//
  64. {
  65.    RS=0;
  66.    RW=0;
  67.    P0=com;
  68.    delay1ms(1);
  69.    EN=1;
  70.    delay1ms(1);
  71.    EN=0;
  72. }

  73. void wr_dat(uchar dat)//寫數(shù)據(jù)//
  74. {
  75.    RS=1;
  76.    RW=0;
  77.    P0=dat;
  78.    delay1ms(1);
  79.    EN=1;
  80.    delay1ms(1);
  81.    EN=0;
  82. }
  83. //自定義字符集
  84. void Lcd_ram()      
  85. {
  86.         uint i,j,k=0,temp=0x40;
  87.         for(i=0;i<1;i++)
  88.         {
  89.            for(j=0;j<8;j++)
  90.            {
  91.             wr_com(temp+j);
  92.             wr_dat(table[k]);
  93.             k++;
  94.            }
  95.            temp=temp+8;
  96.         }
  97. }
  98. void lcd_init()//初始化設(shè)置//
  99. {
  100.         wr_com(0x38);
  101.         wr_com(0x0c);
  102.         wr_com(0x06);
  103.         wr_com(0x01);
  104.         Lcd_ram();
  105.         wr_com(0x80);
  106.     wr_dat('S');//A
  107.     wr_dat('m');//:
  108.     wr_dat('o');
  109.     wr_dat('k');
  110.     wr_dat('e');
  111.     wr_dat(':');

  112.           wr_com(0x89);
  113.     wr_dat('T');
  114.     wr_dat(':');
  115.         wr_com(0x8d);
  116.     wr_dat('.');
  117.         wr_com(0x8f);
  118.     wr_dat(0);
  119.    
  120.         wr_com(0xc0);
  121.     wr_dat('A');
  122.     wr_dat('l');
  123.     wr_dat('a');
  124.     wr_dat('r');
  125.     wr_dat('m');
  126.     wr_dat(':');

  127.         wr_com(0xcc);
  128.     wr_dat('-');
  129.           wr_com(0xcf);
  130.     wr_dat(0);         
  131. }
  132. /*****************顯示函數(shù)******************************/
  133. void disp()//溫度值顯示
  134. {
  135.         disdata[0]=m/10+0x30;//十位數(shù)
  136.         disdata[1]=m%10+0x30;//個(gè)位數(shù)
  137.         disdata[2]=n+0x30;//小數(shù)位
  138.         disdata[3]=abc/10+0x30;//煙霧濃度
  139.         disdata[4]=abc%10+0x30;//煙霧濃度
  140.        
  141.         wr_com(0x8b);
  142.         wr_dat(disdata[0]);//顯示十位
  143.         wr_dat(disdata[1]);//顯示個(gè)位
  144.         wr_com(0x8e);
  145.         wr_dat(disdata[2]);//顯示小數(shù)位
  146.         wr_com(0x86);
  147.         wr_dat(disdata[3]);
  148.         wr_dat(disdata[4]);
  149. }
  150. void baojing()
  151. {
  152.         wr_com(0xca);
  153.     wr_dat(tab[0]+0x30);
  154.     wr_dat(tab[1]+0x30);
  155.         wr_com(0xcd);
  156.     wr_dat(tab[2]+0x30);
  157.     wr_dat(tab[3]+0x30);
  158.         wr_com(0xc6);
  159.     wr_dat(tab[4]/10+0x30);
  160.         wr_dat(tab[4]%10+0x30);
  161. }

  162. /*****報(bào)警子程序*****/
  163. void Alarm()
  164. {
  165.         if((m>=shangxian&&beep_st==1)||(m<xiaxian&&beep_st==1))        BEEP=0;
  166.         else if(abc>=nongdu&&beep_st==1)        BEEP=0;
  167.         else BEEP=1;
  168.         if(m>=shangxian||m<xiaxian)        {led_h=0;led_l=1;JDQ=0;}
  169.         else if(abc>=nongdu)        {led_h=0;led_l=1;JDQ=0;}
  170.         else        {led_h=1;led_l=0;JDQ=1;}
  171.         if(x>=10)        {beep_st=~beep_st;x=0;}
  172. }
  173. void Alarm1()
  174. {
  175.         led_h=0;
  176.         led_l=1;
  177.         if(x>=10){beep_st=~beep_st;x=0;}
  178.         if(beep_st==1)BEEP=0;
  179.         else BEEP=1;
  180.         led_h=0;
  181.         led_l=1;
  182.         JDQ=0;
  183. }
  184. uchar ADC0832(bit mode,bit channel)     //AD轉(zhuǎn)換,返回結(jié)果
  185. {
  186.         uchar i,dat,ndat;
  187.        
  188.         ADCS = 0;//拉低CS端
  189.         _nop_();
  190.         _nop_();
  191.        
  192.         ADDI = 1;        //第1個(gè)下降沿為高電平
  193.         ADCLK = 1;//拉高CLK端
  194.         _nop_();
  195.         _nop_();
  196.         ADCLK = 0;//拉低CLK端,形成下降沿1
  197.         _nop_();
  198.         _nop_();
  199.        
  200.         ADDI = mode;        //低電平為差分模式,高電平為單通道模式。       
  201.         ADCLK = 1;//拉高CLK端
  202.         _nop_();
  203.         _nop_();
  204.         ADCLK = 0;//拉低CLK端,形成下降沿2
  205.         _nop_();
  206.         _nop_();
  207.        
  208.         ADDI = channel;        //低電平為CH0,高電平為CH1       
  209.         ADCLK = 1;//拉高CLK端
  210.         _nop_();
  211.         _nop_();
  212.         ADCLK = 0;//拉低CLK端,形成下降沿3
  213.        
  214.         ADDI = 1;//控制命令結(jié)束(經(jīng)試驗(yàn)必需)
  215.         dat = 0;
  216.         //下面開始讀取轉(zhuǎn)換后的數(shù)據(jù),從最高位開始依次輸出(D7~D0)
  217.         for(i = 0;i < 8;i++)
  218.         {
  219.                 dat <<= 1;
  220.                 ADCLK=1;//拉高時(shí)鐘端
  221.                 _nop_();
  222.                 _nop_();
  223.                 ADCLK=0;//拉低時(shí)鐘端形成一次時(shí)鐘脈沖
  224.                 _nop_();
  225.                 _nop_();
  226.                 dat |= ADDO;
  227.         }
  228.         ndat = 0;            //記錄D0
  229.         if(ADDO == 1)
  230.         ndat |= 0x80;
  231.         //下面開始繼續(xù)讀取反序的數(shù)據(jù)(從D1到D7)
  232.         for(i = 0;i < 7;i++)
  233.         {
  234.                 ndat >>= 1;
  235.                 ADCLK = 1;//拉高時(shí)鐘端
  236.                 _nop_();
  237.                 _nop_();
  238.                 ADCLK=0;//拉低時(shí)鐘端形成一次時(shí)鐘脈沖
  239.                 _nop_();
  240.                 _nop_();
  241.                 if(ADDO==1)
  242.                 ndat |= 0x80;
  243.         }          
  244.         ADCS=1;//拉高CS端,結(jié)束轉(zhuǎn)換
  245.         ADCLK=0;//拉低CLK端
  246.         ADDI=1;//拉高數(shù)據(jù)端,回到初始狀態(tài)
  247.         if(dat==ndat)
  248.         return(dat);
  249.         else
  250.         return 0;   
  251. }
  252. /*****主函數(shù)*****/
  253. void main(void)
  254. {
  255.         InitTimer();    //初始化定時(shí)器
  256.         EA=1;      //全局中斷開關(guān)
  257.         TR0=1;
  258.         ET0=1;      //開啟定時(shí)器0
  259.         BEEP=0;
  260.         led_h=1;
  261.         led_l=1;
  262.         JDQ=1;
  263.         check_wendu();
  264.         check_wendu();
  265.         delay1ms(100);
  266.         lcd_init();//初始化顯示
  267.         while(1)
  268.         {
  269.                 if(hujiao==0)
  270.                 {
  271.                         Delay(2000);
  272.                         do{}while(hujiao==0);
  273.                         flag=~flag;
  274.                 }
  275.                 checkkey();
  276.                 abc = ADC0832(1,0);  //差分模式,CH0-CH1
  277.                 abc = abc*100/255; //轉(zhuǎn)換為百分比便于顯示
  278. //                abc=abc/1000%10;
  279.                 check_wendu();
  280.                 disp();
  281.                 baojing();
  282.                 if(flag==1){Alarm1();JDQ=0;}
  283.                 else    Alarm();   //報(bào)警檢測
  284.        
  285.                 if(set_st==0) wr_com(0x0c);
  286.                 if(set_st==1)
  287.                 {
  288.                         wr_com(0xc7);
  289.                         wr_com(0x0d);
  290.                         delay1ms(150);
  291.                 }
  292.                 if(set_st==2)
  293.                 {
  294.                         wr_com(0xcb);
  295.                         wr_com(0x0d);
  296.                         delay1ms(150);
  297.                 }
  298.                 if(set_st==3)
  299.                 {
  300.                         wr_com(0xce);
  301.                         wr_com(0x0d);
  302.                         delay1ms(150);
  303.                 }
  304.         }
  305. }/*****END*****/
復(fù)制代碼


1-煙霧溫度檢測報(bào)警程序.zip

208.38 KB, 下載次數(shù): 9, 下載積分: 黑幣 -5

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

使用道具 舉報(bào)

沙發(fā)
ID:472504 發(fā)表于 2022-5-16 09:15 | 只看該作者
看別人代碼,頭大。。。
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日韩激情一区 | 日本免费一区二区三区四区 | 一区中文 | 日韩综合网 | 中文字幕在线国产 | 久久九九免费 | 精品久久伊人 | 亚洲二区视频 | 久久精品视频免费观看 | 精品国产成人 | 男女网站在线观看 | 超级碰在线 | 国产xxxx在线 | 午夜色播 | 在线国产视频 | 国产一区二区不卡 | 日韩精品一区二区三区四区 | 国产一区二区三区网站 | 国产精品99久久久久久大便 | 欧美精品在欧美一区二区少妇 | 日韩在线视频一区二区三区 | 中文字幕免费在线 | 国产精品视频97 | 日本精品视频在线 | 欧美一区在线视频 | 国产一区二区三区视频 | 天堂在线www | 久久的色| 日韩视频一区二区在线 | av入口| 亚洲在线一区二区 | 亚洲精品欧美一区二区三区 | 日韩视频1 | 日韩乱码一二三 | 午夜影院中文字幕 | 国产高清视频一区二区 | 成人伊人 | 欧美1级| 青青草视频免费观看 | 久久乐国产精品 | 欧美一区二区三区久久精品 |