一.硬件方案
本系统以51单片机作为控制模块的核心部件,采用热释红外人体传感器检测人体的存在,采用光敏三极管构成的电路检测环境光的强度;根据教室合理开灯的条件,通过对人体存在信号和环境光信号的识别与判断,完成对教室灯光的智能控制,避免了教室用电的大量浪费。系统还具有报警功能;同时还采用了软/硬件的“看门狗”等抗干扰措施。。
主要由51单片机STC89C52、时钟芯片DS1302、液晶屏LCD1602、比较器芯片LM339、光敏电阻、红外对管、按键、LED等构成;
二.设计功能
(1)使用4个LED灯模拟教室的照明灯,在符合条件开启时,人数小于10人亮一个灯,10-20人亮二个灯,20-30人亮三个灯,大于30人则全亮四个灯。
(2)教室使用两个红外对管来检测是否有人进入并进行人数统计,人数可以统计到二位数99人,并实时将人数显示到液晶屏LCD上,液晶屏同时显示实时日期/时间/星期。
(3)利用光敏电阻检测教室的光线强弱;
(4)系统分自动/手动模式,可以通过按键切换模式,并有LED指示当前所在模式,在自动模式下,可以设定定时时间段,在定时时间段内,当教室有人(人数大于0)的情况下,如果光线暗弱则自动打开照明灯,照明灯点亮个数根据人数而定,不在定时时间段或者教室无人的情况下,关闭所有照明灯,另外在手动模式下,可以通过手动开关控制照明灯的亮灭,人数统计部分仍然生效。
三.设计原理图
(1)原理图主要采用AD软件进行设计,如图:
(2)Protues仿真图如下:
四.软件设计
主程序源码
void main()
{
AUTO_LED=0; //默认自动模式
temperature=readtemperature();
init(); //液晶初始化
T0_init(); //定时器初始化
delay1(8000);
while(1)
{
if(Adjust==0) //非调节模式下显示时间人数和温度
{
temperature=readtemperature(); //读取温度
temperature_dispaly(3,temperature); //显示温度
Time_Display(); //显示时间
Open(); //动作判断,根据光线和声响开关
Count_Value(); //计算人数
}
Keyscan(); //扫描键盘
}
}
void temperature_dispaly(char add,char dat) //温度显示函数:第一个:参数的地址,第二个:参数的内容
{
uchar shi,ge;
shi=dat/10; //把温度的十位提取出来
ge=dat%10; //把温度的个位提取出来
write_com(0x80+0x40+add); //要写的地址
write_date(0x30+shi); //十位的内容 1602字符库
write_date(0x30+ge); //个位的内容 1602字符库
}
/*****************************************定时器初始化和主函数***********************************************************/
void T0_init(void)
{
TMOD=0x11; //设置定时器0为工作方式1
TH0=(65536-50000)/256; //50MS定时
TL0=(65536-50000)%256;
EA=1; //开定时器T0的中断 总中断
ET0=1; //允许T0中断
// TR0=1; //开启定时器
}
void Timer0() interrupt 1 //定时器T0中断函数
{
TH0=(65536-50000)/256; //赋初值=50ms
TL0=(65536-50000)%256; //TH0=3C,TL0=B0
Count++; //每中断一次,Count加一,计数20次,表示1s的时间到
if(Count>=20) //1s到
{
Count=0;
Miao++;
if(Miao>=3) //3秒内无触发另一个,全部清零
{
Miao=0;
OUT1_flag=0; //清零
IN1_flag=0;
TR0=0; //关闭定时器
}
}
}
资料链接:https://pan.baidu.com/s/1ITyBrbhQcCsv2sB6PE2Cfg?pwd=tb55