基于单片机的智能火灾报警系统设计源程序代码Word格式.docx
- 文档编号:19579704
- 上传时间:2023-01-07
- 格式:DOCX
- 页数:18
- 大小:19.51KB
基于单片机的智能火灾报警系统设计源程序代码Word格式.docx
《基于单片机的智能火灾报警系统设计源程序代码Word格式.docx》由会员分享,可在线阅读,更多相关《基于单片机的智能火灾报警系统设计源程序代码Word格式.docx(18页珍藏版)》请在冰豆网上搜索。
{
uinti,j;
for(i=0;
i<
q;
i++)
for(j=0;
j<
120;
j++);
}
gsm.h"
/***************把数组清空**********************/
voidclear_shuzu(uchar*p,ucharnum)
num;
p[i]='
'
;
/******************把数据保存到单片机内部eeprom中**写电话号码****************/
voidwrite_eeprom()//数据保存
SectorErase(0x2000);
11;
byte_write(0x2000+i,phone1_call[i]);
byte_write(0x2012,phone1_i);
byte_write(0x2013,phone2_i);
byte_write(0x2014,s_temp);
byte_write(0x2015,s_yanwu);
byte_write(0x2016,a_a);
byte_write(0x2020,phone2_call[0]);
byte_write(0x2021,phone2_call[1]);
byte_write(0x2022,phone2_call[2]);
byte_write(0x2023,phone2_call[3]);
byte_write(0x2024,phone2_call[4]);
byte_write(0x2025,phone2_call[5]);
byte_write(0x2026,phone2_call[6]);
byte_write(0x2027,phone2_call[7]);
byte_write(0x2028,phone2_call[8]);
byte_write(0x2029,phone2_call[9]);
byte_write(0x2030,phone2_call[10]);
/******************把数据从单片机内部eeprom中读出来**读电话号码***************/
voidread_eeprom()
phone1_call[i]=byte_read(0x2000+i);
phone1_i=byte_read(0x2012);
phone2_i=byte_read(0x2013);
s_temp=byte_read(0x2014);
s_yanwu=byte_read(0x2015);
a_a=byte_read(0x2016);
phone2_call[0]=byte_read(0x2020);
phone2_call[1]=byte_read(0x2021);
phone2_call[2]=byte_read(0x2022);
phone2_call[3]=byte_read(0x2023);
phone2_call[4]=byte_read(0x2024);
phone2_call[5]=byte_read(0x2025);
phone2_call[6]=byte_read(0x2026);
phone2_call[7]=byte_read(0x2027);
phone2_call[8]=byte_read(0x2028);
phone2_call[9]=byte_read(0x2029);
phone2_call[10]=byte_read(0x2030);
/**************开机自检eeprom初始化*****************/
voidinit_eeprom()
read_eeprom();
//读电话号码
if(a_a!
=22)
{
a_a=22;
for(i=0;
{
phone1_call[i]='
phone2_call[i]='
}
phone1_i=0;
phone2_i=0;
s_temp=50;
s_yanwu=60;
write_eeprom();
//保存数据
}
/***********************18b20初始化函数*****************************/
voidinit_18b20()
bitq;
dq=1;
//把总线拿高
delay_uint
(1);
//15us
dq=0;
//给复位脉冲
delay_uint(80);
//750us
//把总线拿高等待
delay_uint(10);
//110us
q=dq;
//读取18b20初始化信号
delay_uint(20);
//200us
//把总线拿高释放总线
/*************写18b20内的数据***************/
voidwrite_18b20(uchardat)
uchari;
8;
{//写数据是低位开始
dq=0;
//把总线拿低写时间隙开始
dq=dat&
0x01;
//向18b20总线写数据了
delay_uint(5);
//60us
dq=1;
//释放总线
dat>
>
=1;
}
/*************读取18b20内的数据***************/
ucharread_18b20()
uchari,value;
//把总线拿低读时间隙开始
value>
//读数据是低位开始
if(dq==1)//开始读写数据
value|=0x80;
//60us读一个时间隙最少要保持60us的时间
}
returnvalue;
//返回数据
/*************读取温度的值读出来的是小数***************/
uintread_temp()
uintvalue;
ucharlow;
//在读取温度的时候如果中断的太频繁了,就应该把中断给关了,否则会影响到18b20的时序
init_18b20();
//初始化18b20
write_18b20(0xcc);
//跳过64位ROM
write_18b20(0x44);
//启动一次温度转换命令
delay_uint(50);
//500us
write_18b20(0xbe);
//发出读取暂存器命令
EA=0;
low=read_18b20();
//读温度低字节
value=read_18b20();
//读温度高字节
EA=1;
value<
<
=8;
//把温度的高位左移8位
value|=low;
//把读出的温度低位放到value的低八位中
value*=0.0625;
//转换到温度值
//返回读出的温度
/***********读数模转换数据********************************************************/
//请先了解ADC0832模数转换的串行协议,再来读本函数,主要是对应时序图来理解,本函数是模拟0832的串行协议进行的
//100通道
//111通道
unsignedcharad0832read(bitSGL,bitODD)
unsignedchari=0,value=0,value1=0;
SCL=0;
DO=1;
CS=0;
//开始
SCL=1;
//第一个上升沿
DO=SGL;
//第二个上升沿
DO=ODD;
//第三个上升沿
SCL=1;
SCL=0;
//开始从第四个下降沿接收数据
value<
=1;
if(DO)
value++;
{//接收校验数据
value1>
value1+=0x80;
CS=1;
if(value==value1)//与校验数据比较,正确就返回数据,否则返回0
returnvalue;
return0;
/*************定时器0初始化程序***************/
voidtime_init()
//开总中断
TMOD|=0X01;
//定时器0、定时器1工作方式1
ET0=1;
//开定时器0中断
TR0=1;
//允许定时器0定时
/********************独立按键程序*****************/
//按键值
voidkey()//独立按键程序
staticucharkey_new=0,key_l;
key_can=20;
//按键值还原
P1=0x0f;
if((P1&
0x0f)!
=0x0f)//按键按下
delay_1ms
(1);
//按键消抖动
if(((P1&
=0x0f)&
&
(key_new==1))
{//确认是按键按下
key_new=0;
key_l=(P1|0xf0);
//矩阵键盘扫描
P1=key_l;
switch(P1)
{
case0xee:
key_can=1;
break;
//得到按键值
case0xde:
key_can=4;
case0xbe:
key_can=7;
case0x7e:
key_can=10;
case0xed:
key_can=2;
case0xdd:
key_can=5;
case0xbd:
key_can=8;
case0x7d:
key_can=0;
case0xeb:
key_can=3;
case0xdb:
key_can=6;
case0xbb:
key_can=9;
case0x7b:
key_can=11;
case0xe7:
key_can=15;
case0xd7:
key_can=14;
case0xb7:
key_can=13;
case0x77:
key_can=12;
//得到按键值
}
//write_sfm2(1,0,key_can);
}
else
key_new=1;
/****************按键处理数码管显示函数***************/
voidkey_with()
if(key_can==1)//紧急报警键手动报警
if(menu_1==0)
shoudong=1;
if(key_can==12)//退出设置键
menu_1=0;
init_1602();
//初始化显示
if(key_can==15)//设置键
menu_1++;
if(menu_1>
=5)
menu_1=0;
init_1602();
//初始化显示
if(menu_1==3)//输入第一个人的手机号码
write_string(1,0,"
InputPhone1"
);
write_string(2,0,"
clear_shuzu(dis_smg,11);
for(i=0;
phone1_i;
dis_smg[i]=0x30+phone1_call[i];
write_string_num(2,0,dis_smg,phone1_i);
//显示号码
lcd1602_guanbiao(1,phone1_i+0x40);
//开光标
}
if(menu_1==4)//输入第二个人的手机号码
InputPhone2"
phone2_i;
dis_smg[i]=0x30+phone2_call[i];
write_string_num(2,0,dis_smg,phone2_i);
lcd1602_guanbiao(1,phone2_i+0x40);
if(menu_1==0)
if((key_can==2)||(key_can==3))
shoudong=0;
//取消手动报警
if(menu_1==1)//设置高温报警
if(key_can==14)
s_temp++;
//高温报警值加1
if(s_temp>
99)
s_temp=99;
if(key_can==13)
s_temp--;
//高温报警值减1
if(s_temp<
=10)
s_temp=10;
write_sfm2(1,8,s_temp);
//显示温度
write_sfm2(2,8,s_yanwu);
//显示烟物等级
write_com(0x80+7);
//将光标移动到第2行第到3位
write_com(0x0f);
//显示光标并且闪烁
//保存数据
if(menu_1==2)//设置烟物报警
s_yanwu++;
//烟物报警值加1
if(s_yanwu>
=99)
s_yanwu=99;
s_yanwu--;
//烟物报警值减1
if(s_yanwu<
=1)
s_yanwu=1;
write_com(0x80+0x40+7);
if(menu_1==3)//设置第一个人短信号码
if(key_can<
10)//只有数字键
if(phone1_i<
11)
phone1_call[phone1_i]=key_can;
dis_smg[phone1_i]=0x30+key_can;
phone1_i++;
if(phone1_i>
phone1_i=11;
write_string_num(2,0,dis_smg,phone1_i);
//显示号码
lcd1602_guanbiao(1,0+phone1_i+0x40);
if(key_can==11)//删除键
if(phone1_i!
=0)
phone1_i--;
phone1_call[phone1_i]='
dis_smg[phone1_i]='
write_string(2,0,"
}
if(menu_1==4)//设置第二个人短信号码
if(phone2_i<
phone2_call[phone2_i]=key_can;
dis_smg[phone2_i]=0x30+key_can;
phone2_i++;
if(phone2_i>
phone2_i=11;
write_string_num(2,0,dis_smg,phone2_i);
lcd1602_guanbiao(1,0+phone2_i+0x40);
if(phone2_i!
phone2_i--;
phone2_call[phone2_i]='
dis_smg[phone2_i]='
}
/****************报警函数***************/
voidclock_h_l()
staticucharvalue,value1;
if((yanwu>
=s_yanwu)||(temperature>
=s_temp)||(shoudong==1))//报警
value++;
if(value>
=2)
value=10;
beep=~beep;
//蜂鸣器报警
if(value1==0)
{
for(i=0;
6;
{
beep=~beep;
//蜂鸣器叫3声
delay_1ms(100);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 智能 火灾 报警 系统 设计 源程序 代码