1.硬件
- 51最小系统
- 继电器模块
- 震动传感器模块
- 433M无线收发模块
2.软件
#include "reg52.h"
#include<intrins.h> #define J_ON 1
#define J_OFF 0sbit switcher = P1^0;//继电器
sbit D0_ON = P1^1;//433M无线收发模块
sbit D1_OFF = P1^2;
sbit vibrate = 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){//1. 如果A按键被按下,设定为开启警报模式if(D0_ON == 1){//长响,表示进入警报模式switcher = 0;//继电器低电平导通Delay2000ms();switcher = 1;//设定警报模式标记mark = J_ON ;}//2. 如果B按键被按下,设定为关闭警报模式if(D1_OFF == 1){//短响,表示进入解除警报模式switcher = 0;Delay500ms();switcher = 1;//设定警报解除模式标记mark = J_OFF ;}//3. 如果标记是在警报模式下if(mark == J_ON){//3.1 如果发生了震动,震动时输出地电平if(vibrate == 0){//喇叭响,给继电器低电平,导通switcher = 0;//会有bug,用中断处理即可}//3.2 如果不发生震动else{//喇叭不响,给继电器高电平,不导通switcher = 1;}}}
}
3.实物效果
按下433无线收发模块的A按键,继电器长导通,进入警报模式,发生震动继电器导通报警。按下B按键,继电器短导通,解除警报模式,怎么震动都不报警。
- 硬件接线
51单片机 | 震动传感器 | 继电器 | 433M无线收发模块 |
---|---|---|---|
P1.0 | IN | ||
5V | VCC | ||
GND | GND | ||
P1.3 | DO | ||
5V | VCC | ||
GND | GND | ||
5V | 5V | ||
GND | GND | ||
P1.1 | D0 | ||
P1.2 | D1 |