【Proteus仿真】【51单片机】教室灯光控制器设计

文章目录

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


一、功能简介

本项目使用Proteus8仿真51单片机控制器,使用LCD1602液晶、DS1302时钟模块、人体红外感应模块、开关LED指示灯、继电器、PCF8591 ADC模块、光敏传感器、按键模块等。
主要功能:
系统运行后,LCD1602显示当前时间、光线强弱状态,光线强度、有无人、灯开关状态等。
如果检测光线强度大于上限值,视为白天,此时不管有无人,都不会打开电灯;
如果检测光线强度低于下限值,视为夜晚,此时检测有人,打开电灯,无人则延迟2秒熄灭;可通过K3键进入阈值设置模式,K3可切换时间、阈值上下限位置,K1和K2键调节,K4确认并返回主界面;当时间到达设定时间,则进入手动控制模式,此时可通过开关来打开和关闭电灯;当时间到达次日早上,则又进入自动控制模式。


二、软件设计

/*
作者:嗨小易(QQ技术交流群:570487280)*///系统数据采集
void sys_data_get(void)
{while(1){//获取时间ds1302_read_time();sys_ctrl.hour=(gDS1302_TIME[2]/16)*10+gDS1302_TIME[2]%16;sys_ctrl.min=(gDS1302_TIME[1]/16)*10+gDS1302_TIME[1]%16;sys_ctrl.sec=(gDS1302_TIME[0]/16)*10+gDS1302_TIME[0]%16;//读取光线值sys_ctrl.light=pcf8591_read_adcvalue(0);sys_ctrl.light=cal_map(sys_ctrl.light,0,255,0,100);//白天晚上状态获取if(sys_ctrl.light>sys_ctrl.setlight[1])sys_ctrl.dayflag=0;else if(sys_ctrl.light<sys_ctrl.setlight[0])sys_ctrl.dayflag=1; //检测是否有人if(IRED==0)sys_ctrl.man=1;else sys_ctrl.man=0;break;}	
}//系统数据显示
void sys_data_show(void)
{u8 buf[3];while(1){//正常模式显示if(sys_ctrl.mode==0){//时间显示buf[0]=gDS1302_TIME[2]/16+0x30;buf[1]=gDS1302_TIME[2]%16+0x30;buf[2]='\0';lcd1602_show_string(0,0,buf);buf[0]=gDS1302_TIME[1]/16+0x30;buf[1]=gDS1302_TIME[1]%16+0x30;buf[2]=':';lcd1602_show_string(3,0,buf);buf[0]=gDS1302_TIME[0]/16+0x30;buf[1]=gDS1302_TIME[0]%16+0x30;buf[2]='\0';lcd1602_show_string(6,0,buf);//光线强度显示lcd1602_show_nums(2,1,sys_ctrl.light,3,0);//白天夜晚状态显示if(sys_ctrl.dayflag==0)lcd1602_show_string(11,0,"day  ");else lcd1602_show_string(11,0,"night");//有无人状态显示if(sys_ctrl.man==0)lcd1602_show_string(8,1,"N");else lcd1602_show_string(8,1,"Y");//自动手动模式显示if(sys_ctrl.ctrl_flag==0)lcd1602_show_string(10,1,"Au");else lcd1602_show_string(10,1,"Sd");//电灯开关状态显示if(sys_ctrl.onoff==0)lcd1602_show_string(13,1,"OFF");else lcd1602_show_string(13,1," ON");}//设置模式显示else{//时间阈值lcd1602_show_nums(8,0,sys_ctrl.settime[0],2,0x80);lcd1602_show_nums(11,0,sys_ctrl.settime[1],2,0x80);lcd1602_show_nums(14,0,sys_ctrl.settime[2],2,0x80);	//光线阈值lcd1602_show_nums(8,1,sys_ctrl.setlight[0],2,0);lcd1602_show_nums(12,1,sys_ctrl.setlight[1],2,0);//对应位置闪烁switch(sys_ctrl.mode){case 1://时lcd1602_show_string(8,0,"  ");delay_ms(50);lcd1602_show_nums(8,0,sys_ctrl.settime[0],2,0x80);	break;case 2://分lcd1602_show_string(11,0,"  ");delay_ms(50);lcd1602_show_nums(11,0,sys_ctrl.settime[1],2,0x80);	break;case 3://秒lcd1602_show_string(14,0,"  ");delay_ms(50);lcd1602_show_nums(14,0,sys_ctrl.settime[2],2,0x80);	break;case 4://光线下限lcd1602_show_string(8,1,"  ");delay_ms(50);lcd1602_show_nums(8,1,sys_ctrl.setlight[0],2,0);	break;case 5://光线上限lcd1602_show_string(12,1,"  ");delay_ms(50);lcd1602_show_nums(12,1,sys_ctrl.setlight[1],2,0);	break;}	}break;}
}//系统数据设置
void sys_data_set(void)
{u8 key=0;static u8 oneflag=0;key=key_scan(0);//设置if(key==KEY3_PRESS){sys_ctrl.mode++;if(sys_ctrl.mode>5)sys_ctrl.mode=1;if(oneflag==0){oneflag=1;sys_parm_set_show();//系统参数设置界面显示}}//加else if(key==KEY1_PRESS){switch(sys_ctrl.mode){case 1://时sys_ctrl.settime[0]++;if(sys_ctrl.settime[0]>23)sys_ctrl.settime[0]=0;break;case 2://分sys_ctrl.settime[1]++;if(sys_ctrl.settime[1]>59)sys_ctrl.settime[1]=0;break;case 3://秒sys_ctrl.settime[2]++;if(sys_ctrl.settime[2]>59)sys_ctrl.settime[2]=0;break;case 4://光线下限sys_ctrl.setlight[0]++;if(sys_ctrl.setlight[0]>99)sys_ctrl.setlight[0]=0;break;case 5://光线上限sys_ctrl.setlight[1]++;if(sys_ctrl.setlight[1]>99)sys_ctrl.setlight[1]=0;break;}	}//减else if(key==KEY2_PRESS){switch(sys_ctrl.mode){case 1://时sys_ctrl.settime[0]--;if(sys_ctrl.settime[0]<0)sys_ctrl.settime[0]=23;break;case 2://分sys_ctrl.settime[1]--;if(sys_ctrl.settime[1]<0)sys_ctrl.settime[1]=59;break;case 3://秒sys_ctrl.settime[2]--;if(sys_ctrl.settime[2]<0)sys_ctrl.settime[2]=59;break;case 4://光线下限sys_ctrl.setlight[0]--;if(sys_ctrl.setlight[0]<0)sys_ctrl.setlight[0]=99;break;case 5://光线上限sys_ctrl.setlight[1]--;if(sys_ctrl.setlight[1]<0)sys_ctrl.setlight[1]=99;break;}	}//确定else if(key==KEY4_PRESS){if(sys_ctrl.mode!=0){sys_ctrl.mode=0;oneflag=0;sys_open_show();//系统开机界面显示}}		
}//系统功能控制
void sys_fun_ctrl(void)
{//如果是深夜,且时间到达设定时间if(sys_ctrl.hour==sys_ctrl.settime[0]){if(sys_ctrl.min==sys_ctrl.settime[1]){if(sys_ctrl.sec==sys_ctrl.settime[2]){sys_ctrl.ctrl_flag=1;//转为手动	}	}		}if(sys_ctrl.ctrl_flag==1){//如果到达白天,转为自动if(sys_ctrl.hour==6){if(sys_ctrl.min==0){if(sys_ctrl.sec==0){sys_ctrl.ctrl_flag=0;//转为自动	}	}		}	}	//自动控制模式if(sys_ctrl.ctrl_flag==0){//正常模式if(sys_ctrl.mode==0){//光线大于上限阈值,白天if(sys_ctrl.dayflag==0){LED=1;//关闭电灯		}//光线小于下限值,晚上else {//如果感应到有人if(sys_ctrl.man==1){delay_ms(100);if(sys_ctrl.man==1){sys_ctrl.onoff=1;LED=0;//打开电灯	}}//如果人离开else{//电灯已打开if(sys_ctrl.onoff==1){delay_ms(2000);LED=1;//关闭电灯sys_ctrl.onoff=0;	}		}	}}	}//手动控制模式else{//如果手动按下遥控或机械开关if(SWITCH==0){LED=0;//打开电灯sys_ctrl.onoff=1;		}else{ 	LED=1;//关闭电灯sys_ctrl.onoff=0;	}	}		
}

三、实验现象

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

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

联系作者

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

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

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

相关文章

成为一个年薪30W+的FPGA工程师是一种什么体验?

FPGA&#xff08;Field-Programmable Gate Array&#xff09;是现场可编程门阵列&#xff0c;通过硬件描述语言设计电路&#xff0c;可实现并行计算&#xff0c;广泛应用于通信、人工智能、工业控制等领域。FPGA工程师的工作包括RTL设计、仿真验证、时序分析等。尽管并非所有公…

ZooKeeper Java客户端与分布式应用实战

1. ZooKeeper Java客户端实战 ZooKeeper应用开发主要通过Java客户端API连接和操作ZooKeeper集群&#xff0c;有官方和第三方两种客户端选择。 1.1 ZooKeeper原生Java客户端 依赖引入 <dependency><groupId>org.apache.zookeeper</groupId><artifactId>…

0303 【软考高项】项目管理概述 - 组织系统(项目型组织、职能型组织、矩阵型组织)

0303 【软考高项】项目管理概述 - 组织系统&#xff08;项目型组织、职能型组织、矩阵型组织&#xff09; 目录0303 【软考高项】项目管理概述 - 组织系统&#xff08;项目型组织、职能型组织、矩阵型组织&#xff09;一、基本概念二、职能型组织二、项目型组织三、矩阵型组织3…

计算机视觉与模式识别前沿一览:2025年8月arXiv 热点研究趋势解析

本推文分析了arXiv中Computer Vision and Patteren Recognition(计算机视觉与模式识别)领域2025年8月发布的近50篇论文的研究热点&#xff0c;旨在帮助读者快速了解近期领域内的前沿技术与研究方向。arXiv是全球最具影响力的开放电子预印本平台之一&#xff0c;由美国国家科学基…

vim复制本地到linux服务器上,换行缩进过大,不对的问题

所搜的试了:setlocal shiftwidth? :setlocal tabstop? :setlocal expandtab? :setlocal softtabstop?" 设置为 4 个空格缩进 :setlocal shiftwidth4" 通常你会希望 tabstop 和 softtabstop 也保持一致 :setlocal tabstop4 :setlocal softtabstop4尝试完不起作用&…

【小程序】微信小程序九宫格抽奖动画(完整版)

这是一个微信小程序九宫格抽奖页面的完整代码&#xff0c;包括 WXML、WXSS、JS 和 JSON。 效果 九宫格抽奖功能说明&#xff1a; 静态页面布局&#xff1a; 3x3 九宫格&#xff0c;中间是“立即抽奖”按钮&#xff0c;周围是奖品金额。抽奖动画&#xff1a; 点击“立即抽奖”…

java类冲突

一、为什么会发生类冲突&#xff1f; 在 Java 的类加载机制中&#xff0c;类的唯一性是由“类加载器类的全限定名”共同决定的。当你的项目依赖了多个 jar 包&#xff0c;这些 jar 包里有同名的类&#xff08;包名和类名完全一样&#xff09;&#xff0c;但实现却不同。类加载器…

GIT客户端配置支持中文

环境&#xff1a;windows10、Git-2.42.0.2-64-bit.exe1. 问题描述客户端安装后&#xff0c;默认是不支持中文显示的&#xff0c;中文名的文件显示乱码&#xff0c;提交时打的标签内容也不支持中文显示。2. 解决新建Git全局配置文件&#xff0c;文件名为.gitconfig&#xff0c;内…

Teable vs NocoDB 开源、在线协同 多维表格大PK

文章目录 Teable 简介 特性 docker-compose部署 功能截图 NocoDB 简介 docker-compose部署 功能截图 总结 Teable 简介 Teable 是一款企业级高性能多维表格解决方案,通过无代码方式快速构建业务管理系统,支持私有部署和精细权限管理。 官方文档 特性 🚀 卓越性能 轻松处…

SQL专家云能做哪些事儿?

背景数据库是信息化的基石&#xff0c;支撑着整个业务系统&#xff0c;发挥着非常重要的作用&#xff0c;被喻为“IT的心脏”。因此&#xff0c;让数据库安全、稳定、高效地运行已经成为IT管理者必须要面对的问题。但是很多组织没有专业的DBA&#xff0c;数据库运维面临着极大的…

Python 高效实现 Word 转 PDF:告别 Office 依赖

在工作中&#xff0c;经常会遇到需要把 Word 文档转换成 PDF 的情况。比如生成报表、分发文档、或者做归档保存&#xff0c;PDF 格式在排版和跨平台显示上更稳定。传统的做法往往依赖 Microsoft Office 或 LibreOffice 等软件来完成转换&#xff0c;但在自动化环境&#xff08;…

SQL优化简单思路

1. 背景 在实际生产中&#xff0c;因为SQL较慢、SQL关联不合理、不了解索引的性质、不熟悉mysql执行计划分析&#xff0c;可能会出现一些生产事故&#xff0c;本文会简单说明SQL通常的优化分析思路。 基本的优化原则&#xff1a; 先优化SQL再优化mysql server最后优化硬件 2. 优…

软考 系统架构设计师系列知识点之杂项集萃(144)

接前一篇文章:软考 系统架构设计师系列知识点之杂项集萃(143) 第268题 甲、乙、丙、丁4人加工A、B、C、D四种工件所需工时如下表所示。指派每人加工一种工件,四人加工四种工件其总工时最短的最优方案中,工件B应由()加工。 A B C D 甲

P1168 中位数

题目描述给定一个长度为 N 的非负整数序列 A&#xff0c;对于前奇数项求中位数。输入格式第一行一个正整数 N。第二行 N 个正整数 A1…N​。输出格式共 ⌊2N1​⌋ 行&#xff0c;第 i 行为 A1…2i−1​ 的中位数。输入输出样例输入 #1复制7 1 3 5 7 9 11 6输出 #11 3 5 6输入 #…

【CE】图形化CE游戏教程通关手册

【CE】图形化CE游戏教程通关手册 文章目录【CE】图形化CE游戏教程通关手册导读需求1️⃣ 第一关提示操作总结2️⃣ 第二关&#xff08;代码共享&#xff09;提示操作验证3️⃣ 第三关提示提示总结导读 需求 除了Tutorial-x86_64.exe教程外&#xff0c;CE还提供了图形化教程gtu…

leetcode 2785. 将字符串中的元音字母排序 中等

给你一个下标从 0 开始的字符串 s &#xff0c;将 s 中的元素重新 排列 得到新的字符串 t &#xff0c;它满足&#xff1a;所有辅音字母都在原来的位置上。更正式的&#xff0c;如果满足 0 < i < s.length 的下标 i 处的 s[i] 是个辅音字母&#xff0c;那么 t[i] s[i] 。…

支付子系统架构及常见问题

支付流程对于支付系统来说&#xff0c;它最重要的其实是安全&#xff0c;所以整个支付流程采用秘钥加签的方式进行操作&#xff0c;一共四对秘钥&#xff0c;以支付宝在线支付为例子&#xff0c;首先通过RSA2算法生成商户公钥以及商户私钥&#xff0c;同时支付宝平台会提供支付…

内存传输速率MT/s

1 0 0 0 0 0 0 0 0 010 9 8 7 6 5 4 3 2 1十 亿 千 百 十 万 千 百 十 个亿 万 万 万传输速率 …

.env文件的作用和使用方法

目录 什么是 .env 文件&#xff1f; 为什么要使用 .env 文件&#xff1f;&#xff08;好处&#xff09; 如何使用 .env 文件&#xff1f; 通用步骤&#xff1a; 具体技术栈中的实现&#xff1a; 最佳实践和注意事项 总结 什么是 .env 文件&#xff1f; .env 文件&#x…

深度拆解 Python 装饰器参数传递:从装饰器生效到参数转交的每一步

在 Python 装饰器的学习中&#xff0c;“被装饰函数的参数如何传递到装饰器内层函数”是一个高频疑问点。很多开发者能写出装饰器的基本结构&#xff0c;却对参数传递的底层逻辑一知半解。本文将以一段具体代码为例&#xff0c;把参数传递过程拆成“装饰器生效→调用触发→参数…