当前位置: 首页 > news >正文

【Proteus仿真】【51单片机】锂电池管理系统

文章目录

  • 一、功能简介
  • 二、软件设计
  • 三、实验现象
  • 联系作者


一、功能简介

本项目使用Proteus8仿真51单片机控制器,使用LCD1602显示模块、DS18B20温度传感器、PCF8691 ADC模块、按键、LED蜂鸣器模块等。

主要功能:
系统运行后,LCD1602显示温度、电压、电流值;电压0-3.3V,电流0-3.3A;可通过按键K3进入阈值设置模式,K3键用于切换选择温度阈值、电压、电流,K1和K2用于调节对应阈值,K4用于确定并返回主界面。当温度超限,温度报警指示,蜂鸣器报警;当电压超限,电压报警指示,蜂鸣器报警;当电流超限,电流报警指示,蜂鸣器报警;


二、软件设计

/*
作者:嗨小易(QQ:3443792007)*///系统数据获取
void sys_data_get(void)
{static u8 i=0;u8 temp=0;while(1){//温度获取i++;if(i%5==0)sys_ctrl.temp=DS18B20_GetTemperture();//电压获取temp=pcf8591_read_adcvalue(0);temp=pcf8591_read_adcvalue(0);sys_ctrl.vol=((float)temp*3.3/255)*10;//电流获取temp=pcf8591_read_adcvalue(1);temp=pcf8591_read_adcvalue(1);sys_ctrl.cur=((float)temp*3.3/255)*10;	break;}
}//系统数据显示
void sys_data_show(void)
{u8 buf[5];while(1){//正常模式显示if(sys_ctrl.mode==0){//温度显示lcd1602_show_nums(5,0,sys_ctrl.temp,2,0);//电压显示buf[0]=sys_ctrl.vol/10+0x30;buf[1]='.';buf[2]=sys_ctrl.vol%10+0x30;buf[3]='\0';lcd1602_show_string(2,1,buf);//电流显示buf[0]=sys_ctrl.cur/10+0x30;buf[1]='.';buf[2]=sys_ctrl.cur%10+0x30;buf[3]='\0';lcd1602_show_string(12,1,buf);	}//阈值设置显示else{//温度阈值显示lcd1602_show_nums(4,0,sys_ctrl.temph,2,0);//电压阈值显示buf[0]=sys_ctrl.voll/10+0x30;buf[1]='.';buf[2]=sys_ctrl.voll%10+0x30;buf[3]='\0';lcd1602_show_string(3,1,buf);//电流阈值显示buf[0]=sys_ctrl.curl/10+0x30;buf[1]='.';buf[2]=sys_ctrl.curl%10+0x30;buf[3]='\0';lcd1602_show_string(12,1,buf);//阈值设定,数据位置闪烁switch(sys_ctrl.mode){case 1://温度lcd1602_show_string(4,0,"  ");delay_ms(100);lcd1602_show_nums(4,0,sys_ctrl.temph,2,0);break;case 2://电压lcd1602_show_string(3,1,"   ");delay_ms(100);buf[0]=sys_ctrl.voll/10+0x30;buf[1]='.';buf[2]=sys_ctrl.voll%10+0x30;buf[3]='\0';lcd1602_show_string(3,1,buf);break;case 3://电流lcd1602_show_string(12,1,"   ");delay_ms(100);buf[0]=sys_ctrl.curl/10+0x30;buf[1]='.';buf[2]=sys_ctrl.curl%10+0x30;buf[3]='\0';lcd1602_show_string(12,1,buf);break;	}}break;			}
}//系统数据设置
void sys_data_set(void)
{u8 key=0;static u8 oneflag=0;key=KEY_Scan(0);//模式设置if(key==KEY3_PRESS){sys_ctrl.mode++;if(sys_ctrl.mode>=4)sys_ctrl.mode=1;if(oneflag==0){oneflag=1;_parm_set_show();//系统参数设置显示}}if(sys_ctrl.mode!=0){//在设置模式下,加if(key==KEY1_PRESS){	switch(sys_ctrl.mode){case 1://温度 sys_ctrl.temph++;if(sys_ctrl.temph>99)sys_ctrl.temph=0;break;case 2://电压 sys_ctrl.voll++;if(sys_ctrl.voll>50)sys_ctrl.voll=0;break;case 3://电流 sys_ctrl.curl++;if(sys_ctrl.curl>50)sys_ctrl.curl=0;break;}				}//在设置模式下,减else if(key==KEY2_PRESS){switch(sys_ctrl.mode){case 1://温度 sys_ctrl.temph--;if(sys_ctrl.temph<0)sys_ctrl.temph=99;break;case 2://电压 sys_ctrl.voll--;if(sys_ctrl.voll<0)sys_ctrl.voll=50;break;case 3://电流 sys_ctrl.curl--;if(sys_ctrl.curl<0)sys_ctrl.curl=50;break;}}//确定else if(key==KEY4_PRESS){sys_ctrl.mode=0;oneflag=0;sys_open_show();//系统开机界面显示		}	}
}//系统功能控制
void sys_fun_ctrl(void)
{//正常工作模式下if(sys_ctrl.mode==0){//温度高于上限,温度高指示,蜂鸣器报警if(sys_ctrl.temp>sys_ctrl.temph){LED_WDH=0;beep_alarm(10,1000);}else{LED_WDH=1;}//电压低于阈值,电压报警指示,蜂鸣器报警if(sys_ctrl.vol<sys_ctrl.voll){LED_DYL=0;beep_alarm(10,1000);	}else{LED_DYL=1;}//电流低于阈值,电流报警指示,蜂鸣器报警if(sys_ctrl.cur<sys_ctrl.curl){LED_DLL=0;beep_alarm(10,1000);}else{LED_DLL=1;	}				}	
}

三、实验现象

B站演示视频:https://space.bilibili.com/444388619

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

联系作者

视频地址:https://space.bilibili.com/444388619/video
专注于51单片机、STM32、国产32、DSP、Proteus、arduino、ESP32、物联网软件开发,PCB设计,视频分享,技术交流。

相关文章:

【Proteus仿真】【51单片机】锂电池管理系统

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真51单片机控制器&#xff0c;使用LCD1602显示模块、DS18B20温度传感器、PCF8691 ADC模块、按键、LED蜂鸣器模块等。 主要功能&#xff1a; 系统运行后&#xff0c;LCD1602显示温度…...

【工具使用-VScode】设置 VSCode 的自动保存功能

要设置 VSCode 的自动保存功能&#xff0c;请按照以下步骤进行操作&#xff1a; 打开 VSCode 编辑器。在顶部菜单中选择 “文件&#xff08;File&#xff09;”。选择 “首选项&#xff08;Preferences&#xff09;”。在下拉菜单中选择 “设置&#xff08;Settings&#xff0…...

常用Git命令记录

持续补充… git add&#xff1a;提交到暂存区git remote add <remote_name> <remote_url> : 添加一个新的远程仓库。指定一个远程仓库的名称和 URL&#xff0c;将其添加到当前仓库中。git commit&#xff1a;暂存区提交到本地仓库&#xff1b;-m&#xff1a;添加日…...

Go语言常用库

Go语言常用库 文本主要介绍Go常用的一些系统库&#xff1a; sort、math、copy、strconv、crypto 1、sort package mainimport ("fmt""sort" )// sort // int排序 // sort.Ints([]int{}) // 字符串排序 // sort.Strings([]string{}) // 自定义排序 // s…...

二叉树(进阶)

文章目录 1.内容安排说明2. 二叉搜索树2.1二叉搜索树的概念2.2二叉搜索树的实现2.3二叉树的性能&#xff1a; 搜索二叉树的应用k 模型kv模型 1.内容安排说明 二叉树在前面c数据结构阶段&#xff1b;已经讲过了&#xff1b;本节取名二叉树进阶的原因是&#xff1a; 1.map和set特…...

Flink之OperatorState

在Flink中状态主要分为三种: Operator State(算子状态)Keyed State(键控状态)Broadcast State(广播状态) 这里简单介绍一下Operator State的使用,说到使用State就必然要使用到Flink的容错机制也就是Checkpoint.具体内容见代码注解 数据源 这里选用Socket作为Source输入,便于…...

Python集成学习和随机森林算法

大家好&#xff0c;机器学习模型已经成为多个行业决策过程中的重要组成部分&#xff0c;然而在处理嘈杂或多样化的数据集时&#xff0c;它们往往会遇到困难&#xff0c;这就是集成学习&#xff08;Ensemble Learning&#xff09;发挥作用的地方。 本文将揭示集成学习的奥秘&am…...

代码随想录算法训练营第二十四天| 77 组合

目录 77 组合 暴力 减枝优化 77 组合 暴力 class Solution {List<List<Integer>>res new ArrayList<>();LinkedList<Integer>newList new LinkedList<>();public List<List<Integer>> combine(int n, int k) {dfs(n,k,1);r…...

el-dialog element-ui弹窗

bulkImport.vue 自定义组件 <template> <el-dialog :visible"modalVisible" title"批量导入" centered close"$emit(close)" :fullscreen"true"> <span>弹窗内容</span> <span slot"foot…...

计算机网络的发展

目录 一、计算机网络发展的四个阶段 1、第一阶段&#xff1a;面向终端的计算机网络&#xff08;20世纪50年代&#xff09; 2、第二阶段&#xff1a;计算机—计算机网络&#xff08;20世纪60年代&#xff09; 3、第三阶段&#xff1a;开放式标准化网络&#xff08;20世纪70年…...

官宣!Wayland正式支持基于IntelliJ的IDE

对于基于IntelliJ IDE的Linux用户来说&#xff0c;一项令人期待的进步即将到来 – 对 Wayland 显示服务器协议的支持。 这项更新将带来许多好处&#xff0c;包括解决古老的分数缩放问题以及在与适用于 Linux 的 Windows 子系统 (WSLg)&#xff08;在底层运行 Wayland 服务器&am…...

大模型在数据分析场景下的能力评测|进阶篇

做数据分析&#xff0c;什么大模型比较合适&#xff1f; 如何调优大模型&#xff0c;来更好地做数据计算和洞察分析&#xff1f; 如何降低整体成本&#xff0c;同时保障分析体验&#xff1f;10月25日&#xff0c;我们发布了数据分析场景下的大模型能力评测框架&#xff08;点击…...

服务注册发现 springcloud netflix eureka

文章目录 前言角色&#xff08;三个&#xff09; 工程说明基础运行环境工程目录说明启动顺序&#xff08;建议&#xff09;&#xff1a;运行效果注册与发现中心服务消费者&#xff1a; 代码说明服务注册中心&#xff08;Register Service&#xff09;服务提供者&#xff08;Pro…...

Spring cloud负载均衡@LoadBalanced LoadBalancerClient

LoadBalance vs Ribbon 由于Spring cloud2020之后移除了Ribbon&#xff0c;直接使用Spring Cloud LoadBalancer作为客户端负载均衡组件&#xff0c;我们讨论Spring负载均衡以Spring Cloud2020之后版本为主&#xff0c;学习Spring Cloud LoadBalance&#xff0c;暂不讨论Ribbon…...

6.运行mysql容器-理解容器数据卷

运行mysql容器-理解容器数据卷 1.什么是容器数据卷2.如何使用容器数据卷2.1 数据卷挂载命令2.2 容器数据卷的继承2.3 数据卷的读写权限2.4 容器数据卷的小实验&#xff08;加深理解&#xff09;2.4.1 启动挂载数据卷的centos容器2.4.2 启动后&#xff0c;在宿主机的data目录下会…...

golang学习笔记——查找质数

查找质数 编写一个程序来查找小于 20 的所有质数。 质数是大于 1 的任意数字&#xff0c;只能被它自己和 1 整除。 “整除”表示经过除法运算后没有余数。 与大多数编程语言一样&#xff0c;Go 还提供了一种方法来检查除法运算是否产生余数。 我们可以使用模数 %&#xff08;百…...

C++ 基础二

文章目录 四、流程控制语句4.1 选择结构4.1.1 if语句 4.1.2 三目运算符4.1.3 switch语句注意事项 4.1.4 if和switch的区别【CHAT】4.2 循环结构4.2.1 while循环语句4.2.2 do...while循环语句 4.2.3 for循环语句九九乘法表 4.3 跳转语句4.3.1 break语句4.3.2 continue语句4.3.3 …...

鼎盛合 | 宠物智能投食机方案设计开发

养宠物是一件治愈并解压的事情&#xff0c;与动物的相处中能够释放压力&#xff0c;并在与宠物的互动中小可爱们往往能带给你一种治愈的力量&#xff0c;所以养宠物成为了人们尤为热衷的事情。我们生活中随处可见主人与宠物相处的温馨画面&#xff0c;但养宠物也有些问题在困扰…...

ERR_PNPM_INVALID_WORKSPACE_CONFIGURATION packages field missing or empty

vue执行 pnpm install命令时&#xff0c;报 ERR_PNPM_INVALID_WORKSPACE_CONFIGURATION  packages field missing or empty错&#xff0c;在网上查询了很久&#xff0c;也没有传出来结果&#xff0c;最后发现是pnpm的版本不对引起的。 我先执行的是npm install -g pnpm&…...

ubuntu 23.04从源码编译安装rocm运行tensorflow-rocm

因为ubuntu22.04的RDP不支持声音转发&#xff0c;所以下载了ubuntu23.04.但官方的rocm二进制包最高只支持ubuntu22.04&#xff0c;不支持ubuntu 23.04&#xff0c;只能自己从源码编译虽然有网友告诉我可以用docker运行rocm。但是我已经研究了好几天&#xff0c;沉没成本太多&am…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生&#xff0c;我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要&#xff0c;而您认真负责的教学态度&#xff0c;让课程的每一部分都充满了实用价值。 尤其让我…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;使用DevEco Studio作为开发工具&#xff0c;采用Java语言实现&#xff0c;包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

LRU 缓存机制详解与实现(Java版) + 力扣解决

&#x1f4cc; LRU 缓存机制详解与实现&#xff08;Java版&#xff09; 一、&#x1f4d6; 问题背景 在日常开发中&#xff0c;我们经常会使用 缓存&#xff08;Cache&#xff09; 来提升性能。但由于内存有限&#xff0c;缓存不可能无限增长&#xff0c;于是需要策略决定&am…...

Caliper 负载(Workload)详细解析

Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...