【Proteus仿真】【Arduino单片机】定时智能插座开关

news2024/11/26 17:39:46

文章目录

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


一、功能简介

本项目使用Proteus8仿真Arduino单片机控制器,使LCD1602液晶,DS18B20温度传感器、按键、蜂鸣器、继电器开关、HC05蓝牙模块等。
主要功能:
系统运行后,LCD1602显示温度、温度阈值,定时时间及状态信息等;如果温度高于阈值,则开关关闭,且蜂鸣器报警。
如果温度低于阈值,当定时器状态开启,定时结束,开关关闭,发出提示音。正常模式下,可通过K1键对开关的开和关控制。
通过K3键进入阈值设置模式,可通过K3选择需修改的数据位置,K1和K2调节,当需要开启定时器时,需将状态由N设置为Y,K4键确定并返回正常模式。可通过蓝牙发送字符’O’远程打开开关,发送字符’C’关闭。


二、软件设计

/*
作者:嗨小易(QQVIP群2:570487280)

*/



//系统数据显示
void sys_data_show(void)
{
	while(1)
	{
		//正常模式显示
		if(sys_ctrl.mode==0)
		{
			//温度显示
			lcd1602_show_nums(3,0,sys_ctrl.temp,2,0);
			//温度阈值显示
			lcd1602_show_nums(7,0,sys_ctrl.temph,2,0);
			//时间显示
			lcd1602_show_nums(5,1,sys_ctrl.time[0],2,0x80);
			lcd1602_show_nums(8,1,sys_ctrl.time[1],2,0x80);
			lcd1602_show_nums(11,1,sys_ctrl.time[2],2,0x80);
			
			//开关状态显示
			if(sys_ctrl.onoff==0)lcd1602_show_string(13,0,"OFF");
			else lcd1602_show_string(13,0," ON");
			//定时开关显示
			if(sys_ctrl.time_onoff==0)lcd1602_show_string(15,1,"N");
			else lcd1602_show_string(15,1,"Y");	
		}
		//设置模式显示
		else
		{
			//温度阈值显示
			lcd1602_show_nums(7,0,sys_ctrl.temph,2,0);
			//时间显示
			lcd1602_show_nums(5,1,sys_ctrl.time[0],2,0x80);
			lcd1602_show_nums(8,1,sys_ctrl.time[1],2,0x80);
			lcd1602_show_nums(11,1,sys_ctrl.time[2],2,0x80);
			switch(sys_ctrl.mode)
			{
				case 1://温度
					lcd1602_show_string(7,0,"  ");
					delay_ms(100);
					lcd1602_show_nums(7,0,sys_ctrl.temph,2,0);
					break;
				case 2://小时
					lcd1602_show_string(5,1,"  ");
					delay_ms(100);
					lcd1602_show_nums(5,1,sys_ctrl.time[0],2,0x80);
					break;
				case 3://分钟
					lcd1602_show_string(8,1,"  ");
					delay_ms(200);
					lcd1602_show_nums(8,1,sys_ctrl.time[1],2,0x80);
					break;
				case 4://开关
					lcd1602_show_string(15,1," ");
					delay_ms(200);
					if(sys_ctrl.time_onoff==0)lcd1602_show_string(15,1,"N");
					else lcd1602_show_string(15,1,"Y");
					break;	
			}	
		}	

		break;			
	}
}

//系统数据设置
void sys_data_set(void)
{
	u8 key=0;
	key=key_scan(0);
	//模式设置
	if(key==KEY3_PRESS)
	{
		sys_ctrl.mode++;
		if(sys_ctrl.mode>4)sys_ctrl.mode=1;
	}
	//正常模式
	if(sys_ctrl.mode==0)
	{
		//开
		if(key==KEY1_PRESS)
		{
			sys_ctrl.onoff=!sys_ctrl.onoff;	
		}
	}
	//设置模式
	else
	{
		//加
		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.time[0]++;
					if(sys_ctrl.time[0]>23)sys_ctrl.time[0]=0;
					break;
				case 3://分钟
					sys_ctrl.time[1]++;
					if(sys_ctrl.time[1]>59)sys_ctrl.time[1]=0;
					break;
				case 4://开关
					sys_ctrl.time_onoff=!sys_ctrl.time_onoff;
					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.time[0]--;
					if(sys_ctrl.time[0]<0)sys_ctrl.time[0]=23;
					break;
				case 3://分钟
					sys_ctrl.time[1]--;
					if(sys_ctrl.time[1]<0)sys_ctrl.time[1]=59;
					break;
				case 4://开关
					sys_ctrl.time_onoff=!sys_ctrl.time_onoff;
					break;
			}
		}
		//确定
		else if(key==KEY4_PRESS)
		{
			sys_ctrl.mode=0;
		}
	}
}




三、实验现象

B站演示视频:https://space.bilibili.com/444388619
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

联系作者

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

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

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

相关文章

如何让32位.Net 应用打开3G开关

昨天刚分享了《如何让.NET应用使用更大的内存》&#xff0c;结果就有同学说&#xff0c;<最好加一下32位如何开启大内存&#xff0c;因为很多传统项目32位&#xff0c;实在迁移不动了>&#xff0c;那么&#xff0c;我就验证了一些可行的方案&#xff0c;发现都挺简单的。…

TCP/IP详解——FTP 协议,Telnet协议

文章目录 1. FTP 协议1.1 FTP的应用1.2 FTP传输文件的过程1.3 FTP传输模式1.4 主动模式&#xff08;Active Mode&#xff09;1.5 Active Mode 抓包分析1.6 被动模式&#xff08;Passive Mode&#xff09;1.7 Passive Mode 抓包分析 2. Telnet 协议2.1 Telnet 概念2.2 Telnet 协…

我做了一个在手机灵动岛锁屏看实时网速/步数/下班倒计时/跑步距离/照片/待办/倒计时/手机使用次数/帧率...的软件

我做了一个在手机灵动岛&锁屏看实时网速/步数/下班倒计时/跑步距离/照片/待办/倒计时/手机使用次数/帧率…的软件 Island Widgets 的作用&#xff1a; 提醒您 &#xff1a; 准时下班每天运动陪伴家人保持体重放下手机每日待办当前网速手机使用强度实时热搜现在天气… 初…

使用openMVS库,在VS2022中启用c++17标准编译仍然报错

使用openMVS库&#xff0c;在VS2022中启用c17标准编译仍然报错 现象 项目中引用了某些开源库&#xff08;例如openmvs2.1.0&#xff09;&#xff0c;编译时要求启用编译器对c17的支持。 没问题&#xff01;大家都知道在下图所示的位置调整C语言标准&#xff1a; 但是&#…

Django 构建动态前端页面详解

概要 Django 是一个强大的 Python Web 框架&#xff0c;广泛用于后端开发。然而&#xff0c;它也支持直接使用 HTML, CSS, 和 JavaScript 来构建动态的前端界面。本文将详细介绍如何在 Django 项目中使用这些技术&#xff0c;包括设置静态文件、编写 HTML 模板以及集成 JavaSc…

预测性维护在汽车制造行业中的应用

汽车制造行业是一个高度复杂和精细化的领域&#xff0c;依赖于各种设备来完成生产流程。这些设备包括机械装配线、焊接机器人、喷涂设备、传送带等。然而&#xff0c;这些设备在长时间运行中不可避免地会遇到各种故障&#xff0c;给生产进程带来延误和成本增加。为了应对这一挑…

鸿蒙Js实战,计算器功能开发

场景&#xff1a; 通过动态设置按钮组件button实现计算器的键盘&#xff0c;通过文本text显示计算的表达书&#xff0c;可以计算&#xff0c;-&#xff0c;*&#xff0c;/&#xff0c;可以一个一个移除&#xff0c;可以重置 等。 下面我们开始今天的文章&#xff0c;还是老规…

快速构建自定义配置好的VM - 使用GCP instance-template 和 custom-image

在云项目开发中有时会有下面的需求&#xff1a; 构建大量拥有相同配置&#xff0c; 相同已安装软件&#xff0c; 甚至相同已启动进程的虚拟机。 下面的内容会基于1个简单的例子&#xff1a; 现有1台vm 名字是 tf-vpc0-subnet0-vm0 &#xff0c; 我在上面手动安装了jdk11 和 …

智能手表上的音频(五):录音

上篇讲了语音通话&#xff0c;本篇讲录音。录音功能就是把录到的音频保存成文件。保存文件的格式支持两种&#xff1a;一是PCM(16K采样)的WAV格式&#xff0c;二是AMR-NB&#xff08;8k采样&#xff09;的AMR格式。WAV格式简单&#xff1a;44字节的文件头PCM 数据&#xff0c;示…

flask 接口处理带有图片和json数据的请求 发送图片到前端的实现

1.flask的request 从flask的源码可以看到flask的可用属性很多&#xff0c;包括data,form,files&#xff0c;header,host等&#xff0c;在我们接收文件传参时需要用到的属性就是form和files。不过具体的使用方式有两种&#xff0c;即&#xff1a;postman发送的和requests模拟发…

〖大前端 - 基础入门三大核心之JS篇(57)〗- 继承

说明&#xff1a;该文属于 大前端全栈架构白宝书专栏&#xff0c;目前阶段免费&#xff0c;如需要项目实战或者是体系化资源&#xff0c;文末名片加V&#xff01;作者&#xff1a;哈哥撩编程&#xff0c;十余年工作经验, 从事过全栈研发、产品经理等工作&#xff0c;目前在公司…

Leetcode—11.盛最多水的容器【中等】

2023每日刷题&#xff08;六十三&#xff09; Leetcode—11.盛最多水的容器 实现代码 #define MAX(a, b) ((a) > (b) ? (a) : (b)) #define MIN(a, b) ((a) < (b) ? (a) : (b)) int maxArea(int* height, int heightSize) {int left 0, right heightSize - 1;int m…

【具身智能评估7】ProcTHOR: Large-Scale Embodied AI Using Procedural Generation

论文标题&#xff1a;ProcTHOR: Large-Scale Embodied AI Using Procedural Generation 论文作者&#xff1a;Matt Deitke, Eli VanderBilt, Alvaro Herrasti, Luca Weihs, Jordi Salvador, Kiana Ehsani, Winson Han, Eric Kolve, Ali Farhadi, Aniruddha Kembhavi, Roozbeh M…

118. 杨辉三角

描述 : 给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 题目 : LeetCode 118. 杨辉三角 : 118. 杨辉三角 分析 : 这道题用二维数组来做 . 解析 : class Solution {public Li…

python图像二值化处理

目录 1、双峰法 2、P参数法 3、迭代法 4、OTSU法 图像的二值化处理是将图像上的像素点的灰度值设置为0或255&#xff0c;也就是将整个图像呈现出明显的只有黑和白的视觉效果。二值化是图像分割的一种最简单的方法&#xff0c;可以把灰度图像转换成二值图像。具体实现是将大…

OpenSSL 3.2.0新增Argon2支持——防GPU暴力攻击

1. 引言 OpenSSL新发布的3.20版本中&#xff0c;引入了一些新特性&#xff0c;包括&#xff1a; post-quantum方法Brainpool曲线QUICArgon2&#xff1a;Argon2 是一种慢哈希函数&#xff0c;在 2015 年获得 Password Hashing Competition 冠军&#xff0c;利用大量内存计算抵…

Redis一些常用的技术

文章目录 第1关&#xff1a;Redis 事务与锁机制第2关&#xff1a;流水线第3关&#xff1a;发布订阅第4关&#xff1a;超时命令第5关&#xff1a;使用Lua语言 第1关&#xff1a;Redis 事务与锁机制 编程要求 根据提示&#xff0c;在右侧编辑器Begin-End补充代码&#xff0c;根据…

vuepress-----25、右侧目录

# 25、vuepress 右侧目录 https://github.com/xuek9900/vuepress-plugin-right-anchor vuepress-plugin-right-anchor English &#xff5c;中文 在用 Vuepress 2.x 编写的文档页面右侧添加 锚点导航栏 # 版本 2.x.x -> Vuepress 2.x -> npm next -> master 分支0…

c语言突击

一&#xff1a;前序 1.一个c语言程序有且只有一个main函数&#xff0c;是程序运行的起点&#xff01; 每个c语言程序写完后&#xff0c;都是先编译&#xff08;.c---&#xff09;&#xff0c;后链接&#xff08;.obj---&#xff09;&#xff0c;最后运行&#xff08;.exe&…

ROS-分布式通信

ROS是一个分布式计算环境。一个运行中的ROS系统可以包含分布在多台计算机上多个节点。根据系统的配置方式&#xff0c;任何节点可能随时需要与任何其他节点进行通信。 因此&#xff0c;ROS对网络配置有某些要求&#xff1a; 所有端口上的所有机器之间必须有完整的双向连接。每…