Proteus仿真实例_24-51f-13基于51单片机的太阳能发电系统(仿真文件+程序)24-51f-13

一.系统概述

太阳能发电系统主要功能和特性:
1. 硬件平台及核心控制器:使用51单片机作为核心控制器。集成温度传感器和光照传感器,用于温度和光照强度的采集。集成LCD1602显示屏,用于实时显示采集到的温度、光照和电池电压数据。实时监测电池电压状态,并可调节电压值以适应不同的电源需求。
2. 数据显示与设定:在LCD1602显示屏上实时显示温度、光照和电池电压数据。可以通过按键设定电池电压的阈值,当电压低于设定阈值时触发相应的控制动作。
3. 电源切换控制及LED指示:当电池电压低于设定的阈值时,系统会控制继电器模拟电源切换,确保设备持续供电。同时控制LED灯常亮指示当前电源状态。
4. 远程监控与数据传输:数据可以通过串口发送到串口调试助手端,实现实时的数据监控和调试。可以模拟APP端的远程监控功能,使用户能够远程获取设备运行状态和数据。

二.仿真概述

1. 显示屏上会显示检测到的温度和光强数据,此时电压低于阈值,继电器闭合。

2. 检测到的光强、电压以及温度数据会通过虚拟串口上传到上位机端,上位机端用虚拟串口助手进行模拟,虚拟串口助手链接如下:

波特律动 串口助手icon-default.png?t=N7T8https://serial.keysking.com/

3. 在关闭仿真的条件下双击电压采集端的下箭头,就可以对采集端的电流进行调节,进而对采集端的电压进行调节,将原来的2.5A调节成5A,显示屏端可以看到电压值超过设定阈值,此时继电器就会断开,此时还可以通过按键进行电压阈值的调节。

三.程序设计

#include <REGX52.H>
#include <intrins.h>
#include <stdio.h>
#include "DS18B20.h"
#include "LCD1602.h"
#include "delay.h"
#include "key.h"
#include "Timer0.h"
#include "ADC0832.h"

sbit LEDRED = P1^7; //LED灯
sbit Relay = P2^0; //继电器

float T;
unsigned char KeyNum,flag = 1;
unsigned int Return,Temp1,Voltage1,Voltage1Max;
unsigned char UartBuf=0;

void InitUART(void);
void SendStr(unsigned char *p);
void SendOneByte(unsigned char c);

char putchar(char c)
{
	//输出重定向到串口
	SendOneByte(c);
	return c;  //返回给函数的调用者printf
}

void main()
{	
		InitUART();   //串口初始化
		Relay = 0;
		LCD_Init();   //显示初始化
		LCD_ShowString(1,1,"T:00");   //显示参数
		LCD_ShowString(1,9,"G:0000");
		LCD_ShowString(2,1,"V:0000");
		LCD_ShowString(2,9,"MAX:0000");
		Voltage1Max = 100;
		Timer0_Init();
		while(1)
		{
				ADC0832(0);   //ADC采集
				VCCjisuan();  //数据计算
				Count();
				Return = Return_V();
				DS18B20_ConverT();   //温度采集
				Delay(10);
				T = DS18B20_ReadT();			   //温度
				LCD_ShowNum(1,3,T,2);		   //显示
				ADC0832(1);
				VCCjisuan();
				Voltage1 = VCC*3.3/10;
				LCD_ShowNum(2,3,Voltage1,4);	
				KeyNum = Key();
				if(KeyNum == 1)   //按键
				{
						Voltage1Max = Voltage1Max + 10;
						if(Voltage1Max > 349)
						{
								Voltage1Max = 349;
						}
				}
				if(KeyNum == 2)
				{
						Voltage1Max = Voltage1Max - 10;
						if(Voltage1Max < 11)
						{
								Voltage1Max = 11;
						}
				}
				LCD_ShowNum(2,13,Voltage1Max,4);
				if(Voltage1 < Voltage1Max)
				{
						Relay = 1;
						LEDRED = 0;
				}
				else
				{
						Relay = 0;
						LEDRED = 1;
				}
				Temp1 = (unsigned int)T;
				printf("%u"  ,Temp1);
				printf("  %u",Return);
				printf("  %u",Voltage1);
				printf("\r\n");
		}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小常硬件

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值