1. 简易电动车防盗器小项目概述(171.16)
- 振动传感器模块
- 继电器模块
- 高功率喇叭
- 433M无线发射接收模块
- 杜邦线
2. 震动传感器介绍及实战(172.17)
-
接线:VCC gnd 接对应 DO–某一个IO口即可
-
下载程序时,若无反应,可先断开传感器的供电,即先拔除正极或负极
-
代码(04. 震动控制灯)
#include "reg52.h"
#include <intrins.h>
sbit led1 = P3^7;//根据原理图(电路图),设备变量led1指向P3组IO口的第7口
sbit vibrate = P3^3;//DO(数字亮信号输出)接到了P3.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 main()
{
//查询方式判断是否震动
while(1){
if(vibrate==0)//模块说明告诉我们,震动的话,DO输出低电平
{
led1=0;//亮灯
Delay2000ms();
led1=1;
}else
{
led1=1;//灭灯
}
}
}
3. 继电器介绍及实战(173.18)
- 杜邦线:两头都不带针脚,都是母线
- 代码(05. 震动控制继电器开关)
#include "reg52.h"
#include <intrins.h>
sbit vibrate = P3^3;//DO(数字亮信号输出)接到了P3.3口
sbit switcher = P1^1;
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 main()
{
//查询方式判断是否震动
while(1){
if(vibrate==0)//模块说明告诉我们,震动的话,DO输出低电平
{
switcher=0;//亮灯
Delay2000ms();
switcher=1;//高电平,继电器N0和COM不通
}else
{
switcher=1;
}
}
}
4. 震动控制喇叭(174.19)
5. 433M无线射频信号控制喇叭(175.20)
- 相关文章
- 接收到信号,模块对应的针脚D0、D1等输出高电平(D0_ON == 1)给P1.1
- 代码(06. 433M遥控控制继电器开关)
#include "reg52.h"
sbit switcher = P1^1;
sbit D0_ON = P1^2;
sbit D1_OFF = P1^3;
void main()
{
//查询方式判断哪个按键被按下
while(1){
if(D0_ON == 1)//收到遥控信号A,D0表现为高电平
{
//A被按下,我们导通继电器,给继电器IN一个低电平
switcher=0;
}
if(D1_OFF == 1)//收到遥控信号C,D1表现为高电平
{
//B被按下,我们不导通继电器,给继电器IN一个高电平
switcher=1;
}
}
}
6. 电动车简易防盗器设计(176.21)
-
电路设计图
-
代码思路(07. 电动车简易报警器)
#include "reg52.h"
sbit switcher = P1^0;
sbit D0_ON = P1^1;
sbit D1_OFF = P1^2;
sbit vibrate = P1^3;
void main()
{
while(1){
1. 如果A按键被按下,设定为开启警报模式
长响,表示进入警报模式
设定警报模式标记
2. 如果B按键被按下,设定为关闭警报模式
短响,表示进入警报解除模式
设定警报解除模式标记
3. 如果标记是在警报模式下
3.1 如果发生了震动
喇叭响
3.2 如果不发生震动
喇叭不响
}
}
7. 电动车简易防盗器编程实现(177.22)
- 下载程序不成功时,拔除所有(正极或负极)电源,再进行下载
- 若出现一直响不能中断,用中断的方式在中断函数中处理(A按键和B按键做外部引脚中断)
- 代码(07. 电动车简易报警器)
#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 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;
}
//3.2 如果不发生震动、
else
{
//喇叭不响,给继电器高电平,不导通
switcher = 1;
}
}
}
}