【Proteus仿真】【STM32单片机】智能饮水机

news2025/1/12 22:49:03

文章目录

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


一、功能简介

本项目使用Proteus8仿真STM32单片机控制器,使用OLED液晶、按键、语音播放模块、DS18B20温度传感器、加热器和水泵等。
主要功能:
系统运行后,OLED显示温度、温度阈值,系统工作模式开关等状态信息;系统默认处于自动模式,可按下K1键切换为手动模式;
手动模式下,可通过K2和K3键控制加热开关;通过K4键控制出水开关;自动模式下,可通过K2和K3键调节温度阈值;
当温度到达阈值,则关闭加热,否则打开加热。


二、软件设计

/*
作者:嗨小易(QQ:3443792007)

*/


//系统数据显示
void sys_data_show(void)
{
	u8 buf[5];
	while(1)
	{
		//温度显示
		buf[0]=sys_ctrl.temp/100+0x30;
		buf[1]=sys_ctrl.temp%100/10+0x30;
		buf[2]='.';
		buf[3]=sys_ctrl.temp%100%10+0x30;
		buf[4]='\0';
		OLED_ShowString(2*16+8,0,buf,16);
		
		//温度阈值显示
		buf[0]=sys_ctrl.temph/100+0x30;
		buf[1]=sys_ctrl.temph%100/10+0x30;
		buf[2]='.';
		buf[3]=sys_ctrl.temph%100%10+0x30;
		buf[4]='\0';
		OLED_ShowString(3*16+8,6,buf,16);
		
		//加热状态显示
		if(sys_ctrl.jrflag==1)
		{
			OLED_ShowCHinese(3*16,2,14);//开启
			OLED_ShowCHinese(4*16,2,15);
		}
		else 
		{
			OLED_ShowCHinese(3*16,2,16);//关闭
			OLED_ShowCHinese(4*16,2,17);
		}
		
		//出水状态显示
		if(sys_ctrl.csflag==1)
		{
			OLED_ShowCHinese(3*16,4,14);//开启
			OLED_ShowCHinese(4*16,4,15);
		}
		else 
		{
			OLED_ShowCHinese(3*16,4,16);//关闭
			OLED_ShowCHinese(4*16,4,17);
		}
		
		
		break;			
	}
}

//系统数据设置
void sys_data_set(void)
{
	u8 key=0;
	
	key=KEY_Scan(0);
	//自动/手动切换
	if(key==KEY1_PRESS)
	{
		sys_ctrl.auto_flag=!sys_ctrl.auto_flag;
		if(sys_ctrl.auto_flag==1)
		{
			OLED_ShowCHinese(6*16,6,19);//手动
			OLED_ShowCHinese(7*16,6,20);
		}
		else
		{
			OLED_ShowCHinese(6*16,6,18);//自动
			OLED_ShowCHinese(7*16,6,20);
		}
	}
	//自动模式
	if(sys_ctrl.auto_flag==0)
	{
		key=KEY_Scan(1);
		//加
		if(key==KEY2_PRESS)
		{
			sys_ctrl.temph++;
			if(sys_ctrl.temph>999)sys_ctrl.temph=0;
		}
		//减
		else if(key==KEY3_PRESS)
		{
			sys_ctrl.temph--;
			if(sys_ctrl.temph<0)sys_ctrl.temph=999;
		}
		//出水开关
		else if(key==KEY4_PRESS)
		{
			sys_ctrl.csflag=!sys_ctrl.csflag;
			CS_PIN=!CS_PIN;
			if(sys_ctrl.csflag==0)printf("\r\n出水关闭...\r\n");
			else printf("\r\n出水打开...\r\n");
		}
	}
	//手动模式
	else
	{
		//加热开
		if(key==KEY2_PRESS)
		{
			sys_ctrl.jrflag=1;
			JR_PIN=0;
			printf("\r\n加热打开...\r\n");
		}
		//加热关
		else if(key==KEY3_PRESS)
		{
			sys_ctrl.jrflag=0;
			JR_PIN=1;
			printf("\r\n加热关闭...\r\n");
		}
		//出水开关
		else if(key==KEY4_PRESS)
		{
			sys_ctrl.csflag=!sys_ctrl.csflag;
			CS_PIN=!CS_PIN;
			if(sys_ctrl.csflag==0)printf("\r\n出水关闭...\r\n");
			else printf("\r\n出水打开...\r\n");
		}
	}
}

//应用控制系统
void appdemo_show(void)
{
	u8 i=10;
	sys_parm_init();//系统参数初始化
	KEY_Init();
	DS18B20_Init();
	ctrl_pin_init();
	USART1_Init(9600);
	OLED_Init();//LCD1602初始化
	sys_init_show();//系统初始化界面显示
	//读取数据,等待稳定
	while(i--)
	{
		//温度获取
		sys_ctrl.temp=DS18B20_GetTemperture()*10;
		delay_ms(100);		
	}
	sys_open_show();//系统初始界面显示

	while(1)
	{
		sys_data_get();//系统数据获取
		sys_data_show();//系统数据显示
		sys_data_set();//系统数据设置
		sys_fun_ctrl();//系统功能控制		
	}
}




三、实验现象

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

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


联系作者

专注于51单片机、STM32、国产32、DSP、Proteus、ardunio、ESP32、物联网软件开发,PCB设计,视频分享,技术交流。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1065606.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux】 ls命令使用

ls&#xff08;英文全拼&#xff1a; list directory contents&#xff09;命令用于显示指定工作目录下之内容&#xff08;列出目前工作目录所含的文件及子目录)。 ls命令 -Linux手册页 著者 由Richard M.Stallman和David MacKenzie撰写。 语法 ls [-alrtAFR] [name...] ls命…

众佰诚:抖音开网店新手怎么做才能做起来

抖音作为国内最热门的短视频平台&#xff0c;其商业价值也日渐凸显。许多商家和个体经营者开始在抖音上开设网店&#xff0c;以此为新的销售渠道。那么&#xff0c;对于新手来说&#xff0c;如何才能在抖音上成功运营网店呢? 首先&#xff0c;明确经营定位。每个电商平台都有其…

云服务器可以做什么?分享阿里云服务器的十种玩法

阿里云服务器可以干什么&#xff1f;服务器的用途有很多&#xff0c;常见的有网站、小程序、视频服务器、手机APP等&#xff0c;例如微信基于腾讯云服务器&#xff0c;淘宝基于阿里云服务器&#xff0c;阿里云百科aliyunbaike.com来说下阿里云服务器十大用途&#xff1a; 目录…

理解C++四种强制类型转换

理解C强制类型转换 文章目录 理解C强制类型转换理解C强制转换运算符1 static_cast1.1. static_cast用于内置数据类型之间的转换1.2 用于指针之间的转换1.3 用于基类与派生类之间的转换 2. const_cast2.1示例12.2 示例2——this指针 3.reinterpret_cast3.1 示例1 4.dynamic_cast…

slamplay:用C++实现的SLAM工具集

0. 项目简介 slamplay 是一个功能强大的工具集合&#xff0c;可用于开始使用 C 来玩和试验 SLAM。这是一项正在进行的工作。它在单个 cmake 框架中安装并提供一些最重要的功能 后端框架&#xff08;g2o、gtsam、ceres、se-sync 等&#xff09;、 前端工具&#xff08;opencv、…

C++那些让我们偷懒的函数

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;那个传说中的man的主页 &#x1f3e0;个人专栏&#xff1a;题目解析 &#x1f30e;推荐文章&#xff1a;题目大解析&#xff08;3&#xff09; 前言 让我们康康c为我们提供的懒人函数吧&#xff0c;后续会…

tcpdump(一)基础理论知识

一 抓包分析技术初探 说明&#xff1a; 本篇章跟tcp/ip的知识没有关系,只是讲解tcpdump工具背景补充&#xff1a; 抓包是做报文分析的第一步敬畏心&#xff1a; 隔行如隔山,不要想当然 ① 背景 ② 抓包技术名词 1、捋顺这些技术的来龙去脉甚至八卦;2、这样我们在后续课程…

Stable Signature - 为开源生成式AI 创建的图像 添加水印的新方法

文章目录 关于 Stable Signature 关于 Stable Signature 一种为开源生成式AI创建的图像添加水印的新方法 Stable Signature: A new method for watermarking images created by open source generative AI https://ai.meta.com/blog/stable-signature-watermarking-generativ…

Redis三种模式(主从复制,哨兵,集群)

Redis三种模式&#xff08;主从复制&#xff0c;哨兵&#xff0c;集群&#xff09; 一、主从复制1.1、主从复制概述1.2、 Redis主从复制流程1.3、 Redis主从复制作用1.4 、部署Redis 主从复制 二、Redis 哨兵模式2.1、哨兵模式的原理2.2、哨兵模式的作用2.3、哨兵的结构组成2.4…

【Spring知识点介绍 | 第二篇】什么是AOP

前言&#xff1a; 在本文中&#xff0c;我们将介绍AOP的基本概念、原理和核心组件。我们将探讨AOP的作用、优势以及如何在实际应用中使用AOP来提升软件开发的效率和质量。无论是新手还是资深开发人员&#xff0c;都将受益于对AOP的理解和应用。 希望本文能够帮助读者对AOP有一…

MineDojo - “我的世界” 基础上构建的 具身智能体仿真组件

关于 MineDojo Building Open-Ended Embodied Agents with Internet-Scale Knowledge github : https://github.com/MineDojo/MineDojo论文&#xff1a;MineDojo: Building Open-Ended Embodied Agents with Internet-Scale Knowledge https://arxiv.org/abs/2206.08853 Min…

Linux安装 spark 教程详解

目录 一 准备安装包 二 安装 scala 三 修改配置文件 1&#xff09;修改 workers 文件 2&#xff09;修改 spark-env.sh文件 四 进入 spark 交互式平台 一 准备安装包 可以自行去 spark 官网下载想要的版本 这里准备了 spark3.1.2的网盘资源 链接: https://pan.baidu.com…

stl 输入输出流

标准输入输出流 头文件 iostream 从标准输入读取流 cin >> 从标准输出写入流 cout << get 系列函数 get 无参数&#xff1a;cin.get() 从指定的输入流中提取一个字符&#xff08;包括空白字符&#xff09;&#xff0c;若读取成功&#xff0c;返回该字符的 ASC…

css--踩坑

1. 子元素的宽高不生效问题 设置flex布局后&#xff0c;子元素的宽高不生效问题。 如果希望子元素的宽高生效&#xff0c;解决方法&#xff0c;给子元素添加如下属性&#xff1a; flex-shrink: 0; flex-shrink: 0;2. 横向滚动&#xff08;子元素宽度不固定&#xff09; /* tab…

K8s学习笔记5

安装Kubernetes&#xff1a; 主机名IP地址角色master192.168.17.131master结点node1192.168.17.132nodenode2192.168.17.133node 设置主机名&#xff1a; [rootlocalhost ~]# hostnamectl set-hostname master[rootlocalhost ~]# hostnamectl set-hostname node1[rootlocalho…

尤雨溪:Vite的现状与未来展望

10 月 5 日 - 6 日&#xff0c;ViteConf 2023 在线举行&#xff0c;Vue 和 Vite 的创建者尤雨溪发表了题为《The State of Vite》 的演讲&#xff0c;他分享了 Vite 的现状与未来展望&#xff0c;本文就来看一看 Vite 现在怎么样了&#xff0c;以及未来的路将怎么走&#xff01…

港联证券:a股b股区别?

A股和B股是指中国大陆股市中的两类股票&#xff0c;两者在法律规定、税收、流转规划和出资者身份等多个方面都有较大不同。下面从多个视点分析A股B股的差异。 一、法律规定 在中国大陆股市中&#xff0c;A股是指在上海证券生意所和深圳证券生意所上市流转的股票&#xff0c;只…

IDEA对比两个文件的内容

提前说明&#xff1a;IDEA可以用对比功能对比两个文件的内容&#xff0c;适合对比大部分内容重复&#xff0c;少部分内容有变化的两个文件。 第一步&#xff1a;鼠标点击选中一个文件 第二步&#xff1a;按照Ctrl的同时&#xff0c;鼠标左键再点击选择另一个文件 第三步&#…

零基础如何自学网络安全,基于就业前景全方位讲解,包教包会

你是否对网络空间安全充满好奇&#xff1f;想要解开网络世界神秘的面纱&#xff1f;你是否对黑客技术着迷&#xff1f;而找不到合适的学习途径&#xff1f;你是否遭到过各种各样的网络攻击&#xff0c;却因知识的匮乏束手无策&#xff1f; 那么接下来将为你全面介绍&#xff0c…

【算法练习Day14】二叉树的最大深度二叉树的最小深度完全二叉树的节点个数

​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;练题 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 文章目录 二叉树的最大深度二叉树的最…