【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设计,视频分享,技术交流。

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

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

相关文章

js键盘事件keydown事件,防止重复触发,组合键的配合使用

js键盘事件keydown事件&#xff0c;防止重复触发 键盘事件类型主要有三种&#xff1a; keydown 、keypress(不建议使用&#xff0c;部分浏览器已放弃)和 keyup 。 添加普通键盘keydown事件 // 监听键盘按下事件document.addEventListener(keydown, function(event) {// 输出按…

搭建动态网站之——基于Redhat8.6搭建Discuz论坛

目录 一、动态网站与静态网站区别 1、提供用户互动接口的动态网站 2、搭建动态网站的需求&#xff1a; 二、搭建步骤 第一步&#xff1a;www服务器配置 第二步;编辑网页文件 第三步&#xff1a;使用xftp 将Discuz包传到/discuz解压 1、将Discuz包移动到/discuz 2、解压…

ArkTS @Observed、@ObjectLink状态装饰器的使用

作用 Observed、ObjectLink装饰器用于在涉及嵌套对象或者数组元素为对象的场景中进行双向数据同步。 状态的使用 1.嵌套对象 我们将父类设置为Observed状态&#xff0c;这个时候&#xff0c;子应该设置ObjectLink才能完成数据的双向绑定&#xff0c;所以我们构建一个组件&…

C语言插入排序算法及代码

一、原理 在待排序的数组里&#xff0c;从数组的第二个数字开始&#xff0c;通过构建有序序列&#xff0c;对于未排序数据&#xff0c;在已排序序列中从后向前扫描&#xff0c;找到相应位置并插入。 二、代码部分 #include<stdio.h> #include<stdlib.h> int ma…

Android的基础开发

基础开发 listView ListView就是列表条目&#xff0c;可以向下滚动&#xff0c;也可以点击。 首先设置两个视图布局 activity_main2.xml【充当容器{ListView}】 <ListViewandroid:layout_width"match_parent"android:layout_height"match_parent"a…

AWS向量数据库Amazon OpenSearch Service使用测评

前言 在大模型盛行的当今&#xff0c;选择适宜的数据库显得尤为重要。因为你需要面对海量训练数据&#xff0c;快速的检索至关紧要&#xff0c;以及对于存储的要求也是至关重要的。对于海量的数据查询和存储是需要巨大的算力支持。向量数据库常用在一些图像文本或者视频的生成…

【大数据存储与处理】实验二 HBase 过滤器操作

实验二 HBase 过滤器操作 【实验目的】&#xff1a; 1.掌握使用 HBase 过滤器进行全表扫描。 【实验内容与要求】&#xff1a; 在 HBase 中&#xff0c;Get 和 Scan 操作都可以使用过滤器来设置输出的范围&#xff0c;类似于 SQL 里面 的 Where 查询条件。使用 show_filte…

【VScode和Leecode的爱恨情仇】command ‘leetcode.signin‘ not found

文章目录 一、关于command ‘leetcode.signin‘ not found的问题二、解决方案第一&#xff0c;没有下载Nodejs&#xff1b;第二&#xff0c;有没有在VScode中配置Nodejs第三&#xff0c;力扣的默认在VScode请求地址中请求头错误首先搞定配置其次搞定登入登入方法一&#xff1a;…

obswebsocket+douyinAPI+python,教你如何三步搭建自己的AI美女直播间,24小时的永动机

一&#xff1a;什么是AI直播美女直播间 就是在直播的时候通过弹幕进行选择不同的ai人物进行跳舞的直播间大致就是 可以看到左边是有提示&#xff0c;根据观众刷礼物的不同进行选择某一个AI人物进行展示&#xff0c;怎么通过技术手段实现呢 二&#xff1a;你需要懂的 其实还…

vmware安装银河麒麟V10高级服务器操作系统

vmware安装银河麒麟V10高级服务器操作系统 1、下载银河麒麟V10镜像2、VMware安装银河麒麟V10高级服务器操作系统2.1、新建虚拟机2.2、安装虚拟机 3、配置银河麒麟V10高级服务器操作系统3.1、安装vmware tools3.2、配置静态IP地址 和 dns3.3、查看磁盘分区 1、下载银河麒麟V10镜…

AI工具网站汇总——学习的好帮手

一、聊天AI 1.ChatGPT 地表最强AI聊天机器人 网址&#xff1a;https://chat.openai.com 2.Anthropic Anthropic发布的与ChatGPT竞争的聊天机器人 网址&#xff1a;https://www.anthropic.com 3.文心一言 百度全新知识增强大语言模型&#xff01;国产聊天机器人 网址&…

so-vits-svc的使用

1. 启动工程 找到工程的路径&#xff0c;找到启动的bat文件&#xff0c;这里以 d:/so-vits-svc为例。 2. 启动过程 启动后会出现cmp的一个弹框&#xff0c;初始启动相对较慢&#xff0c;请耐心等待一会儿&#xff0c;启动完成后&#xff0c;会出现一个页面&#xff0c;如下…

JDK各个版本特性讲解-JDK14特性

JDK各个版本特性讲解-JDK14特性 一、Java14概述二、语法层面的变化1. instanceof2. switch表达式3. 文本块的改进4. Records记录类型 二、关于GC1.G1的NUMA内存分配优化2. 弃用SerialCMS,ParNewSerial Old3.删除CMS4.ZGC on macOS and Windows 三、其他变化1.友好的空指针异常提…

HAproxy做七层代理+keepalived高可用,实现动静分离,由nginx处理静态页面,tomcat处理动态页面

目录 一、三种软负载均衡器的区别 关于三种负载均衡器的性能对比&#xff1a; 关于三种负载均衡器的代理类型对比&#xff1a; 关于三种负载均衡器的健康检查对比&#xff1a; 二、haproxy的8中负载均衡调度算法 haproxy的会话保持的方式 haproxy的配置文件学习 三、实操…

(详解版)创建线程的四种方式

文章目录 Java中创建线程的四种方式1. 继承Thread类并重写 run 方法来创建线程2. 实现Runnable接口并实现 run 方法来创建线程。3. 使用Callable接口创建线程4. 使用Executor框架创建线程 Java中创建线程的四种方式 接下来我会详细解释这四种方式创建线程如何实现. 我们如果要…

【HarmonyOS开发】ArkTs关系型和非关系型数据库的存储封装

前面使用了首选项的存储方式&#xff0c;因此将其他的两种存储方式&#xff08;键值型数据库和关系型数据库&#xff09;也学习一下&#xff0c;简单记录一下&#xff0c;并进行封装&#xff0c;方便后续使用。 1、效果预览 2、使用条件 2.1 键值型数据库 键值型数据库实现数据…

RabbitMQ入门指南(三):Java入门示例

专栏导航 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、AMQP协议 1.AMQP 2.Spring AMQP 二、使用Spring AMQP实现对RabbitMQ的消息收发 1.案例准备阶段 2.入门案例&#xff08;无交换机&#xff09; 3.任务模型案例&#xff08;Work Queues&#xff0…

九.数据处理之增删改

数据处理之增删改 1.插入数据1.1实际问题1.2方式1&#xff1a;VALUES的方式添加1.3方式2&#xff1a;将查询结果插入到表中 2.更新数据3.删除数据4.MySQL8新特性&#xff1a;计算列5.综合案例 1.插入数据 1.1实际问题 解决方式&#xff1a;使用INSERT语句向表中插入数据 1.2方…

文献速递:生成对抗网络医学影像中的应用——用于生成前列腺MR-only影像治疗剂量规划的合成CT的深度学习模型:多中心研究

文献速递&#xff1a;生成对抗网络医学影像中的应用——用于生成前列腺MR-only影像治疗剂量规划的合成CT的深度学习模型&#xff1a;多中心研究 本周给大家分享文献的主题是生成对抗网络&#xff08;Generative adversarial networks, GANs&#xff09;在医学影像中的应用。文…

电源模块测试方法 | 怎么测试电源负载瞬态响应?

负载瞬态响应测试是检测电源稳定性和质量的重要方法之一&#xff0c;而电源稳定性是设备正常运行的基础。通过负载瞬态响应测试来检测电源的响应速度和稳定性&#xff0c;从而优化电源设计&#xff0c;提升性能&#xff0c;确保电子设备可以稳定工作。 什么是负载瞬态响应测试?…