一、设计思路
以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;
}