当前位置: 首页 > 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、手动模式下,按键控制开关,人体不起作用
在这里插入图片描述

相关文章:

  • 栈应用:括号匹配
  • 论文阅读:2025 arxiv Aligning to What? Limits to RLHF Based Alignment
  • Java大师成长计划之第4天:Java中的泛型
  • Yarn 安装与使用教程
  • 自动化测试方法有哪些?
  • 【软考-架构】14、软件可靠性基础
  • 深入解析 ASP.NET Core 中的 ResourceFilter
  • 从像素到实例:揭示图像分割如何改变视觉世界
  • 线程池单例模式
  • 【设计模式区别】装饰器模式和适配器模式区别
  • 单例设计模式之懒汉式以及线程安全问题
  • 从循环角度分析逐位分离法
  • 【人工智能之大模型】详述大模型中流水线并行(Pipeline Parallelism)的​GPipe推理框架?
  • 如何选择合适的探针台
  • C#中wpf程序中的x名空间详解
  • 微信小程序 template 模版详解
  • 机器学习之二:指导式学习
  • 精益数据分析(27/126):剖析用户价值与商业模式拼图
  • 有源晶振与无源晶振详解:区别、应用与选型指南
  • 电子电器架构 --- 乘用车电气/电子架构开发的关键挑战与应对策略
  • 释新闻|SEVIS是什么?在美留学生遭身份中止意味什么?
  • 人民日报读者点题:规范涉企执法,怎样防止问题反弹、提振企业信心?
  • 经济日报金观平:统筹国内经济工作和国际经贸斗争
  • 人民日报:广东全力推动外贸稳量提质
  • 讲座|现代女性在面对生育、事业与家庭之间的复杂抉择
  • 第152次中老缅泰湄公河联合巡逻执法行动圆满结束