当前位置: 首页 > news >正文

【开源】基于51单片机的简易智能楼道照明设计

项目说明

该设计是一个简易的基于51单片机的智能楼道照明设计,功能说明:

  1. 按键按下在自动和手动模式中切换。
  2. 自动模式下,检测到人体,并且当前光照阈值低于设定阈值,灯点亮,如果检测不到人体,楼道灯熄灭。
  3. 手动模式下,按键可以直接选择点亮灯还是关闭灯。

设计环境

仿真软件版本:Proteus8.9
下载链接:
链接:https://pan.baidu.com/s/1kkgFmRBlh268m_ESl83weg 提取码:9bde 复制这段内容后打开百度网盘手机App,操作更方便哦

工程下载

代码和仿真放在了CSDN的下载里,并未设置积分,应该可以直接下载。只想加点下载量,好像有下载量才能升级。
下载链接
如果下载开始收积分了,可以关注微信公众号少年潜行,回复关键字A001楼道照明,获取网盘链接。不会有付钱解压

📖 欢迎交流 如果代码对你有帮助,希望可以帮我点个赞👍和收藏

硬件设计

在这里插入图片描述
电路使用LCD1602来显示当前的执行状态,使用光敏电阻和普通电阻分压,然后使用PCF8591读取ADC的电压值,使用I2C通信获取和控制PCF8591。按键0用来切换现在是自动模式还是手动模式,按键1用来在手动模式下开关灯。使用一个SWITCH开关模拟人体传感器。

软件设计

软件的整体设计思路是采用一个5MS定时器来做控制和信号读取的任务,包含按键扫描,根据按键值控制当前的状态,以及ADC的读取,根据ADC值和人体传感器的值确定当前开关灯的状态,在While循环中不断地刷新显示屏的值。

#include "main.h"
#include "delay.h"
#include "i2c.h"
#include "pcf8591.h"
#include "LCD1602.h"
#include "key.h"// 变量定义
sbit LED = P2^0;          // 楼道灯
sbit MAN = P2^1;          // 人体红外传感器 有人的时候信号为0
uint8_t  key_value = 0;   // 按键按下的值
uint8_t  adcx      = 0;   // 当前的ADC检测到的值
uint8_t  run_mode  = 0;   // 运行模式 0 :自动模式  1:手动模式// 函数声明
void Timer0_Init(void);		//5毫秒@11.0592MHzvoid main()
{IIC_init();LcdInit();Timer0_Init();EA = 1;                 //打开所有中断while(1){LcdShowStr(0,0,"RUN Mode:");LcdShowNumInt(9,0,run_mode,1,0);delay_ms(5);}
}// 5ms定时器中断,5MS执行一次
void Timer0Routine(void) interrupt 1
{static int count = 0;// 5ms 定时值重置TL0 = 0x00;				//设置定时初始值TH0 = 0xEE;				//设置定时初始值// 按键扫描并获得值key_value = KeyScan();// 按键0按下切换工作模式if(key_value == KEY0_PRES){if(run_mode == 0) // 假如是自动模式,就切换到手动模式run_mode = 1;else if(run_mode == 1) // 假如是手动模式,就切换到自动模式run_mode = 0;}// 按键1按下,如果在手动模式就开关灯else if(key_value == KEY1_PRES){if(run_mode == 1){LED = !LED;}}// 如果在自动模式,读取光敏电阻分压的值,然后根据读到得阈值和是否检测到人开关灯if(run_mode == 0){// 读取光敏电阻和电阻分压值adcx = pcf_analog_read(0);if(adcx > 128 && MAN == 0)LED = 0;elseLED = 1;}
}void Timer0_Init(void)		//5毫秒@11.0592MHz
{TMOD &= 0xF0;			//设置定时器模式TMOD |= 0x01;			//设置定时器模式TL0 = 0x00;				//设置定时初始值TH0 = 0xEE;				//设置定时初始值TF0 = 0;				//清除TF0标志TR0 = 1;				//定时器0开始计时ET0 = 1;                //打开定时器中断
}

调试效果

1、自动模式下,检测到人和光照强度大于一定值。
在这里插入图片描述
2、自动模式下,检测到人和光照强度小于一定值。
在这里插入图片描述
3、手动模式下,按键控制开关,人体不起作用
在这里插入图片描述

http://www.xdnf.cn/news/159499.html

相关文章:

  • C语言-函数练习1
  • arcpy列表函数的应用
  • 软件测评中心如何保障软件质量与安全性?
  • autodl(linux)环境下载git-lfs等工具及使用
  • .NET8 依赖注入组件
  • Nacos 集群节点是如何管理的?节点加入和退出的流程是怎样的?
  • 免费送源码:Java+ssm+HTML 三分糖——甜品店网站设计与实现 计算机毕业设计原创定制
  • 2025春季NC:3.1TheTrapeziumRule
  • 哈希表的线性探测C语言实现
  • 嵌入式学习笔记 - HAL_xxx_MspInit(xxx);函数
  • 生成式AI全栈入侵:当GPT-4开始自动编写你的Next.js路由时,人类开发者该如何重新定义存在价值?
  • 梯度下降法
  • MySQL 调优
  • 使用 IntersectionObserver 实现懒加载提升网页性能的高效方案
  • Make + OpenOCD 完成STM32构建+烧录
  • [论文解析]Mip-Splatting: Alias-free 3D Gaussian Splatting
  • 探索 AI 在文化遗产保护中的新使命:数字化修复与传承
  • Unity中文件上传以及下载,获取下载文件大小的解决方案
  • 1--Python基础课程实验指导书
  • Postman脚本处理各种数据的变量
  • 常见的六种大语言模型微调框架
  • Go设计模式-观察者模式
  • html初识
  • 求解,如何控制三相无刷电机?欢迎到访评论
  • 【家政平台开发(81)】让家政服务“绿”起来:平台绿色环保服务推广指南
  • 【Castle-X机器人】五、物联网模块配置与调试
  • 【源码+文档+调试讲解】基于springboot的健身房管理系统
  • 怎样理解ceph?
  • vue3获取麦克风权限通过websocket进行通话
  • 【AI提示词】财务顾问