基于51单片机的家居简易防盗布防撤防报警装置proteus仿真原理图PCB

功能介绍:
0.本系统采用STC89C52作为单片机
1.LCD1602液晶实时显示当前设定的布防状态
2.按键可切换布防设定
3.支持手动报警功能
4.支持一键布防,一键撤防
5.分别采用震动传感器模块和SR501红外模块来检测

原理图:
在这里插入图片描述

PCB:
在这里插入图片描述

主程序:

#include "main.h"

bit refreshFlag = 1;

char dis0[16]; //定义显示区域临时存储数组

bit monitorFlag1 = 0; //红外热电偶检测
bit monitorFlag2 = 0; //门窗异常监测
bit monitorFlag3 = 0; //玻璃破碎监测

bit mAlarmFlag = 0; //手动报警标志
bit alarmFlag1 = 0; //红外热电偶监测报警
bit alarmFlag2 = 0; //门窗异常监测报警
bit alarmFlag3 = 0; //玻璃破碎监测报警

unsigned char alarmFlagDelay = 0;


void main(void)
{
    BUZZER = OFF;
    Timer0_Init();
    LCD_Init();   //初始化液晶
    DelayMs(200); //延时有助于稳定
    LCD_Clear();  //清屏

    LCD_DispStr(0, 0, "  M1   M2   M3  ");

    while (1) //主循环
    {
        if (monitorFlag1 == 1)
        {
            if (MONITOR1 == YES) //监测到窗外有人
            {
                alarmFlag1 = 1;
            }
            else
            {
                alarmFlag1 = 0;
            }
        }
        
        if (monitorFlag2 == 1)
        {
            if (MONITOR2 == YES) //监测到门窗异常
            {
                alarmFlagDelay = 5;
                alarmFlag2 = 1;
            }
            else
            {
                if (alarmFlagDelay == 0)
                {
                    alarmFlag2 = 0;
                }
            }
        }

        if (monitorFlag3 == 1)
        {
            if (MONITOR3 == YES) //监测到玻璃破碎
            {
                alarmFlag3 = 1;
            }
            else
            {
                alarmFlag3 = 0;
            }
        }

        if (mAlarmFlag == 1) //手动报警
        {
            BUZZER = ON;
        }
        else
        {
            if ((monitorFlag1 == 1 && alarmFlag1 == 1) || (monitorFlag2 == 1 && alarmFlag2 == 1) || (monitorFlag3 == 1 && alarmFlag3 == 1)) //设防的情况下
            {
                BUZZER = ON;
            }
            else 
            {
                BUZZER = OFF;
            }
        }

        if (refreshFlag == 1) //500ms获取数据并发送
        {
            refreshFlag = 0;

            if (alarmFlagDelay > 0)
            {
                alarmFlagDelay--;
            }

            if (alarmFlag1 == 0)
            {
                if (monitorFlag1 == 0)
                {
                    LCD_DispStr(0, 1, "  OFF");
                }
                else
                {
                    LCD_DispStr(0, 1, "  ON ");
                }
            }
            else
            {
                LCD_DispStr(0, 1, "  Ala");
            }

            if (alarmFlag2 == 0)
            {
                if (monitorFlag2 == 0)
                {
                    LCD_DispStr(5, 1, "  OFF");
                }
                else
                {
                    LCD_DispStr(5, 1, "  ON ");
                }
            }
            else
            {
                LCD_DispStr(5, 1, "  Ala");
            }
            
            if (alarmFlag3 == 0)
            {
                if (monitorFlag3 == 0)
                {
                    LCD_DispStr(10, 1, "  OFF");
                }
                else
                {
                    LCD_DispStr(10, 1, "  ON ");
                }
            }
            else
            {
                LCD_DispStr(10, 1, "  Ala");
            }
        }

        KeyProcess();
    }
}

/*------------------------------------------------
                    定时器初始化子程序
------------------------------------------------*/
void Timer0_Init(void)
{
    TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响
    TH0 = (65536 - 10000) / 256; //重新赋值 10ms
    TL0 = (65536 - 10000) % 256;
    EA = 1;  //总中断打开
    ET0 = 1; //定时器中断打开
    TR0 = 1; //定时器开关打开
}

/*------------------------------------------------
                定时器中断子程序
------------------------------------------------*/
void Timer0_Interrupt(void) interrupt 1
{
    static unsigned char time10ms = 0;
    
    TH0 = (65536 - 10000) / 256; //重新赋值 10ms
    TL0 = (65536 - 10000) % 256;

    time10ms++;
    if (time10ms >= 50) // 0.5s
    {
        time10ms = 0;
        refreshFlag = 1;
    }
    
}

仿真演示视频:
https://www.bilibili.com/video/BV1pF411L7YJ/

实物演示视频:
https://www.bilibili.com/video/BV1BK411Q7cr/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值