53、基于51单片机防火防盗烟雾温度人体红外感应检测设计 (程序+原理图+PCB图+Proteus仿真+参考论文+开题报告+元器件清单等)

一、设计简介:

本设计是基于51单片机防火防盗烟雾温度人体红外感应检测设计,主要实现以下功能:

1.本设计基于STC89C51/52(与AT89S51/52、AT89C51/52通用)单片机。
2.LCD 1602液晶屏实时显示当前温度值、烟雾值以及对应的报警值。
3.用按键可以设置温度报警值和烟雾报警值。
4.还可以通过人体红外感应传感器来检测当前有没有人经过,可用作防盗功能。

主要硬件组成:

电源5V供电、LCD 1602显示屏模块、单片机最小系统、独立按键模块、蜂鸣器报警等、烟雾传感器模块、DS18B20温度传感器、人体红外感应传感器

二、原理图 

三、PCB图 

四、Proteus仿真 

五、程序源码 

部分代码: 

/********************************************************************
* 名称 : init_1602()
* 功能 : 初始化1602液晶 
* 输入 : 无
* 输出 : 无
***********************************************************************/
void init_1602()
{
    write_com(0x38);
    write_com(0x38);
    write_com(0x0c);
    write_com(0x06);
    delay_uint(1000);
    write_string(1,0,"    YW:000PPM     ");    
    write_string(2,0,"  W:00  Hw:0 OFF  ");    
    write_zifu(2,6,0XDF);     //温度单位
 
}
 
 
/***********************1ms延时函数*****************************/
void delay_1ms(uint q)
{
    uint i,j;
    for(i=0;i<q;i++)
        for(j=0;j<120;j++);
}
 
/***********************18b20初始化函数*****************************/
void init_18b20()
{
    bit q;
    dq = 1;                //把总线拿高
    delay_uint(1);        //15us
    dq = 0;                //给复位脉冲
    delay_uint(80);        //750us
    dq = 1;                //把总线拿高 等待
    delay_uint(10);        //110us
    q = dq;                //读取18b20初始化信号
    delay_uint(20);        //200us
    dq = 1;                //把总线拿高 释放总线
}
 
/*************写18b20内的数据***************/
void write_18b20(uchar dat)
{
    uchar i;
    for(i=0;i<8;i++)
    {                     //写数据是低位开始
        dq = 0;             //把总线拿低写时间隙开始 
        dq = dat & 0x01; //向18b20总线写数据了
        delay_uint(5);     // 60us
        dq = 1;             //释放总线
        dat >>= 1;
    }    
}
 
/*************读取18b20内的数据***************/
uchar read_18b20()
{
    uchar i,value;
    for(i=0;i<8;i++)
    {
        dq = 0;             //把总线拿低读时间隙开始 
        value >>= 1;     //读数据是低位开始
        dq = 1;             //释放总线
        if(dq == 1)         //开始读写数据 
            value |= 0x80;
        delay_uint(5);     //60us    读一个时间隙最少要保持60us的时间
    }
    return value;         //返回数据
}
 
/*************读取温度的值 读出来的是小数***************/
uint read_temp()
{
    uint value;
    uchar low;               //在读取温度的时候如果中断的太频繁了,就应该把中断给关了,否则会影响到18b20的时序
    init_18b20();           //初始化18b20
    write_18b20(0xcc);       //跳过64位ROM
    write_18b20(0x44);       //启动一次温度转换命令
 
    init_18b20();           //初始化18b20
    
    write_18b20(0xcc);       //跳过64位ROM
    write_18b20(0xbe);       //发出读取暂存器命令
    
    low = read_18b20();       //读温度低字节
    value = read_18b20();  //读温度高字节
    value <<= 8;           //把温度的高位左移8位
    value |= low;           //把读出的温度低位放到value的低八位中
    value *= 0.0625;           //转换到温度值 
    return value;           //返回读出的温度 
}
 
/***********读数模转换数据********************************************************/    
//请先了解ADC0832模数转换的串行协议,再来读本函数,主要是对应时序图来理解,本函数是模拟0832的串行协议进行的
unsigned 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=ODD;
    SCL=1;      //第二个上升沿
    SCL=0;
    DO=SGL;
    for(i=0;i<8;i++)
    {
        SCL=0; //开始从第四个下降沿接收数据
        value<<=1;
        SCL=1;
        if(DO)
            value++;                        
    }
    return value;
}
 
 
/********************独立按键程序*****************/
uchar key_can;     //按键值
 
void key()     //独立按键程序
{
    static uchar key_new;
    key_can = 20;                   //按键值还原
    P1 |= 0x0f;
    if((P1 & 0x0f) != 0x0f)        //按键按下
    {
        delay_1ms(1);             //按键消抖动
        if(((P1 & 0x0f) != 0x0f) && (key_new == 1))
        {                        //确认是按键按下
            key_new = 0;
            switch(P1 & 0x0f)
            {
                case 0x0e: key_can = 1; break;       //得到k1键值
                case 0x0d: key_can = 2; break;       //得到k2键值
                case 0x0b: key_can = 3; break;       //得到k3键值
                case 0x08: 

六、资源获取

本项目包含的所有文件都可以点击下面的名片,发送 “ 53、基于51单片机防火防盗烟雾温度人体红外感应检测设计 ” 获取!
项目纯手打,不是免费的哦~
希望可以帮到你哈! 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值