本系统以51单片机作为控制模块的核心部件,采用热释红外人体传感器检测人体的存在,采用光敏三极管构成的电路检测环境光的强度;根据教室合理开灯的条件,通过对人体存在信号和环境光信号的识别与判断,完成对教室灯光的智能控制,避免了教室用电的大量浪费。系统还具有报警功能;同时还采用了软/硬件的“看门狗”等抗干扰措施。
整体电路主要由51单片机STC89C52、时钟芯片DS1302、液晶屏LCD1602、比较器芯片LM339、光敏电阻、红外对管、按键、LED等构成;原理图如图:
PCB及仿真图:
主程序源码
- 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/1dN9Pt-k9bpk-M4jwNUOOPQ?pwd=zkcw
提取码:zkcw