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

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

项目说明

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

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

开源链接见文章结尾。

V1.1 (2025_07_05更新)

更新内容

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

LCD显示优化

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

void LcdWriteCom(uint8_t com)	  //写入命令
{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;
}void LcdWriteData(uint8_t dat)			//写入数据
{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. 手动模式下,按键可以直接选择点亮灯还是关闭灯。

硬件设计

image

电路使用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、自动模式下,检测到人和光照强度大于一定值。

image

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

image

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

image

项目开源链接

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

http://www.jsqmd.com/news/480501/

相关文章:

  • 化妆品源头厂家广州悟真产品价格怎样值得选吗 - 工业推荐榜
  • 聊聊那些超实用的切割设备程序
  • Python-flask大学生课表查询和上课提醒系统小程序
  • 聊聊2026年厦门实力强的砖烟囱加固品牌企业,怎么选择? - myqiye
  • 2026年靠谱的酒店宴会桌椅制造商排名,商务酒店宴会桌椅深度剖析 - myqiye
  • 2026回收乙醇市场,哪些源头厂家口碑佳?一文揭晓,回收异丙醇/乙醇/回收废酒精/酒精/回收酒精,回收乙醇供应商排行 - 品牌推荐师
  • Python-flask家庭食谱菜谱食材网上商城系统小程序ko137-vue
  • 第0010课 - 控制速度
  • 聊聊化妆品源头厂家推荐,广州悟真费用多少钱? - 工业品牌热点
  • 第0011课 - 把画坦克也装进魔法盒子
  • 2026年羊绒衫厂家权威榜单发布:十大供应商综合实力深度排位赛 - 品牌推荐
  • Python-flask校园论坛留言系统 微信小程序
  • 第0012课 - 让坦克可以转向
  • MySQL不推荐使用UUID等字符串做主键
  • Python-flask讲师学习视频课程知识题库小程序
  • 19712数字接龙
  • uniapp-vue-微信小程序Python-flask基于微信小程序的摄影作品展览app
  • 第0013课 - 把键盘控制也装进魔法盒子
  • Day38日期对象的使用
  • 大型有机肥生产线服务商费用多少钱,河南建丰价格合理吗? - mypinpai
  • 【笔试真题】- 米哈游-2026.03.14
  • 分析2026年全自动有机肥生产线生产商哪家好,费用情况大揭秘 - 工业设备
  • RV1126 摄像头图像精度BSP调试全景分析
  • 聊聊2026年值得推荐的信息发布系统供应商,哪家性价比高 - 工业推荐榜
  • 剖析RV1126网络数据调试全流程
  • 2 行动与结果:别用“苦劳”感动自己
  • 全家健身不用凑|全家可用的家庭健身器材,老少皆宜,居家运动更省心 - 冠顶工业设备
  • 影墨·今颜小红书模型与卷积神经网络结合应用:图文内容一致性校验
  • 【雷达成像】太赫兹检测的缺陷特征提取及成像方法的设计与实现【含Matlab源码 15169期】
  • 盒马鲜生礼品卡这样回收,教你实现最高收益! - 团团收购物卡回收