本设计由STC89C52单片机电路++DS18B20温度传感器电路+继电器电路+ACS712电流检测电路+PCF8591采样电路+LED指示灯电路+电源电路组成。
1、通过太阳能电池板给锂电池充电。
2、如果温度高于设定值(40℃)或者锂电池电压超过4.2V,则继电器断开,否则,继电器不断开。
3、如果太阳能电池板给锂电池充电电流超过一定值,则红灯亮起。否则红灯不亮。
完整版 电路图和程序代码 下载地址
https://pan.baidu.com/s/1GO137DhTlGIuKtaCvGIo6Q?pwd=8888
部分代码展示
float vBat ,vCurrent;//电压电流
float sumVbat,nowVbat ;//求平均
unsigned char count=0;//计数
char dis0[16];//定义显示区域临时存储数组
void Init_Timer0(void);//定时器初始化
void UART_Init(void);
void uartSendByte(unsigned char dat);
void uartSendStr(unsigned char *s,unsigned char length);
void main (void)
{
Init_Timer0();
UART_Init();
DelayMs(20);
check = 1;
while (1) //主循环
{
if(ReadTempFlag==1) //读取温度标志
{
ReadTempFlag=0;
temp1=ReadTemperature(); //读取温度
temperature=(float)temp1*0.0625; //温度值转换
if((nowVbat > 4.2)||(temperature > 40)) //对比阈值
{
relay = 0;//断开继电器
}
if(vCurrent >= 0.2) //电流过高
{
led_red = 0;//打开对应指示灯
}
else
{
led_red= 1;
}
}
}
}
/*------------------------------------------------
定时器初始化子程序
------------------------------------------------*/
void Init_Timer0(void)
{
TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响
//TH0=0x00; //给定初值
//TL0=0x00;
EA=1; //总中断打开
ET0=1; //定时器中断打开
TR0=1; //定时器开关打开
}
/*------------------------------------------------
定时器中断子程序
------------------------------------------------*/
void Timer0_isr(void) interrupt 1
{
TH0=(65536-20000)/256; //重新赋值 20ms
TL0=(65536-20000)%256;
time20ms++;
if(time20ms%5==0) //更新显示
{
DisFlag=1;
if(time20ms%45==0) //读取温度
{
ReadTempFlag=1; //读标志位置1
}
}
}
完整版 电路图和程序代码 下载地址