|
LCD1602显示
DS1302系统时间
按键设定系统时间、工作时间、光照阈值(默认开始时间为16点,结束时间为5点)
工作时间内路灯点亮,凌晨12点后路灯关闭,有人或车通过是,路灯点亮10s
非工作时间光照强度低于阈值,路灯点亮
状态检测,路灯应亮未亮,声光报警
(通过检测LED串联电阻的电压值,当有电压值时,证明线路正常,无电压值时,线路故障)
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
Proteus仿真
单片机源程序如下:
- /*******************************************************************************
- * 函数名 : work()
- * 函数功能 : 工作状态
- * 输入 : 无
- * 输出 : 无
- *******************************************************************************/
- void work()
- {
- Read_time(); //转换时间
- if(work_time_End!=0 && work_time_Start!=0) //工作时间已设置
- {
- if(hour >= work_time_Start) //当前时间大于起始时间,如起始时间为19:00,当前时间为21:00。
- {
- Data = AD(1);
- led_1 = 1; //点亮LED
- if(Data < 50) //未检测到LED点亮
- Beep = 1; //声光报警
- else //检测到Led点亮
- Beep = 0; //停止报警
- }
- else if(hour < work_time_End) //当前时间小于结束时间,如结束时间为06:00,当前时间为04:00。
- {
- if(red_sr) //检测到人或车
- {
- time = 0;
- light_flag = 1; //LED标志置1,开始T0定时器计时,点亮LED,10s后LED标志清零,LED熄灭
- }
- if(light_flag) //LED标志置1,检测到人或车
- {
- led_1 = 1; //点亮LED
- EA = 1; //开启中断
- if(time > 10) //10s后
- {
- light_flag = 0; //LED标志清零
- EA = 0; //关中断
- time = 0; //计时清零
- }
- Data = AD(1);
- if(Data < 50) //未检测到LED点亮
- Beep = 1; //声光报警
- else //检测到Led点亮
- Beep = 0; //停止报警
- }
- else
- led_1 = 0;
- }
- else
- {
- if(light < light_limit)
- {
- led_1 = 1;
- Data = AD(1);
- if(Data < 50) //未检测到LED点亮
- Beep = 1; //声光报警
- else //检测到Led点亮
- Beep = 0; //停止报警
- }
- else
- led_1 = Beep = 0;
- }
- }
- }
复制代码
|
-
-
-
-
智能路灯.zip
140.16 KB, 下载次数: 227, 下载积分: 黑币 -5
评分
-
查看全部评分
|