单片机的防火报警

一、设计思路

以STC12C5A60S2去控制火焰传感器YL-38和DS18B20温度传感器,采集获取数据,并通过HC-05蓝牙去把数据发送到手机蓝牙助手上面显示,再有LED和蜂鸣器做简单报警功能。

二、电路设计

电路原理图

三、程序设计

DS18B20驱动程序

#include "config.h"
#include <intrins.h>
sbit IO_18B20 = P3^7;  

void Delay_us(unsigned char us)
{
   
    do {
   
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
    } while (--us);
}

bit Get18B20Ack()
{
   
    bit ack;
    EA = 0;   
    IO_18B20 = 0;
    Delay_us(250);
    Delay_us(250);
    IO_18B20 = 1;
    Delay_us(60);    
    ack = IO_18B20;   
    while(!IO_18B20); 
    EA = 1;      
    return ack;
}

void Write18B20(unsigned char dat)
{
   
    unsigned char mask;
    EA = 0;   
    for (mask=0x01; mask!=0; mask<<=1)  
    {
   
        IO_18B20 = 0;       
        Delay_us(2);
        if ((mask&dat) == 0)  
            IO_18B20 = 0;
        else
            IO_18B20 = 1;
        Delay_us(60);         
        IO_18B20 = 1;         
    }
    EA = 1;  
}

unsigned char Read18B20()
{
   
    unsigned char dat;
    unsigned char mask;    
    EA = 0;   
    for (mask=0x01; mask!=0; mask<<=1)  
    {
   
        IO_18B20 = 0;     
        Delay_us(2);
        IO_18B20 = 1;        
        Delay_us(2);         
        if (!IO_18B20)       
            dat &= ~mask;
        else
            dat |= mask;
        Delay_us(60);         
    }
    EA = 1;    
    return dat;
}

bit Start18B20()
{
   
    bit ack;
    ack = Get18B20Ack();  
    if (ack == 0)         
    {
   
        Write18B20(0xCC);  
        Write18B20(0x44); 
    }
    return ~ack;  
}

bit Get18B20Temp(int *temp)
{
   
    bit ack;
    unsigned char LSB, MSB; 
    ack = Get18B20Ack();    
    if (ack == 0)           
    {
   
        Write18B20(0xCC);   
        Write18B20(0xBE); 
        LSB = Read18B20();  
        MSB = Read18B20();
        *temp = ((int)MSB << 8) + LSB;  
    }
    return ~ack;  
}
  • 8
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值