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

標題: 基于單片機的火災報警,增加10s未解除報警自動關門、停機 [打印本頁]

作者: xlopp    時間: 2024-4-8 21:39
標題: 基于單片機的火災報警,增加10s未解除報警自動關門、停機
本人初學者,想請求大佬能幫幫我,解決一下問題。目前整個仿真已經實現煙霧、溫度檢測,聲光報警,報警閾值設定,實時溫度、煙霧顯示。我正在編寫解除報警的代碼,主要功能是10s內,若有人按下報警解除按鍵,那么聲光報警解除;若10s內沒有按下解除報警按鍵,單片機自動實現關門停機功能。紅色部分為我寫的報警解除代碼
#include <reg52.h>
#include <string.h>
#include <stdio.h>
#include "intrins.h"
#include "delay.h"
#include "LCD1602.h"
#include "ADC0832.h"
#include "DS18B20.h"
#include "key.h"
//#include "alarm_flag.h"
#include "motor.h"



#define uchar unsigned char
#define uint  unsigned int

uchar pre_T = 50;         //溫度報警閾值
uchar pre_Smoke = 100;    //煙霧報警閾值
uint  T;           //溫度值全局變量
uchar Smoke;     //用于讀取ADC數據
uchar flag;      //用于判斷是否報警解除
//運行模式
uchar Mode = 0;   //=1:設置溫度閾值  =2:設置煙霧閾值  =0:正常監控模式  
//管腳聲明
sbit Led_RED      = P2^0;      //紅燈引腳設置
sbit Led_YELLOW   = P2^1;      //黃燈引腳設置
sbit Buzzer       = P2^2;      //蜂鳴器引腳設置
sbit Fan                       = P3^3;

void main(void)
{
        uchar key,i,j;
        uchar flag;
        T = correct_T();      //初始化時調用溫度讀取函數 防止開機85°C
        LCDInit();            //調用初始化顯示函數
  LCDWriteStr(0,0,"SET T:00   E:000");//開機界面
        LCDWriteStr(1,0,"NOW T:00.0 E:000");
        delay_ms(1000);
        T = correct_T();
        
        
        while(1)
        {
                key = Key_Scan();         //按鍵掃描
                Smoke = ADC0832(0);       //讀取煙霧值
    T = correct_T();          //讀取溫度值

                if(key == KEY_SET)  //按鍵按下一次,則模式加1
                {
                        Mode++;//改變模式值
                }
                switch(Mode)
                {
                        case 0://正常監控模式
                        {
                                LCD_Display(pre_T,pre_Smoke,T,Smoke);//顯示預設溫度,預設煙霧,溫度值,煙霧值
        if(Smoke >= pre_Smoke)         //煙霧值大于等于預設值時
                                {
                                        Led_RED = 0;              //煙霧報警燈亮
                                //        Fan = 0;
                                        Buzzer = 0;               //蜂鳴器報警
                                       
                for(i=0;i<5000;i++)      //延時十秒
               {
                        for(j=0;j<110;j++);
           {
                               if(key == KEY_SOLVE)      //報警解除鍵按下
                              {        
                                                        flag = 0;                  //解除循環標志
                                      Led_RED = 1;              // 解除聲光報警
                                                        Buzzer = 1;              //蜂鳴器關閉
                                      break;                  //跳出內層循環
                              }
                                                else
                                                        flag = 1;
                                         }
                 if(flag == 0)                 //報警解除鍵按下,跳出外層循環
                    break;                    //跳出循環
                                         else if((flag == 1) && (i == 4999))
                                            Move_positive(50);
                                   }
                          }
                                else  //煙霧值小于預設值時
                                {
                                  Led_RED = 1;              //煙霧報警燈滅
                                //        Fan = 1;
                                }
                          if(T >=  (pre_T*10))        
                                //溫度大于等于預設溫度值時
                                //(為什么是大于預設值*10:因為我們要顯示的溫度是有小數點后一位,
                                //是一個3位數,25.9°C時實際讀的數是259,所以判斷預設值時將預設值*10)
        {
                                        Buzzer = 0;                  //蜂鳴器報警
                                        Led_YELLOW = 0;              //溫度報警燈亮
                                        for(i=0;i<5000;i++)      //延時十秒
               {
                        for(j=0;j<110;j++);
           {
                               if(key == KEY_SOLVE)      //報警解除鍵按下
                              {        
                                                        flag = 0;                  //解除循環標志
                                      Led_RED = 1;              // 解除聲光報警
                                                        Buzzer = 1;              //蜂鳴器關閉
                                      break;                  //跳出內層循環
                              }
                                                else
                                                        flag = 1;
                                         }
                 if(flag == 0)                 //報警解除鍵按下,跳出外層循環
                    break;//跳出循環
           else if((flag == 1) && (i == 4999))
                                            Move_positive(50);
                                   }
                                }
                                else  //溫度值小于預設值時
                                {
                                        Led_YELLOW = 1;           //溫度報警燈滅
                                }
                                
                                if((Smoke < pre_Smoke) && (T < (pre_T*10)))
                                {
                                  Buzzer = 1;
                                }
                                break;
                        }
                        case 1://預設溫度模式
                        {
                                LCDSetPosition(0,5);                  //指定位置
                                LCDWriteCmd(0x0d);     //陰影閃爍LCD_DIS_ON_SHADE_ON
        if(key == KEY_ADD)//加按鍵按下
                                {
                                  pre_T++;
                                        if(pre_T >= 99)//當閥值加到大于等于99時
                                                pre_T = 99;//閥值固定為99
                                                LCD_Write_Char(0,6,pre_T,2);//顯示預設溫度
                                }
                                if(key == KEY_MINUS)//減鍵按下
                                {
           if(pre_T <= 1)                  //當溫度上限值減小到1時               
                                                pre_T = 1;                    //固定為1
                                                pre_T--;                      //預設溫度值減一,最小為0
                                                LCD_Write_Char(0,6,pre_T,2);  //顯示預設溫度                                                               
                                }
                                break;//執行后跳出switch
                        }
                        case 2:
                        {
                                LCDSetPosition(0,12);                  //指定位置
                                LCDWriteCmd(0x0d);      //顯示開,光標關,光標不閃爍LCD_DIS_ON_SHADE_ON
                                if(key == KEY_ADD)         //加鍵按下
                                {
                                  if(pre_Smoke >= 255)
                                                pre_Smoke = 254;//閥值固定為254
                                          pre_Smoke++; //預設煙霧值(閥值)加1,最大為255
                                          LCD_Write_Char(0,13,pre_Smoke,3);
                                }
                                if(key == KEY_MINUS)//減鍵按下
                                {
           if(pre_Smoke <= 1)//當溫度上限值減小到1時               
                                                pre_Smoke = 1;//固定為1
                                                pre_Smoke--;//預設溫度值減一,最小為0
                                                LCD_Write_Char(0,13,pre_Smoke,3);////顯示預設溫度                                                               
                                }
                                break;//執行后跳出switch
                        }
                        default:
                        {
                                LCDWriteCmd(0x38);//屏幕初始化LCD_MODE_PIN8
                                LCDWriteCmd(0x0c);//打開顯示 無光標 無光標閃爍LCD_DIS_ON
                                Mode = 0;
                                break;
                        }        
          }
  }
}
紅框部分是我自己在基本功能上添加的解除報警代碼。有大佬幫忙看看嗎?謝謝了,在proteus中仿真,按下報警解除鍵沒用,而且實時煙霧溫度測量會出現延時,甚至改變環境煙霧溫度,不能正確反應在lcd屏上。

code_fire_alarm.rar

67.61 KB, 下載次數: 6

keil代碼

proteus_fire_alarm.rar

100.12 KB, 下載次數: 3

proteus仿真






歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 成人超碰在线 | 欧美激情综合色综合啪啪五月 | 国产高清无av久久 | 国产成人精品一区二区三 | 久久中文字幕一区 | 国产精品视频不卡 | www.99re | av一区二区三区 | 国产精品视频一区二区三区四区国 | 欧美日韩网站 | 欧美 日韩 亚洲91麻豆精品 | 99久久婷婷国产综合精品电影 | 国产亚洲一区二区三区 | 日本免费一区二区三区四区 | 亚洲一区二区三区视频 | 91天堂| 99久久婷婷国产综合精品电影 | 日本a视频 | 亚洲欧美在线一区 | 91免费看片神器 | 成人精品一区二区三区中文字幕 | 国产片一区二区三区 | 一区二区三区视频免费看 | 久久国品片 | 日韩欧美在线免费 | 日本视频在线播放 | 亚洲97| 日韩久久久久久 | 日韩成人精品在线 | 蜜月va乱码一区二区三区 | 羞羞视频免费观看入口 | 成人国产精品久久久 | 91一区二区在线观看 | 日本在线看片 | 91.com视频 | av中文在线播放 | 久久久久久亚洲精品不卡 | 国产精品视频在线播放 | 成人在线不卡 | xx视频在线 | 亚洲国产二区 |