基于单片机的智能火灾报警系统大学论文 下载本文

附件二:部分程序源代码

#include #include \#define uchar unsigned char #define uint unsigned int #include

//数码管段选定义 0 1 2 3 4 5

6 7 8 uchar code smg_du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,

0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff};

//断码

//数码管位选定义

uchar smg_i = 3; //显示数码管的个位数

sbit dq = P3^5; //18b20 IO口的定义

sbit beep = P3^6; //蜂鸣器IO口定义 uint temperature,s_temp ; //温度的变量 uchar dengji,s_dengji; //烟物等级 uchar shoudong; //手动报警键 uint huoyan;

bit flag_300ms ; uchar key_can;

//按键值的变量

uchar menu_1; //菜单设计的变量 bit flag_lj_en; //按键连加使能

bit key_500ms ; uchar flag_clock;

uchar zd_break_en,zd_break_value; //自动退出设置界面 uchar a_a;

9

/***********************1ms延时函数*****************************/ void delay_1ms(uint q) { }

/**************开机自检eepom初始化*****************/ void init_eepom() { }

/***********************18b20初始化函数*****************************/ { }

uint i,j; for(i=0;i

for(j=0;j<120;j++);

read_eepom(); if(a_a != 1) { }

//先读

//新的单片机初始单片机内问EEPOM

s_temp = 50; s_dengji = 5; a_a = 1; write_eepom();

bit q; dq = 1;

//把总线拿高

delay_uint(1); //15us dq = 0;

//给复位脉冲 //750us

//把总线拿高 等待 //110us

//读取18b20初始化信号 //200us

//把总线拿高 释放总线

delay_uint(80); dq = 1;

delay_uint(10); q = dq;

delay_uint(20); dq = 1;

/*************写18b20内的数据***************/ void write_18b20(uchar dat) { }

/*************读取18b20内的数据***************/ uchar read_18b20() {

uchar i,value; for(i=0;i<8;i++) {

//释放总线 //开始读写数据

uchar i; for(i=0;i<8;i++) { }

//写数据是低位开始

dq = 0;

dq = dat & 0x01; //向18b20总线写数据了 delay_uint(5); // 60us dq = 1; dat >>= 1;

//释放总线

dq = 1;

}

}

return value;

if(dq == 1)

value |= 0x80;

delay_uint(5); //60us 读一个时间隙最少要保持60us的时间

//返回数据

/*************读取温度的值 读出来的是小数***************/ uint read_temp() {

uint value; uchar low;

//

init_18b20(); delay_uint(50);

//初始化18b20

//500us

init_18b20(); EA = 0;

low = read_18b20();

//读温度低字节 //初始化18b20

value = read_18b20(); //读温度高字节 EA = 1;

value *= 0.0625; //转换到温度值

}

/***********读数模转换数据********************************************************/ {

return value; //返回读出的温度

// 1 0 0 通道 // 1 1 1 通道

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;i<8;i++) { }

SCL=1;

SCL=0; //开始从第四个下降沿接收数据 value<<=1; if(DO)

value++;