{
wuxian=0; led0=1;
led1=1; //起始时灯灭 init_t0(); //初始化T0 while(1) {
temp=ReadTemperature(void); //读取18b20温度
TempH=temp>>4; //本系统只考虑整数,故去掉小数点后的温度值
DelayMs(1000); //延时1s
if(!mq2) //等待mq2检测到烟雾(比较器输出高电平) {
if(TempH>50 && guangmin==1) // 温度大于50度,且光敏二极管检测到信号
{
wuxian=1; //发射无线脉冲信号
led_flag=1; //同时led标志打开,使led开始闪烁(周期约1.2s) while(mq2); //等待比较器输出低电平 wuxian=0;
led_flag=0; //led标志关闭,使led停止闪烁 led0=1; led1=1; led2=1; } } } }
4.2编码程序的设计思路
15
该编码程序是当单片机处理器判断到有火情之后要编一串脉冲送给无线发送模块的发送端,这串脉冲将包含一个有效脉冲。下图为编码程序的流程图。
否 P1.0口有脉冲
是
串口TXD编码 图4.2
所编的脉冲为:
开始 单片机初始化 检测P1.0口 编码部分程序
void init_t0() //初始化T0 {
TMOD |= 0x01;
//16位计时模式
TH0=(65536-2000)/256; //设定溢出率 TL0=(65536-2000)%6; EA=1;
16
ET0=1; TR0=1; }
void timer0(void) interrupt 1 //t0中断服务程序,用于控制led的闪烁 {
TH0=(65536-2000)/256; TL0=(65536-2000)%6; num++;
if(num==150) { num=0;
if(led_flag==1) {
led0=~led0; led1=~led1; led2=~led2; } } }
void DelayUs2x(unsigned char t) { while(--t); }
void DelayMs(unsigned int t) //1ms延时程序 {
17
while(t--) {
//大致延时1mS DelayUs2x(245); } }
DelayUs2x(245);
4.3接收模块程序的设计思路
该程序是无线接收模块的接收端收到发送端发送过来的信号后传给单片机处理器,单片机处理器进行解码,判断收到的是不是指定的那串脉冲。这里要注意首先要该段脉冲是否有效,只有脉冲有效时后面的脉冲才有效,进而才能确接收模块程序流程图如图4.3:
检测INT0状态 否 是否接收到脉冲
是 否
18 开始 单片机初始化
为有效信号
是
结束 报警 图4.3 解码部分程序
#include \sbit led=P1^1; sbit wuxian=P3^2; sbit mingdi=P1^2;
void DelayMs(unsigned int t); main() {
mingdi=0; led=1; wuxian=0; while(1) {
while(!wuxian); //循环等待无线信号
DelayMs(200); //延时再重测,以消除噪声电平导致的误动作 if(wuxian) //延时200ms再次检测检测到高电平,则说明不是噪声电平
{
mingdi=1; //蜂鸣器响,led亮 led=0;
19
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库无线多功能火灾报警器的设计与实现 - 图文(4)在线全文阅读。
相关推荐: