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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 11554|回復(fù): 12
收起左側(cè)

單片機火災(zāi)溫度煙霧報警器設(shè)計 Proteus仿真+代碼

  [復(fù)制鏈接]
ID:398085 發(fā)表于 2019-4-14 18:19 | 顯示全部樓層 |閱讀模式
煙霧傳感器仿真中沒有,其實就是傳感器檢測時相應(yīng)的電阻值會變化,用滑動電位器代替就ok

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png

單片機源程序如下:
  1. #include <reg52.h> //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義
  2. #include "intrins.h"
  3. #include "DS1302.h"
  4. #include <string.h>
  5. #include <stdio.h>


  6. #define     u8                          unsigned char
  7. #define     u16                   unsigned int
  8. #define     uchar                          unsigned char
  9. #define     uint                   unsigned int


  10. char yushe_chuanglian_time=8;                                //窗簾開啟預(yù)設(shè)時間
  11. char yushe_deng_time=14;                                //照明燈開啟時間
  12. uchar yushe_wendu=50;                                //溫度預(yù)設(shè)值
  13. uchar yushe_yanwu=100;                                //煙霧預(yù)設(shè)值
  14. uint wendu;                                                                 //溫度值全局變量
  15. uchar yanwu;                                                                 //用于讀取ADC數(shù)據(jù)

  16. //運行模式
  17. uchar Mode_display=0;       //=0是顯示時間  =1是顯示環(huán)境情況
  18. uchar Mode=0;                                                                 //=1是設(shè)置溫度閥值  =2是設(shè)置煙霧閥值        =0是正常監(jiān)控模式
  19. //管腳聲明
  20. sbit Led_Reg                 =P2^2;                                 //紅燈
  21. sbit Led_Yellow  =P2^4;                                 //黃燈
  22. sbit Buzzer             =P2^0;                                 //蜂鳴器
  23. sbit Fan                      =P3^3;                                 //
  24. sbit zhaomingdeng =P3^0;
  25. sbit chuanglian =P3^1;
  26. /********************************************************************
  27. * 名稱 : delay_1ms()
  28. * 功能 : 延時1ms函數(shù)
  29. * 輸入 : q
  30. * 輸出 : 無
  31. ***********************************************************************/
  32. void delay_ms(uint q)
  33. {
  34.         uint i,j;
  35.         for(i=0;i<q;i++)
  36.                 for(j=0;j<110;j++);
  37. }
  38. /***********************************************************************************************************
  39. LCD1602相關(guān)函數(shù)
  40. ***********************************************************************************************************/

  41. //LCD管腳聲明 (RW引腳實物直接接地,因為本設(shè)計只用到液晶的寫操作,RW引腳一直是低電平)
  42. sbit LCDRS = P2^7;
  43. sbit LCDEN = P2^6;
  44. sbit D0                 = P0^0;
  45. sbit D1                 = P0^1;
  46. sbit D2                 = P0^2;
  47. sbit D3                 = P0^3;
  48. sbit D4                 = P0^4;
  49. sbit D5                 = P0^5;
  50. sbit D6                 = P0^6;
  51. sbit D7                 = P0^7;



  52. //LCD延時
  53. void LCDdelay(uint z)                  //該延時大約100us(不精確,液晶操作的延時不要求很精確)
  54. {
  55.   uint x,y;
  56.   for(x=z;x>0;x--)
  57.     for(y=10;y>0;y--);
  58. }
  59. void LCD_WriteData(u8 dat)         
  60. {
  61.         if(dat&0x01)D0=1;else D0=0;
  62.         if(dat&0x02)D1=1;else D1=0;
  63.         if(dat&0x04)D2=1;else D2=0;
  64.         if(dat&0x08)D3=1;else D3=0;
  65.         if(dat&0x10)D4=1;else D4=0;
  66.         if(dat&0x20)D5=1;else D5=0;
  67.         if(dat&0x40)D6=1;else D6=0;
  68.         if(dat&0x80)D7=1;else D7=0;
  69. }
  70. //寫命令
  71. void write_com(uchar com)
  72. {
  73.   LCDRS=0;                                 
  74.         LCD_WriteData(com);
  75. //  DAT=com;
  76.   LCDdelay(5);
  77.   LCDEN=1;
  78.   LCDdelay(5);
  79.   LCDEN=0;
  80. }
  81. //寫數(shù)據(jù)
  82. void write_data(uchar date)
  83. {
  84.   LCDRS=1;
  85.         LCD_WriteData(date);
  86. //  DAT=date;
  87.   LCDdelay(5);
  88.   LCDEN=1;
  89.   LCDdelay(5);
  90.   LCDEN=0;
  91. }

  92. /*------------------------------------------------
  93.               選擇寫入位置
  94. ------------------------------------------------*/
  95. void SelectPosition(unsigned char x,unsigned char y)
  96. {     
  97.         if (x == 0)
  98.         {     
  99.                 write_com(0x80 + y);     //表示第一行
  100.         }
  101.         else
  102.         {      
  103.                 write_com(0xC0 + y);      //表示第二行
  104.         }        
  105. }
  106. /*------------------------------------------------
  107.               寫入字符串函數(shù)
  108. ------------------------------------------------*/
  109. void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s)
  110. {     
  111.         SelectPosition(x,y) ;
  112.         while (*s)
  113.         {     
  114.                 write_data( *s);     
  115.                 s ++;     
  116.         }
  117. }
  118. //========================================================================
  119. // 函數(shù): void LCD_Write_Char(u8 x,u8 y,u16 s,u8 l)
  120. // 應(yīng)用: LCD_Write_Char(0,1,366,4) ;
  121. // 描述: 在第0行第一個字節(jié)位置顯示366的后4位,顯示結(jié)果為 0366
  122. // 參數(shù): x:行,y:列,s:要顯示的字,l:顯示的位數(shù)
  123. // 返回: none.
  124. // 版本: VER1.0
  125. // 日期: 2013-4-1
  126. // 備注: 最大顯示65535
  127. //========================================================================
  128. void LCD_Write_Char(u8 x,u8 y,u16 s,u8 l)
  129. {     
  130.         SelectPosition(x,y) ;

  131.         if(l>=5)
  132.                 write_data(0x30+s/10000%10);        //萬位
  133.         if(l>=4)
  134.                 write_data(0x30+s/1000%10);                //千位
  135.         if(l>=3)
  136.                 write_data(0x30+s/100%10);                //百位
  137.         if(l>=2)
  138.                 write_data(0x30+s/10%10);                        //十位
  139.         if(l>=1)
  140.                 write_data(0x30+s%10);                //個位

  141. }
  142. /*1602指令簡介
  143.   write_com(0x38);//屏幕初始化
  144.   write_com(0x0c);//打開顯示 無光標 無光標閃爍
  145.   write_com(0x0d);//打開顯示 陰影閃爍
  146.   write_com(0x0d);//打開顯示 陰影閃爍
  147. */
  148. //1602初始化
  149. void Init1602()
  150. {
  151.   uchar i=0;
  152.   write_com(0x38);//屏幕初始化
  153.   write_com(0x0c);//打開顯示 無光標 無光標閃爍
  154.   write_com(0x06);//當(dāng)讀或?qū)懸粋字符是指針后一一位
  155.   write_com(0x01);//清屏
  156.         
  157. }

  158. void Display_1602(yushe_wendu,yushe_yanwu,c,temp)
  159. {
  160.         //顯示預(yù)設(shè)溫度
  161.         LCD_Write_Char(0,6,yushe_wendu,2) ;
  162.         
  163.         //顯示預(yù)設(shè)煙霧
  164.         LCD_Write_Char(0,13,yushe_yanwu,3) ;
  165.         
  166.         //時時溫度
  167.         LCD_Write_Char(1,6,c/10,2) ;
  168.         write_data('.');
  169.         LCD_Write_Char(1,9,c%10,1) ;
  170.         
  171.         //時時煙霧
  172.         LCD_Write_Char(1,13,temp,3) ;
  173. }



  174. /***********************************************************************************************************
  175. ADC0832相關(guān)函數(shù)
  176. ***********************************************************************************************************/
  177. sbit ADCS         =P1^5; //ADC0832 片選
  178. sbit ADCLK  =P1^2; //ADC0832 時鐘
  179. sbit ADDI         =P1^3; //ADC0832 數(shù)據(jù)輸入                /*因為單片機的管腳是雙向的,且ADC0832的數(shù)據(jù)輸入輸出不同時進行,
  180. sbit ADDO         =P1^3; //ADC0832 數(shù)據(jù)輸出                /*為節(jié)省單片機引腳,簡化電路所以輸入輸出連接在同一個引腳上



  181. //========================================================================
  182. // 函數(shù): unsigned int Adc0832(unsigned char channel)
  183. // 應(yīng)用:                 temp=Adc0832(0);
  184. // 描述: 讀取0通道的AD值
  185. // 參數(shù): channel:通道0和通道1選擇
  186. // 返回: 選取通道的AD值
  187. // 版本: VER1.0
  188. // 日期: 2015-05-29
  189. // 備注:
  190. //========================================================================
  191. unsigned int Adc0832(unsigned char channel)
  192. {
  193.         uchar i=0;
  194.         uchar j;
  195.         uint dat=0;
  196.         uchar ndat=0;
  197.         uchar  Vot=0;

  198.         if(channel==0)channel=2;
  199.         if(channel==1)channel=3;
  200.         ADDI=1;
  201.         _nop_();
  202.         _nop_();
  203.         ADCS=0;//拉低CS端
  204.         _nop_();
  205.         _nop_();
  206.         ADCLK=1;//拉高CLK端
  207.         _nop_();
  208.         _nop_();
  209.         ADCLK=0;//拉低CLK端,形成下降沿1
  210.         _nop_();
  211.         _nop_();
  212.         ADCLK=1;//拉高CLK端
  213.         ADDI=channel&0x1;
  214.         _nop_();
  215.         _nop_();
  216.         ADCLK=0;//拉低CLK端,形成下降沿2
  217.         _nop_();
  218.         _nop_();
  219.         ADCLK=1;//拉高CLK端
  220.         ADDI=(channel>>1)&0x1;
  221.         _nop_();
  222.         _nop_();
  223.         ADCLK=0;//拉低CLK端,形成下降沿3
  224.         ADDI=1;//控制命令結(jié)束
  225.         _nop_();
  226.         _nop_();
  227.         dat=0;
  228.         for(i=0;i<8;i++)
  229.         {
  230.                 dat|=ADDO;//收數(shù)據(jù)
  231.                 ADCLK=1;
  232.                 _nop_();
  233.                 _nop_();
  234.                 ADCLK=0;//形成一次時鐘脈沖
  235.                 _nop_();
  236.                 _nop_();
  237.                 dat<<=1;
  238.                 if(i==7)dat|=ADDO;
  239.         }
  240.         for(i=0;i<8;i++)
  241.         {
  242.                 j=0;
  243.                 j=j|ADDO;//收數(shù)據(jù)
  244.                 ADCLK=1;
  245.                 _nop_();
  246.                 _nop_();
  247.                 ADCLK=0;//形成一次時鐘脈沖
  248.                 _nop_();
  249.                 _nop_();
  250.                 j=j<<7;
  251.                 ndat=ndat|j;
  252.                 if(i<7)ndat>>=1;
  253.         }
  254.         ADCS=1;//拉低CS端
  255.         ADCLK=0;//拉低CLK端
  256.         ADDO=1;//拉高數(shù)據(jù)端,回到初始狀態(tài)
  257.         dat<<=8;
  258.         dat|=ndat;

  259.         return(dat);            //return ad data
  260. }

  261. /***********************************************************************************************************
  262. DS18B20相關(guān)函數(shù)
  263. ***********************************************************************************************************/

  264. sbit DQ = P1^0;                                 //ds18b20的數(shù)據(jù)引腳



  265. /*****延時子程序:該延時主要用于ds18b20延時*****/
  266. void Delay_DS18B20(int num)
  267. {
  268.   while(num--) ;
  269. }
  270. /*****初始化DS18B20*****/
  271. void Init_DS18B20(void)
  272. {
  273.   unsigned char x=0;
  274.   DQ = 1;         //DQ復(fù)位
  275.   Delay_DS18B20(8);    //稍做延時
  276.   DQ = 0;         //單片機將DQ拉低
  277.   Delay_DS18B20(80);   //精確延時,大于480us
  278.   DQ = 1;         //拉高總線
  279.   Delay_DS18B20(14);
  280.   x = DQ;           //稍做延時后,如果x=0則初始化成功,x=1則初始化失敗
  281.   Delay_DS18B20(20);
  282. }
  283. /*****讀一個字節(jié)*****/
  284. unsigned char ReadOneChar(void)
  285. {
  286.   unsigned char i=0;
  287.   unsigned char dat = 0;
  288.   for (i=8;i>0;i--)
  289.   {
  290.     DQ = 0;     // 給脈沖信號
  291.     dat>>=1;
  292.     DQ = 1;     // 給脈沖信號
  293.     if(DQ)
  294.     dat|=0x80;
  295.     Delay_DS18B20(4);
  296.   }
  297.   return(dat);
  298. }
  299. /*****寫一個字節(jié)*****/
  300. void WriteOneChar(unsigned char dat)
  301. {
  302.   unsigned char i=0;
  303.   for (i=8; i>0; i--)
  304.   {
  305.     DQ = 0;
  306.     DQ = dat&0x01;
  307.     Delay_DS18B20(5);
  308.     DQ = 1;
  309.     dat>>=1;
  310.   }
  311. }
  312. /*****讀取溫度*****/
  313. unsigned int ReadTemperature(void)
  314. {
  315.   unsigned char a=0;
  316.   unsigned char b=0;
  317.   unsigned int t=0;
  318.   float tt=0;
  319.   Init_DS18B20();
  320.   WriteOneChar(0xCC);  //跳過讀序號列號的操作
  321.   WriteOneChar(0x44);  //啟動溫度轉(zhuǎn)換
  322.   Init_DS18B20();
  323.   WriteOneChar(0xCC);  //跳過讀序號列號的操作
  324.   WriteOneChar(0xBE);  //讀取溫度寄存器
  325.   a=ReadOneChar();     //讀低8位
  326.   b=ReadOneChar();    //讀高8位
  327.   t=b;
  328.   t<<=8;
  329.   t=t|a;
  330.   tt=t*0.0625;
  331.   t= tt*10+0.5;     //放大10倍輸出并四舍五入
  332.   return(t);
  333. }
  334. //=====================================================================================
  335. //=====================================================================================
  336. //=====================================================================================


  337. /*****校準溫度*****/
  338. u16 check_wendu(void)
  339. {
  340.         u16 c;
  341.         c=ReadTemperature()-5;                          //獲取溫度值并減去DS18B20的溫漂誤差
  342.         if(c<1) c=0;
  343.         if(c>=999) c=999;
  344.         return c;
  345. }


  346. /***********************************************************************************************************
  347. 按鍵檢測相關(guān)函數(shù)
  348. ***********************************************************************************************************/
  349. //按鍵
  350. sbit Key1=P1^6;                                 //設(shè)置鍵
  351. sbit Key2=P1^7;                                 //加按鍵
  352. sbit Key3=P3^2;                                 //減按鍵
  353. sbit Key4=P1^4;                                 //切換鍵


  354. #define KEY_switch                 4                //設(shè)置
  355. #define KEY_SET                 1                //設(shè)置
  356. #define KEY_ADD                        2                //加
  357. #define KEY_MINUS                3                //減


  358. //========================================================================
  359. // 函數(shù): u8 Key_Scan()
  360. // 應(yīng)用: temp=u8 Key_Scan();
  361. // 描述: 按鍵掃描并返回按下的鍵值
  362. // 參數(shù): NONE
  363. // 返回: 按下的鍵值
  364. // 版本: VER1.0
  365. // 日期: 2015-05-29
  366. // 備注: 該函數(shù)帶松手檢測,按下鍵返回一次鍵值后返回0,直至第二次按鍵按下
  367. //========================================================================
  368. u8 Key_Scan()
  369. {         
  370.         static u8 key_up=1;//按鍵按松開標志
  371.         if(key_up&&(Key1==0||Key2==0||Key3==0||Key4==0))
  372.         {
  373.                 delay_ms(10);//去抖動
  374.                 key_up=0;
  375.                 if(Key1==0)                        return 1;
  376.                 else if(Key2==0)return 2;
  377.                 else if(Key3==0)return 3;
  378.                 else if(Key4==0)return 4;
  379.                
  380.         }
  381.         else if(Key1==1&&Key2==1&&Key3==1)
  382.                 key_up=1;            
  383.          return 0;// 無按鍵按下
  384. }

  385. /*****報警*****/
  386. void warning()
  387. {
  388. //                                        SYSTEMTIME compare;
  389.                                         if(yanwu>=yushe_yanwu)          //煙霧值大于等于預(yù)設(shè)值時
  390.                                         {
  391.                                                 Led_Reg=0;                                          //煙霧指示燈亮
  392.                                                 Fan=0;
  393.                                                 Buzzer=0;                                                  //蜂鳴器報警
  394.                                         }
  395.                                         else                                                                                  //煙霧值小于預(yù)設(shè)值時
  396.                                         {
  397.                                                 Led_Reg=1;                                          //關(guān)掉報警燈
  398.                                                 Fan=1;
  399.                                         }
  400.                                         if(wendu>=(yushe_wendu*10))          //溫度大于等于預(yù)設(shè)溫度值時(為什么是大于預(yù)設(shè)值*10:因為我們要顯示的溫度是有小數(shù)點后一位,是一個3位數(shù),25.9°C時實際讀的數(shù)是259,所以判斷預(yù)設(shè)值時將預(yù)設(shè)值*10)
  401.                                         {
  402.                                                 Buzzer=0;                                                  //打開蜂鳴器報警
  403.                                                 Led_Yellow=0;                                          //打開溫度報警燈
  404.                                         }
  405.                                         else                                                                                  //溫度值小于預(yù)設(shè)值時
  406.                                         {
  407.                                                 Led_Yellow=1;                                          //關(guān)閉報警燈
  408.                                         }
  409.                                         if((yanwu<yushe_yanwu)&&(wendu<(yushe_wendu*10)))          //當(dāng)煙霧小于預(yù)設(shè)值并且溫度也小于預(yù)設(shè)值時 (&&:邏輯與,左右兩邊的表達式都成立(都為真,也就是1)時,該if語句才成立)
  410.                                         {
  411.                                                 Buzzer=1;                                                  //停止報警
  412.                                         }
  413. }

  414. void main (void)
  415. {
  416.         u8 key;
  417.         SYSTEMTIME CurrentTime;
  418.         Initial_DS1302();
  419.         
  420.         wendu=check_wendu();                  //初始化時調(diào)用溫度讀取函數(shù) 防止開機85°C
  421.         
  422.         Init1602();                          //調(diào)用初始化顯示函數(shù)
  423.   
  424.         delay_ms(1000);
  425.         wendu=check_wendu();                  //初始化時調(diào)用溫度讀取函數(shù) 防止開機85°C


  426.         while (1)                                                //主循環(huán)
  427.         {
  428.                 key=Key_Scan();                                        //按鍵掃描
  429.                 yanwu=Adc0832(0);                                //讀取煙霧值
  430.                 wendu=check_wendu();          //讀取溫度值
  431.                 DS1302_GetTime(&CurrentTime);
  432.                 TimeToStr(&CurrentTime);
  433.                 if(key==KEY_switch)
  434.                 {
  435.                         Mode_display++;
  436.                         if(Mode_display>1)
  437.                         {
  438.                                 Mode_display=0;
  439.                         }
  440.                         else Mode_display=Mode_display;
  441.                 }

  442.                 if(Mode_display==0)
  443.                 {
  444.                         if(key==KEY_SET)
  445.                         {
  446.                                 Mode++;
  447.                         }
  448.                                 switch(Mode)
  449.                                 {
  450.                                                 case 0:
  451.                                                 {
  452.                                                         write_com(0x01);//清屏
  453.                                                         LCD_Write_String(0,0,"SET CL:   D:    ");  //開機界面
  454.                                                         LCD_Write_String(1,0,"NOW TIME        ");
  455.                                                         LCD_Write_String(1,8,CurrentTime.TimeString);
  456.                                                         LCD_Write_Char(0,7,yushe_chuanglian_time,2) ;
  457.                                                         LCD_Write_Char(0,12,CurrentTime.Hour,2) ;
  458.                                                         warning();
  459.                                                         if(CurrentTime.Hour==yushe_chuanglian_time)
  460.                                                         {
  461.                                                                 zhaomingdeng=0;
  462.                                                         }
  463.                                                         else zhaomingdeng=1;
  464.                                                         if(CurrentTime.Hour==yushe_deng_time)
  465.                                                         {
  466.                                                                 chuanglian=1;
  467.                                                         }
  468.                                                         else chuanglian=0;
  469.                                                 }
  470.                                                 case 1://預(yù)設(shè)窗簾開啟時間
  471.                                                 {
  472.                                                         SelectPosition(0,3);                                        //指定位置
  473.                                                         write_com(0x0d);                                                        //陰影閃爍
  474.                                                         if(key==KEY_ADD)                                                        //加鍵按下
  475.                                                         {
  476.                                                                 yushe_chuanglian_time++;                                            //預(yù)設(shè)窗簾開啟時間值(閥值)加1
  477.                                                                 if(yushe_chuanglian_time>25)                                         //當(dāng)閥值加到大于等于24時
  478.                                                                 {
  479.                                                                         yushe_chuanglian_time=0;                                                         
  480.                                                                 }
  481.                                                                 if(yushe_chuanglian_time<0)                                         //當(dāng)閥值加到小于0時
  482.                                                                 {
  483.                                                                         yushe_chuanglian_time=24;                                                         
  484.                                                                 }
  485.                                                                 LCD_Write_Char(0,7,yushe_chuanglian_time,2) ;//顯示預(yù)設(shè)窗簾開啟時間
  486.                                                         }
  487.                                                         if(key==KEY_MINUS)                                                 //減鍵按下
  488.                                                         {
  489.                                                                 yushe_chuanglian_time--;                                            //預(yù)設(shè)窗簾開啟時間值(閥值)減1
  490.                                                                 if(yushe_chuanglian_time>25)                                         //當(dāng)閥值加到大于等于24時
  491.                                                                 {
  492.                                                                         yushe_chuanglian_time=0;                                                         
  493.                                                                 }
  494.                                                                 if(yushe_chuanglian_time<0)                                         //當(dāng)閥值加到小于0時
  495.                                                                 {
  496.                                                                         yushe_chuanglian_time=24;                                                         
  497.                                                                 }
  498.                                                                 LCD_Write_Char(0,7,yushe_chuanglian_time,2) ;//顯示預(yù)設(shè)窗簾開啟時間
  499.                                                         }
  500.                                                         break;                                                                                          //執(zhí)行后跳出switch
  501.                                                 }
  502.                                                 case 2://預(yù)設(shè)窗簾開啟時間
  503.                                                 {
  504.                                                         SelectPosition(0,9);                                        //指定位置
  505.                                                         write_com(0x0d);                                                        //陰影閃爍
  506.                                                         if(key==KEY_ADD)                                                        //加鍵按下
  507.                                                         {
  508.                                                                 yushe_deng_time++;                                            //預(yù)設(shè)窗簾開啟時間值(閥值)加1
  509.                                                                 if(yushe_deng_time>24)                                         //當(dāng)閥值加到大于等于24時
  510.                                                                 {
  511.                                                                         yushe_deng_time=0;                                                         
  512.                                                                 }
  513.                                                                 if(yushe_deng_time<0)                                         //當(dāng)閥值加到小于0時
  514.                                                                 {
  515.                                                                         yushe_deng_time=24;                                                         
  516.                                                                 }
  517.                                                                 LCD_Write_Char(0,12,yushe_deng_time,2) ;//顯示預(yù)設(shè)窗簾開啟時間
  518.                                                         }
  519.                                                         if(key==KEY_MINUS)                                                 //減鍵按下
  520.                                                         {
  521.                                                                 yushe_deng_time--;                                            //預(yù)設(shè)窗簾開啟時間值(閥值)減1
  522.                                                                 if(yushe_deng_time>24)                                         //當(dāng)閥值加到大于等于24時
  523.                                                                 {
  524.                                                                         yushe_deng_time=0;                                                         
  525.                                                                 }
  526.                                                                 if(yushe_deng_time<0)                                         //當(dāng)閥值加到小于0時
  527.                                                                 {
  528.                                                                         yushe_deng_time=24;                                                         
  529.                                                                 }
  530.                                                                 LCD_Write_Char(0,12,yushe_deng_time,2) ;//顯示預(yù)設(shè)窗簾開啟時間
  531.                                                         }
  532.                                                         break;                                                                                          //執(zhí)行后跳出switch
  533.                                                 }

  534.                                                 default        :        
  535.                                                 {
  536.                                                         write_com(0x38);//屏幕初始化
  537.                                                         write_com(0x0c);//打開顯示 無光標 無光標閃爍
  538.                                                         Mode=0;                        //恢復(fù)正常模式
  539.                                                         break;
  540.                                                 }
  541.                         }

  542.                 }
  543.                 if(Mode_display==1)
  544.                 {
  545.                         if(key==KEY_SET)
  546.                         {
  547.                                 Mode++;
  548.                         }
  549.                                         switch(Mode)                                                //判斷模式的值
  550.                                         {
  551.                                                 case 0:                                                                //監(jiān)控模式
  552.                                                 {
  553. //                                                        write_com(0x01);//清屏
  554.                                                         LCD_Write_String(0,0,"SET T:     E:   ");  //開機界面
  555.                                                         LCD_Write_String(1,0,"NOW T:     E:   ");
  556.                                                         Display_1602(yushe_wendu,yushe_yanwu,wendu,yanwu);  //顯示預(yù)設(shè)溫度,預(yù)設(shè)煙霧,溫度值,煙霧值
  557.                                                         warning();
  558.                                                         break;
  559.                                                 }
  560.                                                 case 1://預(yù)設(shè)溫度模式
  561.                                                 {
  562.                                                         SelectPosition(0,5) ;                                        //指定位置
  563.                                                         write_com(0x0d);                                                        //陰影閃爍
  564.                                                         if(key==KEY_ADD)                                                        //加鍵按下
  565.                                                         {
  566.                                                                 yushe_wendu++;                                            //預(yù)設(shè)溫度值(閥值)加1
  567.                                                                 if(yushe_wendu>=99)                                         //當(dāng)閥值加到大于等于99時
  568.                                                                 yushe_wendu=99;                                                         //閥值固定為99
  569.                                                                 LCD_Write_Char(0,6,yushe_wendu,2) ;//顯示預(yù)設(shè)溫度
  570.                                                         }
  571.                                                         if(key==KEY_MINUS)                                                 //減鍵按下
  572.                                                         {
  573.                                                                 if(yushe_wendu<=1)                                        //當(dāng)溫度上限值減小到1時
  574.                                                                 yushe_wendu=1;                          //固定為1
  575.                                                                 yushe_wendu--;                                                        //預(yù)設(shè)溫度值減一,最小為0
  576.                                                                 LCD_Write_Char(0,6,yushe_wendu,2) ;//顯示預(yù)設(shè)溫度
  577.                                                         }
  578.                                                         break;                                                                                          //執(zhí)行后跳出switch
  579.                                                 }
  580.                                                 case 2:                                //預(yù)設(shè)煙霧模式
  581.                                                 {
  582.                                                         SelectPosition(0,12) ;                                //指定位置        
  583.                                                         write_com(0x0d);                                                        //打開顯示 無光標 光標閃爍
  584.                                                         if(key==KEY_ADD)                                                        //加鍵按下
  585.                                                         {
  586.                                                                 if(yushe_yanwu>=255)        //當(dāng)閥值加到大于等于255時
  587.                                                                 yushe_yanwu=254;            //閥值固定為254
  588.                                                                 yushe_yanwu++;                                            //預(yù)設(shè)煙霧值(閥值)加1,最大為255
  589.                                                                 LCD_Write_Char(0,13,yushe_yanwu,3) ;//顯示預(yù)設(shè)煙霧
  590.                                                         }
  591.                                                         if(key==KEY_MINUS)                                                //減鍵按下
  592.                                                         {
  593.                                                                 if(yushe_yanwu<=1)                                        //當(dāng)煙霧上限值減小到1時
  594.                                                                         yushe_yanwu=1;                  //固定為1
  595.                                                                 yushe_yanwu--;                                                        //預(yù)設(shè)溫度值減一,最小為0         
  596.                                                                 LCD_Write_Char(0,13,yushe_yanwu,3) ;//顯示預(yù)設(shè)煙霧
  597.                                                         }
  598.                                                         break;
  599.                                                 }
  600.                                                 default        :        
  601.                                                 {
  602.                                                         write_com(0x38);//屏幕初始化
  603.                                                         write_com(0x0c);//打開顯示 無光標 無光標閃爍
  604.                                                         Mode=0;                        //恢復(fù)正常模式
  605.                                                         break;
  606.                                                 }
  607.                                 }                                       
  608.                 }
  609. }               

  610. }
復(fù)制代碼
0.png
所有資料51hei提供下載:
智能家居.rar (141.73 KB, 下載次數(shù): 298)

評分

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

查看全部評分

回復(fù)

使用道具 舉報

ID:509148 發(fā)表于 2019-4-17 21:23 | 顯示全部樓層
sbit    fan=P3^3這個I/O口是干嘛的?
回復(fù)

使用道具 舉報

ID:517007 發(fā)表于 2019-4-20 15:49 | 顯示全部樓層
請問那個環(huán)境監(jiān)測器件怎么弄啊?  
回復(fù)

使用道具 舉報

ID:398085 發(fā)表于 2019-5-19 22:56 | 顯示全部樓層
hls123 發(fā)表于 2019-4-17 21:23
sbit    fan=P3^3這個I/O口是干嘛的?

風(fēng)扇
回復(fù)

使用道具 舉報

ID:398085 發(fā)表于 2019-5-19 22:57 | 顯示全部樓層
一生中最愛的豬 發(fā)表于 2019-4-20 15:49
請問那個環(huán)境監(jiān)測器件怎么弄啊?

哪個啊
回復(fù)

使用道具 舉報

ID:645251 發(fā)表于 2020-3-18 21:21 | 顯示全部樓層
為什么打不開你的仿真
回復(fù)

使用道具 舉報

ID:328014 發(fā)表于 2020-3-18 22:09 | 顯示全部樓層
356iukl 發(fā)表于 2020-3-18 21:21
為什么打不開你的仿真

我用Proteus 7.5成功打開 你用的什么版本?
回復(fù)

使用道具 舉報

ID:711215 發(fā)表于 2020-4-29 11:24 | 顯示全部樓層
能給一個元器件清單嗎?
回復(fù)

使用道具 舉報

ID:740947 發(fā)表于 2020-4-29 14:58 | 顯示全部樓層
謝謝分享~非常好用~
回復(fù)

使用道具 舉報

ID:773644 發(fā)表于 2020-6-9 13:23 | 顯示全部樓層
打不開,為什么
回復(fù)

使用道具 舉報

ID:1 發(fā)表于 2020-6-9 13:41 | 顯示全部樓層

我用Proteus 7.5成功打開 你用的什么版本?
回復(fù)

使用道具 舉報

ID:780844 發(fā)表于 2020-6-23 10:16 來自手機 | 顯示全部樓層
請問這個錯誤怎么改
IMG20200623101424.jpg
回復(fù)

使用道具 舉報

ID:1074288 發(fā)表于 2023-4-27 09:04 | 顯示全部樓層
仿真在哪?怎么打不開,我用的proteus8.12
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美h视频 | 中文字幕在线一区二区三区 | 久久精品国产一区二区三区不卡 | 精品国产精品国产偷麻豆 | 国产精品一区二区在线 | 综合九九 | 成人免费观看男女羞羞视频 | 殴美黄色录像 | 久久综合久久自在自线精品自 | 91亚洲视频在线 | 亚洲人在线观看视频 | 插插插干干干 | 精品国产91亚洲一区二区三区www | 狠狠综合久久av一区二区老牛 | 日日夜夜精品 | 91久久国产综合久久 | a视频在线| 精品成人av | 黄色一级大片在线免费看产 | 亚洲一区二区久久久 | 国产伦精品一区二区三区精品视频 | 成年免费大片黄在线观看岛国 | 91视频电影 | 超碰97免费观看 | 日韩精品一区二区三区视频播放 | 97国产在线观看 | 日韩精品一区二区三区在线播放 | 国产www.| 色综合99 | 国产精品久久久久久久久婷婷 | 成人一区二 | 天天射视频 | 国产精品a久久久久 | 国产精品99久久久久久久vr | 中文字幕 在线观看 | 欧美精品在线播放 | 国产精品黄色 | 亚洲午夜视频 | 在线观看av不卡 | 精品国产一区二区三区久久狼黑人 | 精品91久久|