功能:
0.本系统采用STC89C52作为单片机
1.液晶实时显示时间/环境光强/工作模式
2.每隔5s向蓝牙串口发送一次信息
3.支持路灯故障检测
4.工作时间18~24时,两个路灯同时点亮,24时以后,B路灯关闭,若检测到由物体通过,路灯B点亮10s后关闭
5.非工作时间,光照强度低于设定光照阈值,两个路灯点亮
6.可蓝牙控制两个路灯状态
7.按键更改时间/工作时间/光照阈值/工作模式/路灯亮度
8.采用DC002作为电源接口可直接输入5V给整个系统供电
原理图:


PCB :

主程序:
#define __MAIN_C
#include
#include "main.h"
bit dispFlag = 1;
bit setFlag = 0;
bit sendFlag = 0;
unsigned char setIndex = 0;
unsigned char lightValue;
unsigned char lightValueA;
unsigned char lightValueB;
unsigned char lightLimit = 70;
unsigned char timeLimit[4] = {
18, 0, 5, 0};
char dispMode = DISP_NORMAL;
bit autoFlag = 0;
bit lampBDelay = 0;
bit lampAError = 0;
bit lampBError = 0;
bit lampASwitch;
bit lampBSwitch;
unsigned char lampAPWM = 3;
unsigned char lampBPWM = 3;
int cnt = 0;
unsigned int time500us = 0;
unsigned char i = 0;
unsigned char R_buf[4];
void main()
{
//初始化
lampASwitch = LAMP_OFF;
lampBSwitch = LAMP_OFF;
LCD_Init();
DS1302_Init();
EEPROM52_Read();
if (isNew == 1)
{
DS1302_WriteTime();
}
DS1302_ReadTime();
EEPROM52_Init();
Timer0_Init();
UART0_Init();
DelayMs(20);
//开机显示
LCD_DispStr(0, 0, " Welcome! ");
DelayS(2);
LCD_Clear();
DS1302_ReadTime();
DispNormal(setIndex);
while(1)
{
// LCD1602液晶显示
if (dispFlag == 1 && setFlag == 0)
{
dispFlag = 0;
LampCtr();
CheckLamp();
DS1302_ReadTime();
if (dispMode == DISP_NORMAL)
{
DispNormal(setIndex);
}
else if (dispMode == SET_TIME_LIMIT)
{
DispSetLimit(setIndex);
}
else if (dispMode == SET_LIGHT)
{
DispSetLight(setIndex);
}
else if (dispMode == CHECK_LIGHT)
{
DispCheckLight(setIndex);
}
}
//发送一次串口信息
if (sendFlag == 1)
{
sendFlag = 0;
if (lampAError == 1)
{
sprintf