ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:19.41KB ,
资源ID:24232346      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/24232346.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于单片机的智能火灾报警系统设计源程序代码.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于单片机的智能火灾报警系统设计源程序代码.docx

1、基于单片机的智能火灾报警系统设计源程序代码#include /调用单片机头文件#define uchar unsigned char /无符号字符型 宏定义 变量围0255#define uint unsigned int /无符号整型 宏定义 变量围065535#include #include lcd1602.h#include eeprom52.hsbit CS=P24; /CS定义为P2口的第4位脚,连接ADC0832CS脚sbit SCL=P23; /SCL定义为P2口的第3位脚,连接ADC0832SCL脚sbit DO=P22; /DO定义为P2口的第2位脚,连接ADC0832DO

2、脚sbit dq = P20; /18b20 IO口的定义sbit beep = P32; /蜂鸣器IO口定义uint temperature,s_temp ; /温度的变量uchar yanwu,s_yanwu; /烟物等级uchar shoudong; /手动报警键bit flag_300ms ;uchar key_can; /按键值的变量uchar menu_1; /菜单设计的变量bit key_500ms ;uchar phone1_i = 0; /是多少位uchar phone2_i = 0; /是多少位uchar phone1_call11= ;uchar phone2_call1

3、1= ;uchar dis_smg11;/*1ms延时函数*/void delay_1ms(uint q) uint i,j; for(i=0;iq;i+) for(j=0;j120;j+);#include gsm.h/*把数组清空*/void clear_shuzu(uchar *p,uchar num) for(i=0;inum;i+) pi = ;/*把数据保存到单片机部eeprom中*写*/void write_eeprom() /数据保存 SectorErase(0x2000); for(i=0;i11;i+) byte_write(0x2000 + i,phone1_calli)

4、; 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_call0); byte_write(0x2021,phone2_call1); byte_write(0x2022,phone2_call2); byte_write(0x2023,phone2_call3); byte_write(0x2024,phone2_cal

5、l4); byte_write(0x2025,phone2_call5); byte_write(0x2026,phone2_call6); byte_write(0x2027,phone2_call7); byte_write(0x2028,phone2_call8); byte_write(0x2029,phone2_call9); byte_write(0x2030,phone2_call10); /*把数据从单片机部eeprom中读出来*读*/void read_eeprom() for(i=0;i11;i+) phone1_calli = byte_read(0x2000+i); p

6、hone1_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_call0 = byte_read(0x2020); phone2_call1 = byte_read(0x2021); phone2_call2 = byte_read(0x2022); phone2_call3 = byte_read(0x2023); phone2_call4 = byte_rea

7、d(0x2024); phone2_call5 = byte_read(0x2025); phone2_call6 = byte_read(0x2026); phone2_call7 = byte_read(0x2027); phone2_call8 = byte_read(0x2028); phone2_call9 = byte_read(0x2029); phone2_call10 = byte_read(0x2030); /*开机自检eeprom初始化*/void init_eeprom() read_eeprom();/读 if(a_a != 22) a_a = 22; for(i=0

8、;i11;i+) phone1_calli = ; phone2_calli = ; phone1_i = 0; phone2_i = 0; s_temp = 50; s_yanwu = 60; write_eeprom(); /保存数据 /*18b20初始化函数*/void init_18b20() bit q; dq = 1; /把总线拿高 delay_uint(1); /15us dq = 0; /给复位脉冲 delay_uint(80); /750us dq = 1; /把总线拿高 等待 delay_uint(10); /110us q = dq; /读取18b20初始化信号 dela

9、y_uint(20); /200us dq = 1; /把总线拿高 释放总线/*写18b20的数据*/void write_18b20(uchar dat) uchar i; for(i=0;i= 1; /*读取18b20的数据*/uchar read_18b20() uchar i,value; for(i=0;i= 1; /读数据是低位开始 dq = 1; /释放总线 if(dq = 1) /开始读写数据 value |= 0x80; delay_uint(5); /60us 读一个时间隙最少要保持60us的时间 return value; /返回数据/*读取温度的值 读出来的是小数*/u

10、int read_temp() uint value; uchar low; /在读取温度的时候如果中断的太频繁了,就应该把中断给关了,否则会影响到18b20的时序 init_18b20(); /初始化18b20 write_18b20(0xcc); /跳过64位ROM write_18b20(0x44); /启动一次温度转换命令 delay_uint(50); /500us init_18b20(); /初始化18b20 write_18b20(0xcc); /跳过64位ROM write_18b20(0xbe); /发出读取暂存器命令 EA = 0; low = read_18b20();

11、 /读温度低字节 value = read_18b20(); /读温度高字节 EA = 1; value = 8; /把温度的高位左移8位 value |= low; /把读出的温度低位放到value的低八位中 value *= 0.0625; /转换到温度值 return value; /返回读出的温度 /*读数模转换数据*/ /请先了解ADC0832模数转换的串行协议,再来读本函数,主要是对应时序图来理解,本函数是模拟0832的串行协议进行的 / 1 0 0 通道 / 1 1 1 通道 unsigned char ad0832read(bit SGL,bit ODD) unsigned c

12、har i=0,value=0,value1=0; SCL=0; DO=1; CS=0; /开始 SCL=1; /第一个上升沿 SCL=0; DO=SGL; SCL=1; /第二个上升沿 SCL=0; DO=ODD; SCL=1; /第三个上升沿 DO=1; for(i=0;i8;i+) SCL=1; SCL=0; /开始从第四个下降沿接收数据 value=1; if(DO) value+; for(i=0;i=1; if(DO) value1+=0x80; SCL=1; SCL=0; CS=1; SCL=1; if(value=value1) /与校验数据比较,正确就返回数据,否则返回0 r

13、eturn value; return 0;/*定时器0初始化程序*/void time_init() EA = 1; /开总中断 TMOD |= 0X01; /定时器0、定时器1工作方式1 ET0 = 1; /开定时器0中断 TR0 = 1; /允许定时器0定时/*独立按键程序*/uchar key_can; /按键值void key() /独立按键程序 static uchar key_new = 0, key_l; key_can = 20; /按键值还原 P1 = 0x0f; if(P1 & 0x0f) != 0x0f) /按键按下 delay_1ms(1); /按键消抖动 if(P1

14、 & 0x0f) != 0x0f) & (key_new = 1) /确认是按键按下 key_new = 0; key_l = (P1 | 0xf0); /矩阵键盘扫描 P1 = key_l; switch(P1) case 0xee: key_can = 1; break; /得到按键值 case 0xde: key_can = 4; break; /得到按键值 case 0xbe: key_can = 7; break; /得到按键值 case 0x7e: key_can = 10; break; /得到按键值 case 0xed: key_can = 2; break; /得到按键值 c

15、ase 0xdd: key_can = 5; break; /得到按键值 case 0xbd: key_can = 8; break; /得到按键值 case 0x7d: key_can = 0; break; /得到按键值 case 0xeb: key_can = 3; break; /得到按键值 case 0xdb: key_can = 6; break; /得到按键值 case 0xbb: key_can = 9; break; /得到按键值 case 0x7b: key_can = 11; break; /得到按键值 case 0xe7: key_can = 15; break; /得

16、到按键值 case 0xd7: key_can = 14; break; /得到按键值 case 0xb7: key_can = 13; break; /得到按键值 case 0x77: key_can = 12; break; /得到按键值 / write_sfm2(1,0,key_can); else key_new = 1; /*按键处理数码管显示函数*/void key_with() if(key_can = 1) /紧急报警键 手动报警 if(menu_1 = 0) shoudong = 1; if(key_can = 12) /退出设置键 menu_1 = 0; init_1602

17、() ; /初始化显示 if(key_can = 15) /设置键 menu_1 +; if(menu_1 = 5) menu_1 = 0; init_1602() ; /初始化显示 if(menu_1 = 3) /输入第一个人的手机 write_string(1,0, Input Phone 1 ); write_string(2,0, ); clear_shuzu(dis_smg,11); for(i=0;iphone1_i;i+) dis_smgi = 0x30 + phone1_calli; write_string_num(2,0,dis_smg,phone1_i); /显示 lcd

18、1602_guanbiao(1,phone1_i + 0x40); /开光标 if(menu_1 = 4) /输入第二个人的手机 write_string(1,0, Input Phone 2 ); write_string(2,0, ); clear_shuzu(dis_smg,11); for(i=0;i 99) s_temp = 99; if(key_can = 13) s_temp - ; /高温报警值减1 if(s_temp = 99) s_yanwu = 99; if(key_can = 13) s_yanwu -; /烟物报警值减1 if(s_yanwu = 1) s_yanwu

19、 = 1; write_sfm2(1,8,s_temp); /显示温度 write_sfm2(2,8,s_yanwu); /显示烟物等级 write_(0x80+0x40+7); /将光标移动到第2行第到3位 write_(0x0f); /显示光标并且闪烁 write_eeprom(); /保存数据 if(menu_1 = 3) /设置第一个人短信 if(key_can 10) /只有数字键 if(phone1_i 11) phone1_i = 11; write_string_num(2,0,dis_smg,phone1_i); /显示 lcd1602_guanbiao(1,0 + phon

20、e1_i + 0x40); /开光标 if(key_can = 11) /删除键 if(phone1_i != 0) phone1_i -; phone1_callphone1_i = ; dis_smgphone1_i = ; write_string(2,0, ); write_string_num(2,0,dis_smg,phone1_i); /显示 lcd1602_guanbiao(1,0 + phone1_i + 0x40); /开光标 write_eeprom(); /保存数据 if(menu_1 = 4) /设置第二个人短信 if(key_can 10) /只有数字键 if(ph

21、one2_i 11) phone2_i = 11; write_string_num(2,0,dis_smg,phone2_i); /显示 lcd1602_guanbiao(1,0 + phone2_i + 0x40); /开光标 if(key_can = 11) /删除键 if(phone2_i != 0) phone2_i -; phone2_callphone2_i = ; dis_smgphone2_i = ; write_string(2,0, ); write_string_num(2,0,dis_smg,phone2_i); /显示 lcd1602_guanbiao(1,0 +

22、phone2_i + 0x40); /开光标 write_eeprom(); /保存数据 /*报警函数*/void clock_h_l() static uchar value,value1; if(yanwu = s_yanwu) | (temperature = s_temp) | (shoudong = 1) /报警 value +; if(value = 2) value = 10; beep = beep; /蜂鸣器报警 if(value1 = 0) for(i=0;i6;i+) beep = beep; /蜂鸣器叫3声 delay_1ms(100); beep = 1; /关闭蜂鸣器 value1 = 1; if(phone

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1