学习STC51单片机08(芯片为STC89C52RC)
硬件3:433M无线射频信号控制警报器
这边是接收模块
我将GND连接板子上面的GND 5v连接5v
然后D0连接P1.2口 D1连接P1.3口,这边是说D0 D1 代表着按键A和B
那么我们设置按A开启 按B关闭,其实也就是给继电器信号,按A的时候让继电器工作,按B的时候停止工作
代码如下
这边我们要看说明书 因为这个模块接收到我们按键是输出高电平的,所以是我们设置D0_ON ==1;
Tips:一般市面上常见的继电器模块,很多是低电平触发(低电平有效),但也有高电平触发以及高低电平触发
我们这边的是低电平触发的继电器,所以给继电器传一个0(代表低电平触发)继电器就工作了com - NO连接,电池与警报器串联,就会叫了
当我们按B按键的时候D1_OFF == 1那么 我们本意是想B按键按下是关闭警报器的 所以就设置传一个1的信号给继电器(1代表高电平),那么高电平的传进去,继电器内部的控制电路就发生改变,等于是切断了电源,那么电磁感应就没有了,那么铁片复位,铁片是由一个弹簧带动的,在有电磁感应的时候弹簧被拉长,没有电磁感应的时候弹簧恢复,那么铁片就会回到没有工作的位置了也就是com-NC
项目:电动车简易报警器
学习了以上的这些东西,都在为这个项目做铺垫,现在我们开始
电动车简易报警器信号电路设计
主要实现功能代码在这
整段代码是这样的
#include "reg52.h"
#include <intrins.h>
sbit switcher = P1^0;
sbit D0_ON = P1^1;
sbit D1_OFF = P1^2;
sbit vibrate = P1^3;
#define J_ON 1
#define J_OFF 0
void Delay1000ms() //@11.0592MHz
{
unsigned char data i, j, k;
_nop_();
i = 8;
j = 1;
k = 243;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void Delay200ms() //@11.0592MHz
{
unsigned char data i, j, k;
_nop_();
i = 2;
j = 103;
k = 147;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void main()
{
int mark = J_OFF;
while(1){
if(D0_ON == 1){
switcher = 0;
Delay1000ms();
switcher = 1;
mark = J_ON;
}
if(D1_OFF == 1){
switcher = 0;
Delay200ms();
switcher = 1;
mark = J_OFF;
}
if(mark == J_ON){
if(vibrate == 0){
switcher = 0;
Delay200ms();
}else{
switcher = 1;
}
}
}
}
什么原理呢? 我们这边借助一下记录状态位来控制A按键按下表示J_ON 打开警报,B按键按下表示J_OFF 关闭警报,代码逻辑比较简单的,主要是记录状态位这个要牢牢记住这个思想
后面我发现这样写的代码当我开启警报后 我去震动传感器,传来的警报是断断续续的,所以我们这边给个时间
这样写的话看不出什么问题,但是我们知道现实生活中,警报声会比较长,因此我们多加几个
这样我们会发现传感器感受震动的时候这个声音在持续的响,我们嫌弃太吵了想要按B键取消警报,但是没有用,因为此时单片机还在数数。。。哈哈哈,以为我们还没有学习中断,单片机在数数期间他不会管任何其他事情的。Ok啊这个程序有BUG以后学习了中断再回来修改程序!!!
展示效果