打印
[经验分享]

【转】感应灯

[复制链接]
661|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
会飞の鱼|  楼主 | 2015-10-18 17:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
厕所灯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时钟!!选外部时间就得长
沙发
毁灭2012| | 2015-10-18 17:47 | 只看该作者
其实感应模块探测距离和延时都是可以调的吧。。

使用特权

评论回复
板凳
bbapple| | 2015-10-22 21:29 | 只看该作者
看看,这个感觉还不错。。

使用特权

评论回复
地板
xia00| | 2015-10-22 21:59 | 只看该作者
这个估计是楼主上厕所的时候想到的吧

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

29

主题

185

帖子

2

粉丝