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

2023-12-19


一、功能简介

本项目使用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设计,视频分享,技术交流。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Proteus仿真】【Arduino单片机】视力保护仪 的相关文章

  • 在mongodb中编辑子文档N-N关系

    我有一个应用程序 其中article可以链接到多个平台 文章包含平台列表 平台也包含文章列表 有关更多详细信息 请查看我几个月前提出的 stackoverflow 问题 https stackoverflow com a 40377383
  • 使用在 Linux 上运行的 .NET Core 时连接到 MongoDB 失败

    我正在使用 ASP NET Core 2 0 构建一个网站 一个月前刚刚从 1 1 升级 MongoDB 也由 Mongo Atlas 在 AWS 上托管 这个 MongoDB 实例有 3 个副本集 需要 SSL 进行连接 并且已经设置可以
  • 使用 MongoDB Atlas 时 mongo-go-driver 因服务器选择超时而失败

    去版本 1 12 5 我有这个使用 node js mongo 驱动程序的代码 const MongoClient require mongodb MongoClient const uri process env MONGO HOST d
  • 从 MongoDB+Node.js 获取数据到客户端 JavaScript

    如何使用 Node js 连接 MongoDB 然后将结果传递给客户端 JavaScript 并以 HTML 形式显示 var http require http var URL require url var Db require mon
  • MongoDB - 解释特定的解释输出

    我使用的是 MongoDB 版本 2 4 8 test 2014 03 25 14 42 13 0 gt gt gt db users getIndexes v 1 key id 1 ns test users name id v 1 ke
  • Perl Mongo 查找对象 ID

    你会认为这是一件简单的事情 我有一个集合中的对象 ID 列表 我想根据对象 ID 获取单个记录 谷歌搜索过 但没有任何帮助 所以我有对象 ID 5106c7703abc120a04070b34 my client MongoDB Mongo
  • 我应该开发一个单独的 Express 服务器,还是处理 next.js 应用程序中的所有 API 调用?

    我的网站将执行 CRUD 操作 并将与 MongoDB 和 Firebase 存储 身份验证配合使用 开发单独的 Express 服务器而不是将所有内容集成到我的 next js 应用程序中的原因 优势是什么 据我所知 这一切都可以在我的
  • PowerShell 与 MongoDB C# 驱动程序方法不兼容?

    由 C 泛型引起的最新 MongoDB 驱动程序的问题 Cannot find an overload for GetCollection and the argument count 1 我可能可以使用其他没有泛型的 GetCollect
  • 使用mongoid动态创建索引

    我有一项为我的文档创建新字段的工作 我想在这项工作结束时创建该字段的索引 我试过 Model index field gt 1 and also Mongoid Sessions default rating prediction ensu
  • 如何在 Mongoose 中执行查找查询?

    我在 mongodb 中有一组电子书数据 例如 id ObjectId 58b56fe19585b10cd42981d8 cover path D Ebooks uploads ebooks cover 1488285665748 img1
  • CoreMongooseArray 到普通数组

    我正在从一个架构中选出 2 个元素 并希望在另一个架构中进行更新 为此 我使用切片方法将数组中的前 2 个元素列入候选名单 但我越来越 CoreMongooseArray 元素1 元素2 而不是 元素1 元素2 如何删除 CoreMongo
  • 当字段不为空时创建部分索引

    我正在尝试在字段上创建部分索引 但仅当该字段不为空时 换句话说 我希望能够让许多文档能够存储 null 但对于在字段中实际具有值的文档 我希望该值是唯一的 这是我尝试使用的代码 db account createIndex email 1
  • mongoDB白名单IP

    我看到类似的帖子 但没有一个能帮助我解决我的问题 在学习了从头开始构建 MERN 应用程序的 Udemy 教程后 我陷入了 mongoose 连接的困境 这是我的 index js 代码 const express require expr
  • Mongoid 命名范围比较同一文档中的两个时间字段

    我需要在 Mongoid 中创建一个命名范围来比较同一文档中的两个时间字段 例如 scope foo where gt updated at gt gt checked at 这显然不会像它对待的那样起作用 checked at作为一个符号
  • 在 MongoDb 上序列化仅获取属性

    使用 C 6 我可以写 public class Person public Guid Id get public string Name get public Person Guid id string name Id id Name n
  • 嵌入文档中的mongodb限制

    我需要创建一个消息系统 一个人可以在其中与许多用户进行对话 例如 我开始与 user2 user3 和 user4 交谈 因此他们中的任何人都可以看到整个对话 并且如果对话在任何时候都不是私密的 则任何参与者都可以将任何其他人添加到对话中
  • 使用 AWS MSK 连接器连接到 AWS VPC 内的 MongoDB atlas

    我正在尝试使用MongoDB使用更改流Kafka 我选择 AWS MSK 是因为我的整个基础设施都位于 AWS 内 并且可以轻松与其他 AWS 服务集成 I created an AWS MSK cluster within the VPC
  • mongorestore 从独立到复制集

    我已转储在默认端口上运行的独立 mongo 数据库 14Gb 大 如下所示 mongodump username
  • Mongo按动态字段排序

    所以我传入了一个动态变量 它是我想要排序的字段的名称 假设下面的 sortVariable 可能等于 price createdAt name 等 这不起作用 我该怎么做 function findStuff sortVariable va
  • node-mongodb-native的插入性能

    我正在使用 MongoDB 测试 Node js 的性能 我知道其中每一个都很好 彼此独立 但我正在尝试一些测试来感受它们 我遇到了这个问题 但无法确定来源 问题 我正在尝试在单个 Node js 程序中插入 1 000 000 条记录 它

随机推荐

  • Learn to Explain: Multimodal Reasoning viaThought Chains for Science Question Answering科学问答的思维链

    关于 ScienceQA 模仿 回答 ScienceQA 问题时的多跳推理过程 ScienceQA 展示了以下功能的实用性 语言模型中的 CoT 因为 CoT 在少样本 GPT 3 中将问答性能提高了 1 20 微调的 UnifiedQA
  • Postgresql中自增主键序列的使用以及数据传输时提示:错误:关系“xxx_xx_xx_seq“不存在

    场景 Postgresql在Windows中使用pg dump实现数据库 指定表 的导出与导入 Postgresql在Windows中使用pg dump实现数据库 指定表 的导出与导入 CSDN博客 上面讲使用pg dump进行postgr
  • 中学老师招聘条件和要求

    如果想当老师 这些条件和要求你一定得知道 那就是中学老师的招聘条件和要求 想成为一名优秀的中学老师吗 1学历要求 本科及以上学历 师范类专业优先考虑哦 毕竟专业的事还是要交给专业的人来做嘛 2 资格要求 必须持有教师资格证 这可是成为老师的
  • java 数组合并的10种方法

    在Java中 合并 或连接 数组是常见的任务 以下是10种不同的方法来实现数组的合并 首先是 10种方法的对比 1 使用 System arraycopy 方法 使用场景 当你需要快速 高效地合并两个数组时 优点 是Java标准库提供的方法
  • ElementUI el-tree 文件数据懒加载

    el tree 文件数据懒加载 div class moveFile div class treeBox div div
  • 【从服务器获取共享列表失败】【无法与设备或资源通信】解决方案!

    从服务器获取共享列表失败 背景 某项目搭建有samba共享 使用一段时间后 不知何种原因 客户端链接共享时报 从服务器获取共享列表失败 无效的参数 可参考解决方案A 银河麒麟samba共享文件 从服务器获取共享列表失败 解决方案 CSDN博
  • 前端基础Vue项目中的插槽使用

    概念 简单理解就是组件内部留一个或多个的插槽位置 可供组件传对应的模板代码进去 插槽的出现 让组件变的更加灵活 1 匿名插槽 父组件
  • 测试编排效率提升:掌握前置接口响应数据的引用方法

    宁波银行深圳分行综合柜员面经 三方寄过去了 告诉我停止24届招聘 全部毁约 牛的 he芯 毁约应届生 34316 地产投资岗上岸啦 经验分享 江西农发行市级支行信贷岗面试 最终还是搏了一把 2023届CV视觉算法岗求职记录贴 规划指南 实习
  • 计算机SSM毕设选题 在线课堂学习系统(含源码+论文)

    文章目录 1 项目简介 2 实现效果 2 1 界面展示 3 设计方案 3 1 概述 3 2 系统流程 3 3 系统结构设计 4 项目获取
  • Jtti:linux搭建开源ldap服务器的方法

    搭建开源LDAP服务器是一种用于集中管理用户身份认证和授权信息的方法 在Linux系统上 OpenLDAP是一个流行的开源LDAP实现 可以用于搭建LDAP服务器 以下是搭建OpenLDAP服务器的基本步骤 步骤一 安装OpenLDAP 安
  • 教师职业道德规范的内容

    作为一名教师 我们不仅仅是传授知识的人 更是孩子们成长道路上的引路人 我们的职业道德 不仅关乎我们的职业形象 更关乎孩子们的成长和未来 1 敬业爱生 敬业是每个职业的基本要求 对于教师而言 更是如此 我们要热爱教育事业 全身心投入其中 为孩
  • 软件测试经典面试题分析——软件测试流程

    1 需求分析 跟同事之间探讨客户需求 对需求文档进行 测试 互相交换想法 2 需求评审 如何评审 首先提前一天发邮件给格个参会人员 准备参与XXX项目需求评审 参与人员 产品经理 项目经理 研发负责人 研发小组成员 测试负责人 测试小组成员
  • 基于Apache SeaTunnel构建CDC数据同步管道

    引言 在快速发展的数据驱动时代 数据的实时 准确同步成为了企业信息系统不可或缺的一部分 随着技术的进步 特别是在分布式计算和大数据技术的背景下 构建一个高效且可靠的数据同步管道成为了挑战 Apache SeaTunnel作为一个先进的数据集
  • springboot智慧养老中心管理系统

    收藏关注不迷路 源码文章末 文章目录 一 项目介绍 二 开发环境 三 功能介绍 四 核心代码 五 效果图 六 文章目录 一 项目介绍 时代在飞速进步 每个行业都在努力发展现在先进技术 通过这些先进的技术来提高自己的水平和优势 智慧养老中心管
  • 大学老师招聘要求条件

    大学老师招聘要求条件是非常严格的 因为大学教育是培养未来人才的重要阶段 需要老师具备较高的学术水平和教育能力 学历要求 一般来说 大学老师需要具备硕士及以上学历 一些热门专业或重点高校甚至要求博士学历 这是因为大学教育需要老师具备深厚的学术
  • 图神经网络在社交媒体分析中的应用优化

    如今 社交媒体已成为人们获取信息 交流和分享的主要平台之一 海量的社交媒体数据包含着丰富的信息 但如何从这些数据中提取有效的知识仍然是一个挑战 近年来 图神经网络作为一种强大的分析工具 被广泛应用于社交媒体分析中 本文将介绍图神经网络的基本
  • 手机APP测试——如何进行安装、卸载、运行?

    手机APP测试 主要针对的是安卓 Android 和苹果IOS两大主流操作系统 主要考虑的就是功能性 兼容性 稳定性 易用性 性能等测试 今天先来讲讲如何进行安装 卸载 运行的内容 一 App安装 1 点击运行APP安装包 检测安装包是否正
  • word下划线空格不延长&对齐

    空格下划线不延长 文件 选项 常规与保存 勾选 为尾部空格添加下划线 确定 下划线对齐 首行 把第一行的下划线调到满意位置 按tab键 下面的行 删到比首行短一丢丢 按tab键
  • 【2024全网最火最全性能教程】一文搞懂性能测试!

    性能测试概念 我们经常看到的性能测试概念 有人或称之为性能策略 或称之为性能方法 或称之为性能场景分类 大概可以看到性能测试 负载测试 压力测试 强度测试等一堆专有名词的解释 针对这些概念 我不知道你看到的时候会不会像我的感觉一样 乱 一个
  • 【Proteus仿真】【Arduino单片机】视力保护仪

    文章目录 一 功能简介 二 软件设计 三 实验现象 联系作者 一 功能简介 本项目使用Proteus8仿真Arduino单片机控制器 使LCD1602液晶 DS18B20温度传感器 按键 蜂鸣器 继电器开关 HC05蓝牙模块等 主要功能 系