【Proteus仿真】【Arduino单片机】视力保护仪

文章目录

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


一、功能简介

本项目使用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)
	{
		//距离显示
		lcd1602_show_nums(2,0,sys_ctrl.dis,3,0);
		//光线显示
		lcd1602_show_nums(2,1,sys_ctrl.light,2,0);
		//有无开启计时状态显示
		if(sys_ctrl.timeflag==1)lcd1602_show_string(15,0,"Y");
		else lcd1602_show_string(15,0,"N");

		//时间显示
		lcd1602_show_nums(11,1,sys_ctrl.time[0],2,0x80);
		lcd1602_show_nums(14,1,sys_ctrl.time[1],2,0x80);

		//距离阈值显示
		lcd1602_show_nums(8,0,sys_ctrl.disl,3,0);
		//光线阈值显示
		lcd1602_show_nums(6,1,sys_ctrl.lightl,2,0);

		//设置参数闪烁
		switch(sys_ctrl.mode)
		{
			case 1://距离
				lcd1602_show_string(8,0,"   ");
				delay_ms(50);
				lcd1602_show_nums(8,0,sys_ctrl.disl,3,0);
				break;
			case 2://光线
				lcd1602_show_string(6,1,"  ");
				delay_ms(50);
				lcd1602_show_nums(6,1,sys_ctrl.lightl,2,0);
				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>2)sys_ctrl.mode=1;
	}
	//阈值设置模式
	if(sys_ctrl.mode!=0)
	{
		//加
		if(key==KEY1_PRESS)
		{
			switch(sys_ctrl.mode)
			{
				case 1://距离
					sys_ctrl.disl++;
					if(sys_ctrl.disl>500)sys_ctrl.disl=0;
					break;
				case 2://光线
					sys_ctrl.lightl++;
					if(sys_ctrl.lightl>99)sys_ctrl.lightl=0;
					break;
			}	
		}
		//减
		else if(key==KEY2_PRESS)
		{
			switch(sys_ctrl.mode)
			{
				case 1://距离
					sys_ctrl.disl--;
					if(sys_ctrl.disl<0)sys_ctrl.disl=500;
					break;
				case 2://光线
					sys_ctrl.lightl--;
					if(sys_ctrl.lightl<0)sys_ctrl.lightl=99;
					break;
			}	
		}
		//确定
		else if(key==KEY4_PRESS)
		{
			sys_ctrl.mode=0;	
		}	
	}
	//正常模式
	else
	{
		//计时器开关
		if(key==KEY1_PRESS)
		{
			sys_ctrl.timeflag=!sys_ctrl.timeflag;
			if(sys_ctrl.timeflag==1)
			{
				TR1=1;//打开定时器
			}
			else
			{
				TR1=0;//关闭定时器
				sys_ctrl.time[0]=0;sys_ctrl.time[1]=0;
			}	
		}
	}
}

//系统功能控制
void sys_fun_ctrl(void)
{
	//正常模式
	if(sys_ctrl.mode==0)
	{
		//如果光线强度低于阈值,指示灯亮,蜂鸣器报警
		if(sys_ctrl.light<sys_ctrl.lightl)
		{
			LED_LIGHT=0;
			beep_alarm(1,1000);		
		}
		//如果光线强度正常,指示灯灭,报警取消
		else
		{
			LED_LIGHT=1;	
		}

		//如果检测距离低于阈值,指示灯亮,蜂鸣器报警
		if(sys_ctrl.dis<sys_ctrl.disl)
		{
			LED_DIS=0;
			beep_alarm(1,1000);	
		}
		//如果检测距离正常,指示灯灭,报警取消
		else
		{
			LED_DIS=1;	
		}

		//如果开启计时
		if(sys_ctrl.timeflag)
		{
			//如果计时到达60分钟,指示灯亮,蜂鸣器报警
			if(sys_ctrl.time[0]==60)
			{
				LED_TIME=0;
				beep_alarm(1,1000);
			}
		}
	}	
}





三、实验现象

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

联系作者

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

5252D 5G基站测试仪

01 5252D 5G基站测试仪 产品综述&#xff1a; 5252D多通道综测仪打破了信号发生器进行信号发射、频谱分析仪进行观看频域波形的测试方案&#xff0c;将信号收发融为一体&#xff0c;推动无线通信测试进入全新时代。其独具的多通道收发一体、高性能、全方位测试能力及直观操作…

UE5 runtime模式下自定义视口大小和位置并跟随分辨率自适应缩放

本文旨在解决因UI问题导致屏幕中心位置不对的问题 处理前的现象&#xff1a;如果四周UI透明度都为1&#xff0c;那么方块的位置就不太对&#xff0c;没在中心 处理后的现象&#xff1a; 解决办法&#xff1a;自定义大小和视口偏移 创建一个基于子系统的类或者蓝图函数库(什么类…

链表对象的封装

前言 前面我自己写了一个对链表对象的封装&#xff0c;现在看来&#xff0c;确实还得是大佬的封装思路更加完善 前言知识介绍 __init__方法 __init__方法是Python中的一个特殊方法&#xff0c;用于初始化一个新对象。当一个类的实例被创建时&#xff0c;__init__方法会被自…

【数据结构和算法】 K 和数对的最大数目

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、题目描述 二、题解 2.1 方法一&#xff1a;双指针排序 三、代码 3.1 方法一&#xff1a;双指针排序 3.2 方法二&#xff1…

107基于matlab的模糊推理系统(ANFIS)的时间序列预测

基于matlab的模糊推理系统&#xff08;ANFIS&#xff09;的时间序列预测&#xff0c;输出训练集、测试集和预测数据结果&#xff0c;数据可更换自己的&#xff0c;程序已调通&#xff0c;可直接运行。 107 时间序列预测模糊推理系统 (xiaohongshu.com)

管理类联考——数学——真题篇——按题型分类——充分性判断题——蒙猜A/B

老规矩&#xff0c;看目录&#xff0c;平均3-5题 文章目录 A/B2023真题&#xff08;2023-19&#xff09;-A-选项特点&#xff1a;两个等号&#xff1b;-判断需联立的难易&#xff1a;难&#xff0c;看着感觉需要联立&#xff0c;所以判断联立需要有理论支撑&#xff0c;不然还…

QT qAbs()、qRound()

1.qAbs qAbs:原型为 T qAbs(const T &value) 返回输入参数对应类型的绝对值&#xff0c;其中T为输入参数类型&#xff0c;也就是可以返回多种类型&#xff08;int,float,double型&#xff09; 代码示例&#xff1a; int d -1; float b -3.14; double c -4.36;int a_…

具有超低功耗性能的R7F102GAC3CSP、R7F102GAC2DSP、R7F102G6C3CSP RL78/G22微控制器 16-bit MCU

RL78/G22 简介&#xff1a; 除了具有低电流消耗&#xff08;CPU工作时&#xff1a;37.5μA/MHz&#xff1b;STOP时&#xff1a;200nA&#xff09;外&#xff0c;RL78/G22微控制器还配备了丰富的电容触摸通道。完备的16-48引脚封装和32KB-64KB闪存&#xff0c;扩充了新一代RL78…

PMP认证需要多少钱?

PMP认证费太贵&#xff1f;这些可以省下来&#xff01; 学习PMP认证到拿证的过程中一共有两个地方需要有费用支出&#xff0c;第一是PMP培训费用&#xff0c;第二就是PMP考试费用。 为什么一定要参加培训&#xff1f;这是PMI的考试条件中要求的&#xff0c;任何考生都需要有35学…

【C++】开源:ImGui图形用户界面库配置与使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍ImGui图形用户界面库配置与使用。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&…

【递归 回溯】LeetCode-226. 翻转二叉树

226. 翻转二叉树。 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 示例 1&#xff1a; 输入&#xff1a;root [4,2,7,1,3,6,9] 输出&#xff1a;[4,7,2,9,6,3,1]示例 2&#xff1a; 输入&#xff1a;root [2,1,3] 输出&#xf…

实战篇:一文讲清楚电商平台用户评价分析

01 明确问题 随着电商平台的成熟&#xff0c;如何提升用户体验、提高客户留存率也成为了电商平台关注的重点。而用户评价是最直观地能反应用户体验的指标。用户差评更是其中的重点&#xff0c;通过差评分析&#xff0c;可以寻找到平台目前存在的可能导致用户打出差评的因素&am…

机器学习——特征选择(一)

【说明】文章内容来自《机器学习——基于sklearn》&#xff0c;用于学习记录。若有争议联系删除。 1、简介 特征选择&#xff0c;又称变量选择、属性选择或变量子集选择&#xff0c;是选择相关特征子集用于模型构造的过程。简要地说&#xff0c;通过检测相关特征。摒弃冗余特征…

TransXNet实战:使用 TransXNet实现图像分类任务(二)

文章目录 训练部分导入项目使用的库设置随机因子设置全局参数图像预处理与增强读取数据设置Loss设置模型设置优化器和学习率调整策略设置混合精度&#xff0c;DP多卡&#xff0c;EMA定义训练和验证函数训练函数验证函数调用训练和验证方法 运行以及结果查看测试完整的代码 在上…

脉冲水表作用有哪些?

脉冲水表是一种新型的水表&#xff0c;它通过检测水流量并发送脉冲信号来计量用水量。与传统的机械水表相比&#xff0c;脉冲水表具有许多优势和作用。 首先&#xff0c;脉冲水表具有高精度和可靠性。传统的机械水表在长期使用过程中会因磨损而导致计量不准确&#xff0c;而脉冲…

【强化学习】Deep Q Learning

Deep Q Learning 在前两篇文章中&#xff0c;我们发现RL模型的目标是基于观察空间 (observations) 和最大化奖励和 (maximumize sum rewards) 的。 如果我们能够拟合出一个函数 (function) 来解决上述问题&#xff0c;那就可以避免存储一个 (在Double Q-Learning中甚至是两个…

Redis介绍与使用

1、Nosql 1.1 数据存储的发展 1.1.1 只使用Mysql 以前的网站访问量不大&#xff0c;单个数据库是完全够用的。 但是随着互联网的发展&#xff0c;就出现了很多的问题&#xff1a; 数据量太大&#xff0c;服务器放不下 访问量太大&#xff0c;服务器也承受不了 1.1.2 缓存…

STL stack练习

CSTL之stack栈容器 - 数据结构教程 - C语言网CSTL之stack栈容器1.再谈栈回顾一下之前所学的栈&#xff0c;栈是一种先进后出的数据结构&#xff0c;而实现方式需要创建多个结构体&#xff0c;通过链式的方式进行实现&#xff0c;这是标准的栈的思路&#xff0c;而在STL中栈可以…

ctfshow(web190-web200)

目录 web190 web191 web192 web193 web194 web195 web196 web197 web198 web199 web200 web190 为什么要有admin呢 这也是试出来的 这个admin必须是数据库中存在的 这样才能使用布尔注入 因为这个时候登录 有两种返回结果 一种密码错误 一种就是用户名错误 admin an…

HBase 整合 Phoenix

目录 一、Phoenix 简介 1.1 Phoenix定义 1.2 为什么使用 Phoenix 二、Phoenix 快速入门 2.1 安装部署 Phoenix 2.1.1 上传并解压 tar 包 2.1.2 复制 server 包并拷贝到各个节点的 hbase/lib 2.1.3 配置环境变量 2.1.4 重启 HBase 2.1.5 连接 Phoenix 2.2 Phoenix…