1. 器件:C51开发板、震动传感器、继电器模块、电池开关、警报器、433M无线射频信号遥控器
2.具体实现效果:
当按下遥控键A,进入警报模式;或者当触发震动传感器,进入警报模式。
当按下遥控键B,接触警报模式。
期间,警报时长为3秒,解除警报为0.5秒
3.具体实现代码:
#include "reg52.h"
#define J_ON 1
#define J_OFF 0
sbit D0_ON = P1^2;
sbit D1_OFF = P1^3;
sbit vibrate = P1^1;
sbit switcher = P1^0;
void Delay3000ms() //@11.0592MHz
{
unsigned char i, j, k;
//_nop_();
i = 22;
j = 3;
k = 227;
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)
{
//1.如果A按键被按下,开启警报模式
if(D0_ON == 1){
//长响,表示进入警报模式
switcher = 0;
Delay3000ms();
switcher = 1;
//设定警报模式标记
mark = J_ON;
}
//2.如果B按键被按下,关闭警报模式
if(D1_OFF == 0){
//短响,表示解除警报模式
switcher = 0;
Delay500ms();
switcher = 1;
//设定解除警报模式标记
mark = J_OFF;
}
//3.如果标记是在警报模式下
if(mark == J_ON){
//如果发生震动
if(vibrate == 0){
//喇叭响,继电器导通,给它一个低电平
switcher = 0;
}
//如果不发生震动
else{
//喇叭不响,继电器不导通,给它一个高电平
switcher = 1;
}
}
}
}
PS:初步效果,后期可优化。
4.器件图: