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

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

项目说明

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

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

开源链接见文章结尾。

V1.1 (2025_07_05更新)

更新内容

1、在V1.0基础上优化了LCD显示延时,使得LCD的显示更加迅速。
2、如果有问题,大家可以继续提出。大家就不要去下资源绑定里面的内容了,那个不能实时更新。

LCD显示优化

在实际仿真使用的时候LCD刷新会比较慢,使用实物的时候可以用原来的代码,仿真的时候可以把延时注释了,使用下面的函数,开头要加个1ms的延时,因为没有忙检测。

voidLcdWriteCom(uint8_tcom)//写入命令{Lcd1602_Delay1ms(1);LCD1602_E=0;//使能LCD1602_RS=0;//选择发送命令LCD1602_RW=0;//选择写入LCD1602_DATAPINS=com;//放入命令// Lcd1602_Delay1ms(1); //等待数据稳定LCD1602_E=1;//写入时序// Lcd1602_Delay1ms(5); //保持时间LCD1602_E=0;}voidLcdWriteData(uint8_tdat)//写入数据{Lcd1602_Delay1ms(1);LCD1602_E=0;//使能清零LCD1602_RS=1;//选择输入数据LCD1602_RW=0;//选择写入LCD1602_DATAPINS=dat;//写入数据// Lcd1602_Delay1ms(1);LCD1602_E=1;//写入时序// Lcd1602_Delay1ms(5); //保持时间LCD1602_E=0;}

V1.0 基础内容

设计说明

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

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

硬件设计


电路使用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;// 人体红外传感器 有人的时候信号为0uint8_tkey_value=0;// 按键按下的值uint8_tadcx=0;// 当前的ADC检测到的值uint8_trun_mode=0;// 运行模式 0 :自动模式 1:手动模式// 函数声明voidTimer0_Init(void);//5毫秒@11.0592MHzvoidmain(){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执行一次voidTimer0Routine(void)interrupt1{staticintcount=0;// 5ms 定时值重置TL0=0x00;//设置定时初始值TH0=0xEE;//设置定时初始值// 按键扫描并获得值key_value=KeyScan();// 按键0按下切换工作模式if(key_value==KEY0_PRES){if(run_mode==0)// 假如是自动模式,就切换到手动模式run_mode=1;elseif(run_mode==1)// 假如是手动模式,就切换到自动模式run_mode=0;}// 按键1按下,如果在手动模式就开关灯elseif(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;}}voidTimer0_Init(void)//5毫秒@11.0592MHz{TMOD&=0xF0;//设置定时器模式TMOD|=0x01;//设置定时器模式TL0=0x00;//设置定时初始值TH0=0xEE;//设置定时初始值TF0=0;//清除TF0标志TR0=1;//定时器0开始计时ET0=1;//打开定时器中断}

调试效果

1、自动模式下,检测到人和光照强度大于一定值。

2、自动模式下,检测到人和光照强度小于一定值。

3、手动模式下,按键控制开关,人体不起作用

项目开源链接

关注下面推广链接回复A001楼道照明在对应文中获得网盘链接免费开源。有问题请VX公众号后台回复,博客不一定能及时查看。

http://www.cnnetsun.cn/news/1308638.html

相关文章:

  • 贡献者必读:如何为Its Hover图标库提交新的动画图标
  • 解决Meta Llama模型转换中的符号链接错误:3种方案让模型部署提速90%
  • Docker-Android环境变量终极指南:解锁容器化Android的全部潜能
  • RequireJS终极指南:如何构建高性能前端模块加载系统
  • YAPF性能优化终极指南:让大型Python项目格式化速度提升300%
  • Druid数据本地化终极指南:10个存储访问优化技巧
  • 终极指南:掌握dio指数退避策略,让网络请求永不失败
  • Sorcar实时更新功能详解:参数调整即时反馈的秘密
  • 掌握Hasura Backend Plus存储规则:自定义S3访问权限的实用技巧
  • blender_mmd_tools终极指南:轻松导入MikuMikuDance模型与动作
  • AICore游戏AI开发库:从零构建智能游戏角色的终极指南
  • SpringBoot 脚手架搭建指南:从零构建企业级开发框架
  • Awesome Go:终极Go语言资源宝库
  • Ostrakon-VL-8B入门必看:零售数字化转型中首个可私有部署的领域MLLM
  • Alpamayo-R1-10B作品集:不同天气条件(晴/雨/夜)下视觉鲁棒性对比
  • Qwen3-0.6B-FP8效果展示:复杂逻辑题的CoT分步推理折叠演示
  • HybridPageKit vs 传统方案:为什么它能成为新闻类App的首选框架?
  • Zed‘s community论坛功能深度探索:高效交流与问题解决的终极技巧
  • Home Assistant Glow快速上手:3步完成固件安装与Home Assistant集成
  • 原生开发的利与弊:Vanilla-Todo项目经验与最佳实践总结
  • IPED命令行帮助文档生成:自动生成帮助文档的例子
  • RAG Search API性能优化技巧:提升检索速度与结果质量的10个实用方法
  • 深入理解batt工作原理:守护进程如何智能管理电池充电
  • django-split-settings源码解析:include函数的工作原理与实现细节
  • AspNetAuthorizationWorkshop实战:基于角色的访问控制(RBAC)实现指南
  • DriverStore Explorer终极清理指南:如何快速释放Windows磁盘空间
  • 如何快速掌握Lean数学库mathlib:从零基础到熟练使用的完整指南
  • 如何快速掌握Arknights-Mower:明日方舟自动化助手完整指南
  • 终极宝可梦数据自动化神器:一键生成100%合法宝可梦的完整解决方案
  • Citra模拟器:解锁3DS游戏新维度的技术革命