硬件构成:单片机+最小系统+人体感应模块+光线检测模块+继电器驱动模块+LED指示灯模块+按键模块
本设计基于STC89C51/52(与AT89S51/52、AT89C51/52通用,可任选)单片机。默认是STC,如需指定单片机型号请备注!
1.采用人体感应(热释电)模块识别人体;
2.光敏电阻识别光线变化,LM393电压比较器判断光线强弱;
3.通过继电器控制可外接照明设备;
4.功能:当光线变暗并且有人时,继电器会吸合,从而驱动照明负载发光,智能延时,当没有人时灯不会亮,从而实现节能、智能的效果;
完整版 电路图和程序代码 下载地址
https://pan.baidu.com/s/1cx_OJUStiE1xW15ycO-dRQ?pwd=8888
部分代码展示
#include<reg51.h>
#include<intrins.h>
#include<absacc.h> //头文件
#include<display.h>
#define uc unsigned char
#define ui unsigned int//宏定义
sbit GM=P1^0; //光敏
sbit RT=P1^5; //人体红外
sbit KZ=P3^5; //继电器控制灯
uc sec=0;
void init()//初始化函数
{
GM=0;//光敏置低
RT=0;//人体红外置低
TMOD=0x01; //定时器工作方式
TH0=0x3c;
TL0=0xb0; //赋初值50ms
ET0=1; //打开中断允许开关
TR0=1; //打开定时器定时开关
EA=1; //打开中断总开关
}
void main()//主函数
{
Init1602();
init();//初始化函数
while(1);//空循环
}
void T0_time() interrupt 1 //定时器执行函数,热释电模块和光线感应和控制继电器都是在定时器里完成
{
uc m; //定义变量m
TH0=0x3c;
TL0=0xb0; //重新赋初值50ms
m++; //m加一次是50ms
if(m>=20) //加到20次,就是一秒
{
m=0; //m清零
if(RT==0||GM==0) //当热释电和光敏有一个不符合条件(符合条件就是热释电检测到人,光敏检测到环境光线弱)
sec++; //sec变量加
if(RT==1||GM==1)
{
if(RT==1&&GM==1&&sec<=5)//当热释电和光敏都符合条件并且sec变量小于等于5
{
sec=0; //sec清零
KZ=0; //控制继电器打开
Display_1602_4( );
}
if(RT==1&&GM==0)
{
Display_1602_2( );
}
if(RT==0&&GM==1)
{
Display_1602_3( );
}
}
if((RT==0||GM==0)&&sec>5)//当热释电和光敏有一个不符合条件并且sec大于5时
{
sec=0; //sec清零
KZ=1; //控制继电器关闭
if(RT==0&&GM==0)
{
Display_1602_1( );
}
}
}
}