標(biāo)題:
注釋詳細的單片機火災(zāi)報警器程序和電路原理圖
[打印本頁]
作者:
51hei圓圓
時間:
2023-5-6 15:49
標(biāo)題:
注釋詳細的單片機火災(zāi)報警器程序和電路原理圖
51單片機火災(zāi)報警器電路原理圖如下:
原理圖.png
(46.15 KB, 下載次數(shù): 32)
下載附件
2023-5-6 15:46 上傳
單片機源程序如下:
//程序頭函數(shù)
#include <reg52.h>
//顯示函數(shù)
#include <display.h> //顯示函數(shù)display.h在工程里 也可鼠標(biāo)選中左邊右鍵open document <display.h>
//宏定義
#define uint unsigned int
#define uchar unsigned char
#define Data_ADC0809 P1 //定義P1口為Data_ADC0809 (之后的程序里Data_ADC0809即代表P1口)
//管腳聲明
sbit LED_yanwu= P2^1; //煙霧報警燈
sbit baojing= P2^5; //蜂鳴器接口
//ADC0809
sbit ST=P3^3;
sbit EOC=P3^6;
sbit OE=P3^2;
//按鍵
sbit Key1=P2^6; //設(shè)置鍵
sbit Key2=P2^7; //加按鍵
sbit Key3=P3^7; //減按鍵
//酒精含量變量
uchar temp; //用于讀取ADC數(shù)據(jù)
uchar yushe_yanwu=45; //煙霧預(yù)設(shè)值
//按鈕模式|
uchar Mode=0; //=1是設(shè)置溫度閥值 =2是設(shè)置煙霧閥值
//函數(shù)聲明
extern uchar ADC0809();
extern void Key();
//ADC0809讀取信息
uchar ADC0809()
{
uchar temp_=0x00;
//初始化高阻太
OE=0;
//轉(zhuǎn)化初始化
ST=0;
//開始轉(zhuǎn)換
ST=1;
ST=0;
//外部中斷等待AD轉(zhuǎn)換結(jié)束
while(EOC==0)
//讀取轉(zhuǎn)換的AD值
OE=1;
temp_=Data_ADC0809;
OE=0;
return temp_;
}
void Key()
{
//模式選擇
if(Key1==0) //設(shè)置按鍵
{
while(Key1==0);
if(Mode>=2) Mode=0;
else
{
// write_com(0x38);//屏幕初始化
write_com(0x0f);//打開顯示 無光標(biāo) 光標(biāo)閃爍
// write_com(0x06);//當(dāng)讀或?qū)懸粋字符是指針后一一位
Mode++; //模式加一
switch(Mode) //判斷模式的值
{
case 1:
{
write_com(0x80+7);//為1時 溫度閥值的位置閃爍
break; //執(zhí)行后跳出switch
}
case 2: //當(dāng)模式加到3時
{
// write_com(0x38);//屏幕初始化
write_com(0x0c);//打開顯示 無光標(biāo) 無光標(biāo)閃爍
Mode=0; //模式清零
break;
}
}
}
}
if(Key2==0&&Mode!=0) //加按鍵只有在模式不等于0時有效
{
while(Key2==0);
yushe_yanwu++; //同溫度閥值設(shè)置
if(yushe_yanwu>=255)
yushe_yanwu=255;
write_com(0x80+13);
write_data(0x30+yushe_yanwu/100);
write_data(0x30+yushe_yanwu%100/10);
write_data(0x30+yushe_yanwu%10);
write_com(0x80+15);
}
if(Key3==0&&Mode!=0)
{
while(Key3==0);
yushe_yanwu--; //同上
if(yushe_yanwu<=0)
yushe_yanwu=0;
write_com(0x80+13);
write_data(0x30+yushe_yanwu/100);
write_data(0x30+yushe_yanwu%100/10);
write_data(0x30+yushe_yanwu%10);
write_com(0x80+15);
}
}
/*****主函數(shù)*****/
void main()
{
Init1602(); //調(diào)用初始化顯示函數(shù)
while(1) //進入循環(huán)
{
temp=ADC0809(); //讀取煙霧值
Key(); //調(diào)用按鍵函數(shù) 掃描按鍵
if(Mode==0) //只有當(dāng)模式為0時才會執(zhí)行以下的閥值判斷部分
{
Display_1602(yushe_yanwu,temp); //顯示預(yù)設(shè)煙霧,煙霧值
if(temp>=yushe_yanwu) //煙霧值大于等于預(yù)設(shè)值時
{
LED_yanwu=0; //煙霧指示燈亮
baojing=0; //蜂鳴器報警
}
else //煙霧值小于預(yù)設(shè)值時
{
LED_yanwu=1; //關(guān)掉報警燈
}
if(temp<yushe_yanwu) //當(dāng)煙霧小于預(yù)設(shè)值并且溫度也小于預(yù)設(shè)值時 (&&:邏輯與,左右兩邊的表達式都成立(都為真,也就是1)時,該if語句才成立)
{
baojing=1; //停止報警
}
}
}
}
復(fù)制代碼
Keil代碼下載:
火災(zāi)報警器程序和pdf格式原理圖.7z
(79.91 KB, 下載次數(shù): 31)
2023-5-6 15:49 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
dyjs
時間:
2023-5-6 21:51
哥,我現(xiàn)在做設(shè)計,我缺一個文件代碼,,哥,能不能幫幫我
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1