簡介:太陽能路燈控制系統(tǒng):51單片機練手項目,簡單可復(fù)制。 帶太陽能充電功能,oled顯示, 白天根據(jù)光強判斷開關(guān)燈晚上開燈,二級菜單可以設(shè)置時間日期。 太陽能充電:傳統(tǒng)鋰電池充電芯片TP4056,使用6V太陽能板,給3.7V18650電池充電。
經(jīng)過資料顯示 18650電池盡量不要讓其電壓低于2.7V,所以后級供電電路(5V升壓電路)MT3608啟動引腳EN腳 連接了LM393制成的電壓比較器。和電池電壓比較,電池電壓低于2.7v,MT3608啟動腳拉低關(guān)斷。
供電:使用升壓芯片MT3608給單片機供電,讓電池電壓穩(wěn)定在5.1V,來提供穩(wěn)定電壓。
#include "reg52.h"
#include "oled.h"
#include "bmp.h"
#include <stdio.h>
#include "ds1302.h"
#include "AT24C02.h"
sbit key_s1 = P3^2;//獨立按鍵Set
sbit key_s2 = P3^3;//獨立按鍵Ok
sbit Light_In = P2^0;//光傳感器輸入端子
sbit Light_Out = P1^6;//亮燈指示燈
sbit Spdt_Out = P1^7;//繼電器輸出
//串口初始化
u8 Light_flag=0,Show_mode=0;
extern u8 temp[7];
//extern u8 temp_f[7];
void UARTInit()
{
SM0 = 0; SM1 = 1;//串口工作方式1,8位UART波特率可變
TR1 = 1;//啟動定時器1
TMOD |= 0x20;//定時器1,工作模式2 8位自動重裝
TH1 = 0xfd;
TL1 = 0xfd;//設(shè)置比特率9600
}
void Set_Light(){
if(temp[2]>=6&&temp[2]<=23)
{if(Light_In)
{
delay_ms(5);
if(Light_In)
{Light_flag=1;
Light_Out=1;
Spdt_Out=1;
}
}
else
{
Light_flag=0;
Light_Out=0;
Spdt_Out=0;}
}
else {Light_flag=1; Light_Out=1;Spdt_Out=1;}
}
int main(void)
{
u8 set_flag=0,set_ok=0,set_menu=0;
OLED_Init(); //初始化OLED
OLED_Clear(); //OLED清屏
//UARTInit(); //串口初始化
Read_Time();
//DS1302Init(); //DS1302初始化
OLED_ShowString(0,4,"LightMode:",16);
if(Light_flag){OLED_ShowString(80,4,"Open",16);}
else{OLED_ShowString(80,4,"Close",16);}
Light_Out=0;
Spdt_Out=0;
//delay_ms(200);
while(1)
{
if(key_s1 == 0)//判斷Set是否被按下
{
delay_ms(2);//按鍵消抖