C51--简易报警器设计

硬件清单:

C52单片机
震动传感器模块
433M无线发射接受模块
继电器模块
高功率喇叭
杜邦线

振动传感器控制灯:

如何知道是否发生震动?震动后的信号表示又是什么?
振动传感器模块产生震动,输出低电平,绿色指示灯亮。
不震动,输出高电平,模块上的AO口。
AO口本次不用

振动传感器控制灯

#include "reg52.h"
#include <intrins.h>

sbit led1 = P3^7;
//根据原理图(电路图)设备变量led1指向P3组IO口的第7口
sbit vibrate = P3^3;
//振动传感器模块上的 Do接口接到了P3.3口


void Delay2000ms()		//@11.0592MHz
{
	unsigned char i, j, k;

	_nop_();
	i = 15;
	j = 2;
	k = 235;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}

void main()
{
	//查询方式判断是否发生震动
	while(1){
		if(vibrate == 0){	//产生震动,DO输出低电平
			led1 = 0;//灯亮
			Delay2000ms();//震动之后亮灯两秒
		}else{
				led1 = 1;//灯灭
			}
	}
}

继电器工作:

就相当于电子开关,继电器上的IN,接入到单片机
NO口:常开端
NC口:常闭端
COM:公共端
接入低电平时,NO口和COM接通
接入高电平时,NO口和COM不接通

#include "reg52.h"
#include <intrins.h>

sbit vibrate = P3^3;
//振动传感器模块上的 Do接口接到了P3.3口
sbit switcher = P1^1;
//继电器连接P1.1口 

void Delay2000ms()		//@11.0592MHz
{
	unsigned char i, j, k;

	_nop_();
	i = 15;
	j = 2;
	k = 235;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}



void main()
{
	//查询方式判断是否发生震动
	while(1){
		if(vibrate == 0){	//产生震动,DO输出低电平
			switcher = 0;//发生震动,导通继电器,给继电器一个低电平
			Delay2000ms();
		}else{
				switcher = 1;//接入高电平时,NO口和COM不接通
			}
	}
}

将报警器接入继电器

遥控接收发送433M

#include "reg52.h"


sbit D0_ON = P1^2;
sbit D1_OFF = P1^3;
//接收器模块上的 D0接口接到单片机的P1.2接口,D1接口接到了P1.3口
sbit switcher = P1^1;
//继电器连接P1.1口 


void main()
{
	//查询方式判断那个按键被按下
	while(1){
		if(D0_ON == 1){	//收到遥控器按键的信号A,DO表现为高电平
			switcher = 0;//A按键被按下,导通继电器,给继电器一个低电平
	
		}if(D1_OFF == 1){	//收到遥控器按键的信号B,D1表现为高电平
				switcher = 1;//B按键被按下,不导通继电器,给继电器一个高电平时
			}
	}
}

电动简易报警器电路

在这里插入图片描述

/*
1、A按键被按下,设定为开启警报模式
		长响,表示进入警报模式,
		设定警报模式标记
2、B按键被按下,设定为关闭警报模式
		短响,表示进入解除警报模式,
		设定解除警报模式标记
3、如果在报警模式下
		如果发生震动,喇叭响----低电平,导通
		如果没有发生震动,喇叭不响-----高电平,不导通
*/


#include "reg52.h" 
#include <intrins.h>

#define J_OFF 0
#define J_ON  1

sbit D0_ON = P1^1;
sbit D1_OFF = P1^2;
//接收器模块上的 D0(A)接口接到单片机的P1.1接口,D1(B)接口接到了P1.2口
sbit switcher = P1^0;
//继电器连接P1.0口 
sbit vibrate = P1^3;	//振动传感器接在P1.3口

void Delay2000ms()		//@11.0592MHz
{
	unsigned char i, j, k;

	_nop_();
	i = 15;
	j = 2;
	k = 235;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}

void Delay500ms()		//@11.0592MHz
{
	unsigned char i, j, k;

	_nop_();
	i = 4;
	j = 129;
	k = 119;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}



void main()
{
	int mark = J_OFF;//判断标志位
	
	//查询方式判断那个按键被按下
	while(1){
		if(D0_ON == 1){
			switcher = 0;
			Delay2000ms();
			switcher = 1;
			mark = J_ON;
		}
		if(D1_OFF == 1){
			switcher = 0;
			Delay500ms();
			switcher = 1;
			mark = J_OFF;
		}
		if(mark == J_ON){
			if(vibrate == 0){	//震动发生低电平
				switcher = 0;
			}else{
					switcher = 1;
				}
		}
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值