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 |