该LED 智能照明控制系统由光敏模块电路、MCU电路、DS1302时钟电路、1602液晶显示电路和LED灯显示电路等构成。可以实现万年历时间的调整,可以实现车站开关灯的时间,同时依据当前环境的亮度改变,调整车站灯光的亮度。
完整版 电路图和程序代码 下载地址
https://pan.baidu.com/s/1retxs684hCu60-zcnix5yA?pwd=8888
部分代码展示
#include <reg52.h>
#include <intrins.h>
#include <1602.h>
#include <DS1302.h>
#include <Set_OnTime.h>
#include <KeyFunction.h>
uchar timecount=0,pwmcount=0; //定时器用
sbit light = P3^7; //光敏
bit Timeflag = 0,pwm_flag = 0; //进入开关时间段标志
void Light() //小灯程序
{
if(Timeflag == 0)
{
// if(light == 0)//光线亮
if(light == 1) //光线暗
{
LED1 = 0; //亮
LED2 = 0;
LED3 = 0;
LED4 = 0;
LED5 = 0;
on_flag = 1;
}
else
{
LED1 = 1; //灭
LED2 = 1;
LED3 = 1;
LED4 = 1;
LED5 = 1;
on_flag = 0;
}
}
}
/**********************************************************/
// 主函数的初始化
/**********************************************************/
void init_main()
{
TMOD=0x11; //定时器T0 T1 方式1
TH0=(65536-50000)/256; //50ms定时
TL0=(65536-50000)%256;
TH1=(65536-100)/256; //100us定时
TL1=(65536-100)%256;
EA=1; //开总中断
ET0=1;ET1=1; //启动定时T0和T1
TR0=1; TR1=1;
init_lcd(); //初始化LCD1602
init_ds1302(); //初始化DS1302
}
/*********************************************************/
// 时间比较
/*********************************************************/
//init [] ={0x00,0x00,0x00,0x00,0x00,0x00,0x00};
//当前时间缓存 bj_time[] ={0x00,0x30,0x18}; //ON
// bj_time1[] ={0x00,0x00,0x05}; //OFF
void Time_compare()
{
if(alarm_flag) //alarm_flag=1,开定时
{
if(init[2]==bj_time[2]) // 开灯小时
{
if(init[1]==bj_time[1]) // 开灯分钟
{
if(init[0]==bj_time[0]) //开灯秒
{
LED1 = 0; //亮
LED2 = 0;
LED3 = 0;
LED4 = 0;
LED5 = 0;
on_flag = 1; //开
Timeflag = 1; //置1后 Light() //小灯程序 不会起作用
}
}
}
if(init[2]==bj_time1[2]) // 关灯小时
{
if(init[1]==bj_time1[1]) // 关灯分钟
{
if(init[0]==bj_time1[0]) // 关灯秒
{
pwm_flag = 0;
LED1 = 1; //灭
LED2 = 1;
LED3 = 1;
LED4 = 1;
LED5 = 1;
on_flag = 0;
Timeflag = 0; //置0后 Light() //小灯程序起作用
}
}
}
}
if(init[2] == 0x22) //到22点
{
if(init[1] == 0x00)
{
if(init[0] == 0x00)
{
LED1 = 0; //亮
LED2 = 1;
LED3 = 0;
LED4 = 1;
LED5 = 0;
//on_flag = 1;
Timeflag = 1; //置1后 Light() //小灯程序 不会起作用
}
}
}
if(init[2] == 0x22) //12点00分01秒进入 亮的两个小灯亮度稍微降低节能模式
{
if(init[1] == 0x00)
{
if(init[0] == 0x01)
{
pwm_flag = 1; //这个标志调用在Time1中断服务函数
Timeflag = 1; //置1后 Light() //小灯程序 不会起作用
}
}
}
}