硬件模块:
这里软件生成的延时函数nop不识别要添加头文件 #include <intrins.h>
01-震动传感器 亮灯
震动传感器讲解:DO口 不震动—输出高电平1 震动—输出低电平0
代码思路:将震动模块上的DO口接到单片机的P3^3引脚 编写代码检测P3^3震动输出低电平后亮灯
代码:
#include "reg52.h"
#include <intrins.h>
sbit led1 = P3^7;//根据原理图(电路图),设备变量led1指向P3组IO口的第7口
sbit zhendong = P3^3;//根据将震动传感器DO口接到P3组IO口的第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(zhendong == 0)//检测是否震动输出低电平
{
led1 = 0;//震动亮灯
Delay2000ms();
}
else
{
led1 = 1;
}
}
}
02-震动传感器开启-继电器
原理图:
将继电器上的in口连接到单片机的P1^1口,编写代码让单片机输出低电平0导通继电器
#include "reg52.h"
#include <intrins.h>
sbit zhendong = P3^3;//根据将震动传感器DO口接到P3组IO口的第3口
sbit jidianqi = 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(zhendong == 0)//检测是否震动输出低电平
{
jidianqi = 0;//打开继电器
Delay2000ms();
jidianqi = 1;
}
else
{
jidianqi = 1;
}
}
}
03-433M控制继电器开关
#include "reg52.h"
#include <intrins.h>
sbit D0_ON = P2^0;
sbit D1_OFF = P2^1;
sbit jidianqi = P1^1;//根据将震动传感器DO口接到P3组IO口的第3口
void main()
{
//查询哪个按键被按下
while(1)
{
if(D0_ON == 1)//收到遥控A的信号,DO表现为高电平
{
jidianqi = 0;//导通继电器,给低电平0
}
if(D1_OFF == 1)//收到遥控c的信号,DO表现高电平
{
jidianqi = 1;//不导通继电器,给高电平1
}
}
}
04-项目一:简易电动车报警器
代码:
#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;
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;
}
}
}
}