简易电瓶车防盗器
震动传感器的介绍及实战
震动器的介绍
震动器的三个引脚vcc GND DO,
VCC:接到单片机的电源5v或者其他3V的位置都行
GND: 接到相邻的GND的接口
DO: 随便找个接口,根据这个接口获得的信号判断是高电平或者低电平
代码:通过led灯1的是否亮或者熄灭来判断是否震动
#include "reg51.h"
#include "intrins.h"
#define NO_STATUS 0
#define OFF_STATUS 1//显得比较专业
sbit ledone=P3^7;//控制led灯1的接口
sbit vibrate=P3^3;//震动器的do接口接到了P3^3的位置
void Delay2000ms()//延时2秒
{
unsigned char i, j, k;
_nop_();
i = 15;
j = 2;
k = 235;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void main()
{
//建立循环来查看ledone灯的情况
while(1)
{
if(vibrate==NO_STATUS)//周围震动,触发低电平
{
ledone=NO_STATUS;//灯亮
Delay2000ms();//延时两秒
ledone=OFF_STATUS;//灯灭
}else{
ledone=OFF_STATUS;//灯一直灭
}
}
}
震动控制继电器开关
继电器的介绍和工作原理
个人理解:
继电器上面有三个引脚,也是分别接到单片机上面,其中继电器上的IN接到单片机上面,根据单片机给到的高低电平来判断继电器是否打开,默认继电器的开关是关闭的,根据单片机给IN返回是高低电平来判断是否打开
代码:
原文件:
#include "reg51.h"
#include "intrins.h"
#define NO_STATUS 0
#define OFF_STATUS 1
//通过震动来判断是否打开继电器的开关
sbit vibrate=P3^3;//震动器的DO接口接到P3^3的位置
sbit relay =P1^1;//继电器的IN接到单片机P1^1的位置
void Delay2000ms()//延时2秒
{
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==NO_STATUS)//判断震动器的DO口位置是否是低电平
{
relay=NO_STATUS;//低电平,给继电器IO口的位置低电平
Delay2000ms();//延时两秒
relay=OFF_STATUS;//关闭继电器的开关
}else{
relay=OFF_STATUS;//继电器开关默认关闭
}
}
}
433M按键控制警报器
代码:
#include "reg51.h"
#include "intrins.h"
#define NO_STATUS 0
#define OFF_STATUS 1//显得专业
sbit relay=P1^1;//继电器的开关
sbit D0=P1^2;//A键
sbit D1=P1^3;//B键
void main()
{
//通过循环来判断你按下的是A键还是B键
while(1)
{
if(D0==OFF_STATUS)//A键被按下对应的接口是高电平
{
relay=NO_STATUS;//继电器打开
}
if(D1==OFF_STATUS)//B键被按下对应的接口是高电平
{
relay=OFF_STATUS;//继电器关闭
}
}
}
简单报警器的完整项目
代码:通过按下A和B键来判断是否进入警报状态,A进入,B退出
#include "reg51.h"
#include "intrins.h"
#define ON_STATUS 0
#define OFF_STATUS 1
//震动传感器的DO接到单片机的P1^3
sbit vibrate=P1^3;
//继电器的IN接到单片机的P1^0
sbit raley=P1^0;
//433M控制器上面的A和B键对应D0和D1,接到单片机上为P1^1,P1^2
sbit D0=P1^1;
sbit D1=P1^2;
void Delay2000ms()//延时两秒的函数
{
unsigned char i, j, k;
_nop_();
i = 15;
j = 2;
k = 235;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void Delay500ms() //500毫秒延迟
{
unsigned char i, j, k;
_nop_();
i = 4;
j = 129;
k = 119;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void main()
{
int mark;//记录是否为警报状态
while(1)
{
if(D0==OFF_STATUS)//D0为高电平说明被按下,进入警报模式
{
//警报模式,开启警报器2秒
raley=ON_STATUS;//打开继电器的开关
Delay2000ms();
raley=OFF_STATUS;//关闭继电器的开关
mark=ON_STATUS;//警报器开启
}
if(D1==OFF_STATUS)
{
//解除警报,警报器响一下
raley=ON_STATUS;
Delay500ms();
raley=OFF_STATUS;
mark=OFF_STATUS;//警报器解除
}
if(mark==ON_STATUS)
{
//进入警报状态还要查看是否震动
if(vibrate==ON_STATUS)
{
raley=ON_STATUS;//警报器一直开启
}
}else{
raley=OFF_STATUS;//警报器关闭
}
}
}