本设计的硬件构成:
本设计由51单片机+晶振电路+复位电路+光敏感应电路+ADC0832转换电路+LCD1602显示屏电路+2路红外人体检测传感器(进和出)+灯光继电器电路+按键电路+电源电路组成。
功能介绍:
1、室内照明节能系统,本设计设有定时模式、检测是否有人模式、检测光线强度模式和手动模块等四种控制模式,各种模式之间可以通过按键互相切换,方便使用。
2、通过继电器来控制照明灯的开启或关闭;
3、有24小时制时间显示界面、人数统计界面和模式提示界面;
4、定时模式下,可以设置开启照明时间和关闭照明时间,根据设置时间来控制照明灯的开闭;
5、人数控制模式,通过光电传感器统计室内的人数,当室内人数为0时,关闭照明灯;人数大于0时,开启照明灯;
6、光线强度控制模式,当自然光线强度低于设定值时,开启照明,高于设定值时则关闭照明灯;
7、手动模式,可以手动控制照明灯的开启或者关闭;
8、共有5个按键,分别为设置键、加1键、减1键、模式切换键、开/关灯键;
程序源码:
void main() //主函数
{
Init1602(); //初始化液晶函数
init_eeprom(); //开始初始化保存的数据
UartInit(); //初始化串口
init(); //初始化定时器
people_in=1;
people_out=1;
Delay(30000); //延时100US
while(1) //进入循环
{
if(people_in==0)
{
Delay(200);
if(people_in==0 &&people_delet==0)
{
people++;
people_delet=1;
}
if(people>=1000)
people=999;
}
if(people_out==0)
{
Delay(200);
if(people_out==0&&people_delet==0)
{
if(people>0)
{
people--;
people_delet=1;
}
}
}
if(T_50ms >= 20) ///每0.5s钟刷新一次
{
T_50ms = 0;
people_delet=0;
for(m=0;m<50;m++) //读50次AD值
{
sum = adc0832(0)+sum; //读到的AD值,将读到的数据累加到sum
}
light=sum/50; //跳出上面的for循环后,将累加的总数除以50得到平均值temp
sum=0; //平均值计算完成后,将总数清零
temp=0;
if(set==0)
{
if(UI==0)
Display_Time();
else if(UI==1)
Display_People();
else if(UI==2)
Display_Light();
Display_Mode();
}
}
if(mode==AUTO && set==0)
{
if(UI==0)
{
if(open_time[0]==time[0] && (open_time[1]==time[1]) && (open_time[2]==time[2]))
{
LED=0;
}
else if(close_time[0]==time[0] && (close_time[1]==time[1]) && (close_time[2]==time[2]))
{
LED=1;
}
Display_Mode();
}
else if(UI==1)
{
if(people>0)
LED=0;
else
LED=1;
}
else if(UI==2)
{
if(light<set_light)
LED=0;
else
LED=1;
}
}
Key(); //调用按键函数
}
}