硬件清单:
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;
}
}
}
}