智能火灾报警系统仿真源程序

上传人:hs****ma 文档编号:488422687 上传时间:2023-02-12 格式:DOC 页数:17 大小:39.50KB
返回 下载 相关 举报
智能火灾报警系统仿真源程序_第1页
第1页 / 共17页
智能火灾报警系统仿真源程序_第2页
第2页 / 共17页
智能火灾报警系统仿真源程序_第3页
第3页 / 共17页
智能火灾报警系统仿真源程序_第4页
第4页 / 共17页
智能火灾报警系统仿真源程序_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《智能火灾报警系统仿真源程序》由会员分享,可在线阅读,更多相关《智能火灾报警系统仿真源程序(17页珍藏版)》请在金锄头文库上搜索。

1、智能火灾报警系统仿真源程序#include #include eepom52.h#define uchar unsigned char #define uint unsigned int#include /数码管段选定义 0 1 2 3 4 5 6 7 8 9uchar code smg_du=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90, 0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff; /断码/数码管位选定义uchar code smg_we=0x7f,0xbf,0xdf,0xef;/uchar code smg_

2、we=0xfe,0xfd,0xfb,0xf7;uchar dis_smg8 = 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8;uchar smg_i = 3; /显示数码管的个位数sbit SCL=P34;/SCL定义为P1口的第3位脚,连接ADC0832SCL脚sbit DO=P33;/DO定义为P1口的第4位脚,连接ADC0832DO脚sbit CS=P32;/CS定义为P1口的第4位脚,连接ADC0832CS脚sbit dq = P35;/18b20 IO口的定义sbit beep = P36; /蜂鸣器IO口定义uint temperature,s_t

3、emp ; /温度的变量uchar dengji,s_dengji; /烟物等级uchar shoudong; /手动报警键uint huoyan;bit flag_300ms ;uchar key_can; /按键值的变量uchar menu_1; /菜单设计的变量bit flag_lj_en; /按键连加使能bit flag_lj_3_en; /按键连3次连加后使能 加的数就越大了 uchar key_time,flag_value; /用做连加的中间变量bit key_500ms ;uchar flag_clock;uchar zd_break_en,zd_break_value; /自

4、动退出设置界面uchar a_a;/*1ms延时函数*/void delay_1ms(uint q)uint i,j;for(i=0;iq;i+)for(j=0;j120;j+);/*小延时函数*/void delay_uint(uint q)while(q.);/*把数据保存到单片机内部eepom中*/void write_eepom()SectorErase(0x2000);byte_write(0x2000, s_temp);byte_write(0x2001, s_dengji);byte_write(0x2060, a_a);/*把数据从单片机内部eepom中读出来*/void re

5、ad_eepom()s_temp = byte_read(0x2000);s_dengji = byte_read(0x2001);a_a = byte_read(0x2060);/*开机自检eepom初始化*/void init_eepom()read_eepom();/先读if(a_a != 1)/新的单片机初始单片机内问EEPOMs_temp = 50;s_dengji = 5;a_a = 1;write_eepom();/*18b20初始化函数*/void init_18b20()bit q;dq = 1;/把总线拿高delay_uint(1); /15usdq = 0;/给复位脉冲d

6、elay_uint(80);/750usdq = 1;/把总线拿高 等待delay_uint(10);/110usq = dq;/读取18b20初始化信号delay_uint(20);/200usdq = 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_

7、uint(5); /60us读一个时间隙最少要保持60us的时间return value; /返回数据/*读取温度的值 读出来的是小数*/uint read_temp()uint value;uchar low; /在读取温度的时候如果中断的太频繁了,就应该把中断给关了,否则会影响到18b20的时序init_18b20(); /初始化18b20write_18b20(0xcc); /跳过64位ROMwrite_18b20(0x44); /启动一次温度转换命令delay_uint(50); /500usinit_18b20(); /初始化18b20write_18b20(0xcc); /跳过64

8、位ROMwrite_18b20(0xbe); /发出读取暂存器命令EA = 0;low = read_18b20(); /读温度低字节value = read_18b20(); /读温度高字节EA = 1;value = 8; /把温度的高位左移8位value |= low; /把读出的温度低位放到value的低八位中value *= 0.0625; /转换到温度值 return value; /返回读出的温度 /*读数模转换数据*/请先了解ADC0832模数转换的串行协议,再来读本函数,主要是对应时序图来理解,本函数是模拟0832的串行协议进行的/ 1 0 0 通道/ 1 1 1 通道 un

9、signed char ad0832read(bit SGL,bit ODD)unsigned char 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; /第三个上升沿SCL=0; /第三个下降沿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)/与校验数据比较,正确就返回数据,否则返回0return value;return 0;/*数码显示函数*/void display()uchar i;for(i=0;i= 3)menu_1 = 0;if(m

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号