51单片机项目设计:基于51单片机 无线防盗报警器设计

该项目基于51单片机,为防盗、布防等设计,最大支持4个点位布防,布防点有人会报警。项目功能包括显示和修改时间等,介绍了主控、显示屏等材料选择,阐述了接收和发送设备原理图设计、PCB设计以及程序设计等内容。


哔哩哔哩视频链接: https://www.bilibili.com/video/BV1Wc411C7xH/?vd_source=e5082ef80535e952b2a4301746491be0

在这里插入图片描述

项目属性

作者 化作尘
是否开源 开源
开发难易程度 4.6分
复刻难易程度 3.8分
毕业设计、课程设计、学习 适用
视频演示 哔哩哔哩 : 化作尘my
文档教程 此篇博客
技术支持方式 作者扣扣

项目背景

此项目为做坏事、防盗、布防而设计,设计最大4个点位布防,布防点位有人会报警,布防点距离主机可达100-200米,遇到遮挡距离会减少。
场景1 :防盗
当家里有一间或者多间房间内部有重要或者贵重物资时,可以每间房放置一个发送器,接收器放置在有人监控区域内,当有人进入其中一个房间,就会报警,并显示是哪一间房间的报警器触发报警在这里插入图片描述

场景2:做坏事
当你想去某个富豪家里偷东西时,你可以把布防点位设置在门口,走廊,或者大门,当你在屋子里偷盗的时候,可以不用观察是否有人闯入,放心偷盗,听到手机的主机报警后,第一时间找路线逃跑
在这里插入图片描述

场景3:护法
当你要在一个户外树林做私密的事情又害怕周围有人过来,你可以以你为中心,放置一个圆形区域的布防点,当你正在做私密事情的时候只需要注意听是否报警,听到报警立马停止做私密的事情,防止被人发现
在这里插入图片描述

一、项目功能

1、可以显示当前时间、星期、日期
2、可以修改当前时间、星期、日期
3、一台主机接收报警信号,多台从机发送报警信号,发送器可以无线发送200米距离到主机,主机显示是那台从机触发送的报警信号
4、一键开启关闭布防
5、查看报警记录,并记录报警时间在这里插入图片描述

二、材料选择

(一)主控选择:STC89C52RC
STC89C52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。

在这里插入图片描述

(二)显示屏选择:LCD1602
LCD1602液晶显示器是广泛使用的一种字符型液晶显示模块。它是由字符型液晶显示屏(LCD)、控制驱动主电路HD44780及其扩展驱动电路HD44100,以及少量电阻、电容元件和结构件等装配在PCB板上而组成。不同厂家生产的LCD1602芯片可能有所不同,但使用方法都是一样的。为了降低成本,绝大多数制造商都直接将裸片做到板子上。

在这里插入图片描述

(三)时钟芯片选择:DS1302
DS1302是由美国DALLAS公司推出的具有涓细电流充电能力的低功耗实时时钟芯片。它可以对年、月、日、周、时、分、秒进行计时,并且具有闰年补偿等多种功能。

在这里插入图片描述

(四)无线发送接收器
在这里插入图片描述
在这里插入图片描述

(五)外围器件:按键、蜂鸣器、开关、纽扣电池、电位器、三极管等

三、接收设备原理图设计

在这里插入图片描述

(一)最小系统
供电、晶振、复位电路
在这里插入图片描述
(二)显示屏电路
数据线接到P0,注意要接1K上拉电阻
在这里插入图片描述
(三)时钟芯片电路
3个引脚接到单片机IO口控制
在这里插入图片描述
(四)按键电路
在这里插入图片描述
(五)无线传感器
在这里插入图片描述

(六)电源电路与电源指示
在这里插入图片描述

四、发送设备原理图设计

在这里插入图片描述
采用人体热释电红外传感器,捕捉人体红外判断是否有人在传感器附近
在这里插入图片描述

发送设备,人体热释电传递信号给发送模块,无线发送到主机
在这里插入图片描述

四、PCB设计

接收设备
5YyW5L2c5bCY,size_20,color_FFFFFF,t_70,g_se,x_16)
发送设备
在这里插入图片描述

五、程序设计

/**************************************************************************************
*项目名称:无线防盗系统主机
作者:化作尘
版本:V1.3
邮箱:2809786963@qq.com
更新时间:V1.1 2020年4月11日14:30:06
		  V1.2 2020年4月18日20:51:31
		  V1.3 2023年11月19日08点33分
***************************************************************************************/
#include "reg52.h"			 //此文件中定义了单片机的一些特殊功能寄存器
#include "ds1302.h"
#include "lcd.h"
#include "eeprom.h"
#include "temp.h"
#define TIME_SAVE_ID  0X56
typedef unsigned int u16;	  //对数据类型进行声明定义
typedef unsigned char u8;
sbit k1 = P1^0;	  		//按键
sbit k2 = P1^1;
sbit k3 = P1^2;
sbit k4 = P1^3;
sbit sen1 = P1^6;	  		//传感器
sbit sen2 = P1^7;
sbit sen3 = P3^2;
sbit sen4 = P3^3;

sbit lcdled = P2^4;			 //lcd背光
sbit beep = P1^4;			//蜂鸣器

u16 ti=0;       //修改第几个时间参数 、修改第几个闹钟参数
u8 status = 0;      //接收信号标志
u8 countalm=0;

uchar lastTIME[7] = {
   
   0};
enum ALMSWITCH				//定义枚举、报警布防开关
{
   
   
    OFF,ON
} almswitch;
enum Mode				//定义枚举、三种模式
{
   
   
    DISPLAYDATA,MODIFYDATA,TIMERECORD,NONE
} mode = DISPLAYDATA;

#define RECODE_NUM 12
uchar timerecord[RECODE_NUM][8] = {
   
   0};//记录十二组报警时间


void dis_sen_num(u8 num);
void display_alm_state(u8 en);
/*********延时函数***********/
void delay(unsigned int t)	 //短延时
{
   
   
    while(t--);
}

/*********延时函数***********/
void delay_ms(unsigned int t)	//毫秒延时
{
   
   
    unsigned int a,b;
    for(a=0; a<t; a++)
        for(b=0; b<120; b++);
}
/*********对比时间改变***********/
u8 cmp_last_time(void) //对比时间改变
{
   
   
    u8 i;
    for(i=0; i<7; i++)
        if(lastTIME[i] != TIME[i])return i;

    return 0xff;
}
/*********清除时间,刷新**********/
void clr_last_time(void)
{
   
   
    u8 i;
    for(i=0; i<7; i++)
        lastTIME[i] = 0;
}
//扫描传感器状态
void scan_sensor_state(void)
{
   
   
    static u16 count=0;
    u8 n;
    u8 r_sen1,r_sen2,r_sen3,r_sen4;
    static u8 lastsen1,lastsen2,lastsen3,lastsen4;
    if(almswitch==ON)			 //开启布防
    {
   
   
        r_sen1 = sen1;
        r_sen2 = sen2;
        r_sen3 = sen3;
        r_sen4 = sen4;
        if(r_sen1 != lastsen1 && r_sen1 == 1)
            status = 1;
        if(r_sen2 != lastsen2 && r_sen2 == 1)
            status = 2;
        if(r_sen3 != lastsen3 && r_sen3 == 1)
            status = 3;
        if(r_sen4 != lastsen4 && r_sen4 == 1)
            status = 4;
        
				
				lastsen1 = r_sen1;
				lastsen2 = r_sen2;
				lastsen3 = r_sen3;
				lastsen4 = r_sen4;
        if(status)
        {
   
   
					
            //显示报警
            LcdClean();
            LcdWriteCom(0x80);
            LcdWritestr("Alarm!");
						dis_sen_num(status);
            mode = NONE;
						
            Ds1302ReadTime(); //更新时间
					  //记录报警
            count=60000;			 //设置报警时间长度
            for(n=0; n<7; n++)
            {
   
   
                timerecord[countalm][n] = TIME[n];
            }
            timerecord[countalm][7] = status;		   //标志传感器
            countalm++;
            if(countalm == RECODE_NUM)countalm =0;
            status = 0;

        }
        if(count>0)					//报警程序
        {
   
   
            count--;
            if(count % 1000 == 999)
                beep=!beep;

            if(count==0) {
   
   
                beep = 0;
                mode = DISPLAYDATA;
								LcdClean();
								clr_last_time();	 //刷新显示
								display_alm_state(1);//显示 ON OFF
            }
        }
    }

}


void display_alm_state(u8 en)
{
   
   
    static u8 last_al = 0xff;
    if(en || last_al != almswitch)
    {
   
   
        LcdWriteCom(0xcd);
        if(almswitch==OFF)	  //显示布防状态
            LcdWritestr("OFF");
        if(almswitch
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

化作尘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值