概述--项目准备:
中心模块 -- STC89C52RC
子模块:
震动传感器
433M接收(与遥控器配套)
继电器 (作为电子开关进行控制):喇叭和外界电源
(keil软件和C语言环境 以及 帅气的开发者)
振动传感器:
//振动实现点灯
#include"reg52.h"sbit led1=P3^7;
sbit vibrate=P3^3; //振动传感器 -- 要接的口void Delay20002ms() //@11.0592MHz
{
unsigned char i, j, k;i = 141;
j = 23;
k = 242;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void main()
{
while(1)
{
if(vibrate==0) //低电平有效 -- 发生振动
{
led1=0; //振动亮灯
Delay20002ms();
led1=1;
}
else
led1=1; //不振熄灭
}}
==============================================
继电器 -- 电子开关
NO -- 常开端
NC --常闭端
COM -- 公共端
默认COM 和 NC 连接
COM 和 NO 口接通的时候 -- 负载就连通到窜连电路,绿灯就会亮
#include"reg52.h"
sbit vibrate=P3^3; //振动传感器 -- 要接的口
sbit switcher=P1^1; //继电器开关void Delay20002ms() //@11.0592MHz
{
unsigned char i, j, k;i = 141;
j = 23;
k = 242;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void main()
{
while(1) //查询方式查看是否发生振动
{
if(vibrate==0) //低电平有效 -- 发生振动 --继电器导通
{
switcher=0;
Delay20002ms();
switcher=1; //让NO和COM不接通
}
else
switcher=1;
}}
========================================
433M06 遥控器控制
与之配套的 版 : 其中D0,D1D2,D3 与遥控器的 ABCD 按键相对应
//以下代码实现继电器 和 按键的关联,if前面连接了喇叭与继电器,这时候的按钮就能控制继电器的声响
#include"reg52.h"
sbit D0_ON=P1^2;
sbit D1_OFF=P1^3;
sbit switcher=P1^1; //继电器开关void main()
{
while(1) //查询 哪个按键被按下
{
if(D0_ON==1) //高电平有效 收到遥控信号A,D0表现为高电平
{
//A 被按下,导通继电器 -- 低电平有效
switcher=0;
}
if(D1_OFF==1){
//C 被按下,不导通继电器
switcher=1;
}
}}
=============================================
总体设计:
接线和模块:
中心模块 -- STC89C52RC
子模块:
震动传感器:p1.3 -- 低电平有效
433M接收(与遥控器配套):p1.1, p1.2 -- 高电平有效
继电器 (作为电子开关进行控制): p1.0 -- 低电平有效
// vcc 和 gnd 自行连接
整体思路:
// 1. if A 按键被按下 -- 设置为警报模式 -- 长响进入警报模式
//1.1 警报模式下,发生振动 -- 喇叭响 --低电平有效
//1.2 警报模式下,没有振动 -- 喇叭不响
//2.if B按键被按下,设为关闭模式 -- 短响解除警报模式
具体代码
==========================
实现代码如下:
··#include"reg52.h"
#include<intrins.h>#define ON 1
#define OFF 0sbit 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 Delay300ms() //@11.0592MHz
{
unsigned char i, j, k;_nop_();
i = 3;
j = 26;
k = 223;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void main()
{
int mark = OFF;
while(1) //查询
{
//1. if A 按键被按下 -- 设置为警报模式 -- 长响进入警报模式
if(D0_ON==1)
{
// 设为警报模式
mark =ON;
//响两秒
switcher=0;
Delay2000ms();
switcher=1;}
//2.if B按键被按下,设为关闭模式 -- 短响解除警报模式
if(D1_OFF==1)
{
// 关闭警报模式
mark =OFF;
//响两秒
switcher=0;
Delay300ms();
switcher=1;}
//1.1 警报模式下,发生振动 -- 喇叭响
//1.2 警报模式下,没有振动 -- 喇叭不响
if(mark==ON)
{
if(vibrate == 0) //发生振动响一会
{
switcher=0;
Delay300ms();
switcher=1;
}
else //不发生振动就都不响
switcher=1;
}
}}