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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于單片機(jī)的火災(zāi)報警,增加10s未解除報警自動關(guān)門、停機(jī)

[復(fù)制鏈接]
回帖獎勵 5 黑幣 回復(fù)本帖可獲得 5 黑幣獎勵! 每人限 1 次
跳轉(zhuǎn)到指定樓層
樓主
ID:1115096 發(fā)表于 2024-4-8 21:39 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本人初學(xué)者,想請求大佬能幫幫我,解決一下問題。目前整個仿真已經(jīng)實現(xiàn)煙霧、溫度檢測,聲光報警,報警閾值設(shè)定,實時溫度、煙霧顯示。我正在編寫解除報警的代碼,主要功能是10s內(nèi),若有人按下報警解除按鍵,那么聲光報警解除;若10s內(nèi)沒有按下解除報警按鍵,單片機(jī)自動實現(xiàn)關(guān)門停機(jī)功能。紅色部分為我寫的報警解除代碼
#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數(shù)據(jù)
uchar flag;      //用于判斷是否報警解除
//運(yùn)行模式
uchar Mode = 0;   //=1:設(shè)置溫度閾值  =2:設(shè)置煙霧閾值  =0:正常監(jiān)控模式  
//管腳聲明
sbit Led_RED      = P2^0;      //紅燈引腳設(shè)置
sbit Led_YELLOW   = P2^1;      //黃燈引腳設(shè)置
sbit Buzzer       = P2^2;      //蜂鳴器引腳設(shè)置
sbit Fan                       = P3^3;

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

code_fire_alarm.rar

67.61 KB, 下載次數(shù): 6

keil代碼

proteus_fire_alarm.rar

100.12 KB, 下載次數(shù): 3

proteus仿真

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

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美一级在线免费 | 精品99在线 | 精品一区二区三区在线观看 | 91精品久久久久久久久久 | 一区在线播放 | 国产精品污www一区二区三区 | 国产黄色在线观看 | 日韩精品一区二区三区中文在线 | 免费xxxx大片国产在线 | 日韩综合在线 | 国产亚洲一级 | av在线影院 | 久久99成人 | 别c我啊嗯国产av一毛片 | 亚洲成人一区二区 | 亚洲一区二区三区高清 | 91欧美精品成人综合在线观看 | 日本在线一区二区 | 亚洲综合色视频在线观看 | 一区二区在线免费观看视频 | 久久久久久久久一区 | 综合色播 | 三级成人在线 | 成人免费共享视频 | 日本一二三区电影 | 国产综合精品一区二区三区 | 精品91久久 | 九九热这里 | 亚洲午夜小视频 | 久久久av一区 | 亚洲福利在线观看 | 久久久欧洲 | 一区二区三区四区五区在线视频 | 黄色一级视频 | 天堂视频一区 | 中文字幕爱爱视频 | 伦理午夜电影免费观看 | 久久久久久蜜桃一区二区 | 日本三级在线网站 | 国产一区中文 | 在线a视频网站 |