厕所灯24小时开着有点费电,就买了感应模块,如果只用感应模块输出高电平控制继电器,那么你就想错了,那样实用性低,因为感应模块检测晚延时然后灭,然后过个几秒才能在检测,如果用单片机延时然后抵消掉感应模块重新检测那几秒,那样有点大材小用,所以加一些功能,比如指灯,坑爹的网上全是感应模块三极管扩流驱动继电器无奈就得自己写,正好学会if语句就拿出来装装B,简易的啊
STC12C2052AD*1
8550*1
8050*1
LED*1
继电器*1
5v电源*1
由于制作过程和安装过程没拍,所以只有程序和视频,实测是可行的,程序是自己写的每句都已注释!
程序公开
#include<reg52.h> //头文件
#define uint unsigned int //宏定义
sbit led=P1^0; //P1.0口为LED指示灯
sbit jdq=P1^7; //P1.7口为继电器
sbit ren=P1^3; //P1.3口为感应模块
void yanshi(uint); //延时函数
void main() //主函数
{
unsigned char i; //定义变量i
while(1) //循环
{
jdq=1; //继电器关
led=0; //指示灯开
yanshi(200); //延时
for(i=160;i>0;i--) //继电器开启时间,最多为225
{
if(i<30&&jdq==0) //判断i小于30继电器开,如果不写jdq==0就会i计到30就会关
{
led= ~led; //指示灯闪烁
yanshi(800);
led= ~led;
yanshi(800);
}
yanshi(200); //延时
if(ren==0) //判断P1.3口是否为低电平
{
i=160; //i重新赋值
led=1; //指示灯关
jdq=0; //继电器开
}
}
}
}
void yanshi(uint xms) //延时程序
{
uint i,j; //定义ij
for(i=xms;i>0;i--) //一个嵌套式for
for(j=110;j>0;j--);
}
还有,下载时要选择内部IRC时钟!!选外部时间就得长 |