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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1123|回復: 0
打印 上一主題 下一主題
收起左側

基于單片機的火災報警,增加10s未解除報警自動關門、停機

[復制鏈接]
回帖獎勵 5 黑幣 回復本帖可獲得 5 黑幣獎勵! 每人限 1 次
跳轉到指定樓層
樓主
ID:1115096 發表于 2024-4-8 21:39 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本人初學者,想請求大佬能幫幫我,解決一下問題。目前整個仿真已經實現煙霧、溫度檢測,聲光報警,報警閾值設定,實時溫度、煙霧顯示。我正在編寫解除報警的代碼,主要功能是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仿真

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

使用道具 舉報

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

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美一区二区三区在线看 | 日韩在线视频免费观看 | 国产精品一区二区在线观看 | 亚洲综合色网站 | 91婷婷韩国欧美一区二区 | 草草影院ccyy | www.日本精品 | 97伦理影院 | 欧美成人专区 | 亚洲在线一区二区 | 国产免费一二三区 | 欧美成人自拍视频 | 亚洲成人免费视频 | 亚洲毛片 | 久久亚洲一区二区 | 国产三级一区二区三区 | 欧美午夜精品理论片a级按摩 | 久久免费精品 | 欧美久| 日韩成人| 免费一区| 欧美一区二区三区在线观看视频 | 欧美专区在线 | 亚洲国产成人久久综合一区,久久久国产99 | 日日草夜夜草 | 又爽又黄axxx片免费观看 | 黄瓜av| 欧洲一区在线观看 | 伊人艹| 久久99网站 | 国产视频一区二区 | 亚洲淫视频 | www狠狠干 | 国产精品久久国产愉拍 | www.久久99 | 亚洲精品视频网站在线观看 | 超碰97人人人人人蜜桃 | 伊人狠狠操 | 91福利网址| 精品久久久久久久久久久下田 | 亚洲精品白浆高清久久久久久 |