433M遥控控制继电器开关
对于软件开发来说,不需要了解太多的硬件知识,因此对于433M模块我们只需要了解按下遥控后芯片输出的高低电平,根据高低电平写代码控制其他硬件。433M在接收到信号后会表现为高电平,用433M控制继电器开关代码如下:
#include "reg52.h"
#include <intrins.h>
sbit D0_ON = P1^2;
sbit D1_OFF = P1^3;
sbit switcher = P1^1;
sbit sounder = P2^5;
void main()
{
//不断查询哪个按键被按下
while(1){
if(D0_ON == 1){ //D0口被按下时表现为高电平
//收到遥控信号时,导通继电器,给继电器IN一个低电平
switcher = 0;
sounder = 0; //蜂鸣器报警
//Delay2000ms();
//switcher = 1; //高电平,继电器NO和COM不通
//sounder = 1; //蜂鸣器关闭
}
if(D1_OFF == 1){ //D1口被按下
//收到遥控信号时,截止继电器,给继电器IN一个高电平
switcher = 1;
sounder = 1;
}
}
}
综合之前的学习,已经可以开发出一个简易的电动车报警装置。大概原理就是不断的检测哪个按键被按下,我们定义A按键为警报模式,此时如果有震动发生,就会触发蜂鸣器报警。定义B为解除警报模式,此时有震动发生野不会报警。代码如下:
#include "reg52.h"
#include <intrins.h>
#define J_ON 1
#define J_OFF 0
sbit switcher = P1^0;
sbit D0_ON = P1^1;
sbit D1_OFF = P1^2;
sbit vibrate = P1^3;
sbit sounder = P2^5;
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 warnMark=0; //警报模式标记
//不断查询哪个按键被按下
while(1){
//1.如果a按键被按下,设定为开启警报模式
if(D0_ON == 1){
//长响,表示进入警报模式 设定警报模式标记
switcher = 0;
sounder = 0;
Delay2000ms(); //长响
warnMark = J_ON;
sounder = 1;
switcher = 1;
}
//2.如果b按键被按下,设定为关闭警报模式
if(D1_OFF == 1){
//短响,表示进入解除警报模式 设定警报解除模式标记
switcher = 0;
sounder = 0;
Delay500ms();
warnMark = J_OFF;
sounder = 1;
switcher = 1;
}
//3.如果标记是在警报模式下
if(warnMark == J_ON){
//3.1在警报模式下发生震动 喇叭响
if(vibrate == 0){ //发生震动
sounder = 0;
switcher = 0;
Delay2000ms();
Delay2000ms();
}else{
//3.2如果不发生震动 喇叭不响
sounder = 1;
switcher = 1;
}
}
}
}
在检测到是警报模式下,如果不加延迟4s会导致报警并不是特别丝滑,但是加上了延迟4s后又会导致在蜂鸣器报警的4s中如果按下B按键,会没有反应,原因是代码还处于循环之中,不会对新的电平进行响应,如果需要优化该块代码,则需要借助后续的中断知识进行解决。
至此电动车报警器项目开发完毕。