基于单片机的教室智能照明和人数统计系统功能概述: 1.用51单片机AT89C52、时钟芯片DS1302、液晶屏LCD1602、光敏电阻、红外对管、设计一个教室智能照明控制系统; 2.使用4个LED灯模拟教室的照明灯,在符合条件开启时,人数小于10人亮一个灯,10-20人亮二个灯,20-30人亮三个灯,大于30人则全亮四个灯; 3.教室使用两个红外对管来检测是否有人进入并进行人数统计,人数可以统计到二位数99人,并实时将人数显示到液晶屏LCD上,液晶屏同时显示实时日期/时间/星期; 4.利用光敏电阻检测教室的光线强弱; 5.系统分自动/手动模式,可以通过按键切换模式,并有LED指示当前所在模式,在自动模式下,可以设定定时时间段,在定时时间段内,当教室有人(人数大于0)的情况下,如果光线暗弱则自动打开照明灯,照明灯点亮个数根据人数而定,不在定时时间段或者教室无人的情况下,关闭所有照明灯,另外在手动模式下,可以通过手动开关控制照明灯的亮灭,人数统计部分仍然生效。 代码有注释!!! 包含: 仿真、程序、原理图、PCB、报告【仅供参考】
在现代智能化的浪潮下,教室的智能管理系统也备受关注。今天咱们就来聊聊基于 51 单片机 AT89C52 的教室智能照明和人数统计系统,这个系统融合了时钟芯片 DS1302、液晶屏 LCD1602、光敏电阻以及红外对管等有趣的硬件,实现了一系列超实用的功能。
一、系统功能总览
- 硬件搭建:选用 51 单片机 AT89C52 作为核心,搭配时钟芯片 DS1302 来获取精准时间,用液晶屏 LCD1602 显示关键信息,光敏电阻感知光线,红外对管负责检测人员进出。
- 照明智能控制:用 4 个 LED 灯模拟教室照明。当满足开启条件时,人数不同,亮灯数量不同。小于 10 人亮 1 个灯,10 - 20 人亮 2 个灯,20 - 30 人亮 3 个灯,大于 30 人 4 个灯全亮。
- 人数统计与显示:利用两个红外对管检测人员进出,能统计到 99 人,并且实时在液晶屏上显示人数,同时还显示实时日期、时间和星期。
- 光线检测:通过光敏电阻检测教室光线强弱,为智能照明提供依据。
- 双模式切换:系统分为自动和手动模式,可通过按键切换,还有 LED 指示当前模式。自动模式下能设定定时时间段,在此期间若教室有人且光线暗就自动开灯,灯亮数量依人数而定;不在定时段或无人则关灯。手动模式下,可手动控制灯的亮灭,人数统计功能依旧生效。
二、代码部分解析
下面咱们看部分关键代码,以 C 语言为例:
#include <reg51.h> #include <intrins.h> #include <ds1302.h> #include <lcd1602.h> sbit mode_key = P3^0; // 模式切换按键 sbit auto_led = P1^0; // 自动模式指示灯 sbit manual_led = P1^1; // 手动模式指示灯 sbit light1 = P2^0; // 第一个灯 sbit light2 = P2^1; // 第二个灯 sbit light3 = P2^2; // 第三个灯 sbit light4 = P2^3; // 第四个灯 sbit ir_in = P3^1; // 红外对管输入 sbit ir_out = P3^2; // 红外对管输出 unsigned char count = 0; // 人数统计变量 bit auto_mode = 1; // 初始为自动模式 unsigned char time[7]; // 存储时间信息 unsigned char date[3]; // 存储日期信息 unsigned char week[1]; // 存储星期信息 unsigned char light_count = 0; // 亮灯数量 // 红外对管中断服务函数,用于人数统计 void ir_interrupt() interrupt 0 { if (ir_in == 0) { _nop_(); _nop_(); // 消抖 if (ir_in == 0) { while (!ir_out); // 等待红外对管输出恢复 count++; // 人数加一 if (count > 99) { count = 99; // 限制人数最大值为 99 } } } } // 根据人数控制亮灯数量 void control_light() { if (count < 10) { light_count = 1; } else if (count < 20) { light_count = 2; } else if (count < 30) { light_count = 3; } else { light_count = 4; } switch (light_count) { case 1: light1 = 1; light2 = 0; light3 = 0; light4 = 0; break; case 2: light1 = 1; light2 = 1; light3 = 0; light4 = 0; break; case 3: light1 = 1; light2 = 1; light3 = 1; light4 = 0; break; case 4: light1 = 1; light2 = 1; light3 = 1; light4 = 1; break; } } void main() { lcd_init(); // 初始化液晶屏 ds1302_init(); // 初始化 DS1302 时钟芯片 EA = 1; // 开总中断 EX0 = 1; // 开外部中断 0,用于红外对管检测 IT0 = 1; // 外部中断 0 下降沿触发 while (1) { if (mode_key == 0) { // 检测模式切换按键 _nop_(); _nop_(); // 消抖 if (mode_key == 0) { auto_mode = ~auto_mode; // 切换模式 while (!mode_key); // 等待按键释放 if (auto_mode) { auto_led = 1; manual_led = 0; // 自动模式指示灯亮 } else { auto_led = 0; manual_led = 1; // 手动模式指示灯亮 } } } if (auto_mode) { ds1302_read_time(time); // 读取时间 ds1302_read_date(date); // 读取日期 ds1302_read_week(week); // 读取星期 // 这里假设还有读取光敏电阻值的函数 get_light_value() if (get_light_value() < threshold && count > 0) { control_light(); // 自动模式下,光线暗且有人时控制灯 } else { light1 = 0; light2 = 0; light3 = 0; light4 = 0; // 关闭所有灯 } } else { // 手动模式下,通过按键或其他方式控制灯,这里简单示意 if (manual_control_signal) { light1 = 1; light2 = 1; light3 = 1; light4 = 1; // 手动开灯示例 } else { light1 = 0; light2 = 0; light3 = 0; light4 = 0; // 手动关灯示例 } } // 显示人数、日期、时间和星期到液晶屏 lcd_string(0, 0, "Count: "); lcd_number(6, 0, count); lcd_string(11, 0, date); lcd_string(14, 0, time); lcd_string(0, 1, "Week: "); lcd_number(6, 1, week[0]); } }这段代码实现了系统的基本逻辑。在中断服务函数irinterrupt中,通过红外对管检测人员进出并统计人数。controllight函数根据人数控制亮灯数量。main函数里,初始化各个模块后,不断检测模式切换按键,在不同模式下执行相应的操作,并且实时更新并显示信息到液晶屏。
三、仿真、原理图、PCB 及报告
- 仿真:可以使用 Proteus 软件进行仿真,搭建电路连接,模拟实际运行情况,在软件里调整参数和测试功能,提前发现问题并解决。比如,验证红外对管检测人数是否准确,液晶屏显示是否正常,模式切换是否有效等。
- 原理图:绘制原理图是设计的重要一步,清晰展示各个硬件模块之间的连接关系,像单片机与时钟芯片、液晶屏、光敏电阻、红外对管以及按键、LED 灯等的连接,确保电路设计合理,为后续 PCB 设计打下基础。
- PCB:基于原理图设计 PCB,考虑布线规则、电气性能、散热等因素,将各个元件合理布局,制作出实际可用的印刷电路板,让系统有了硬件载体。
- 报告:撰写报告详细记录系统设计的整个过程,从需求分析、方案论证,到硬件设计、软件设计,再到测试结果与总结,方便他人理解和借鉴,也是对自己设计过程的一个梳理。
通过这个基于单片机的教室智能照明和人数统计系统,不仅能提升教室管理的智能化水平,还能在实际应用中实现节能与便捷的双重目标。感兴趣的小伙伴不妨自己动手尝试一下,探索其中的乐趣与奥秘!
基于单片机的教室智能照明和人数统计系统功能概述: 1.用51单片机AT89C52、时钟芯片DS1302、液晶屏LCD1602、光敏电阻、红外对管、设计一个教室智能照明控制系统; 2.使用4个LED灯模拟教室的照明灯,在符合条件开启时,人数小于10人亮一个灯,10-20人亮二个灯,20-30人亮三个灯,大于30人则全亮四个灯; 3.教室使用两个红外对管来检测是否有人进入并进行人数统计,人数可以统计到二位数99人,并实时将人数显示到液晶屏LCD上,液晶屏同时显示实时日期/时间/星期; 4.利用光敏电阻检测教室的光线强弱; 5.系统分自动/手动模式,可以通过按键切换模式,并有LED指示当前所在模式,在自动模式下,可以设定定时时间段,在定时时间段内,当教室有人(人数大于0)的情况下,如果光线暗弱则自动打开照明灯,照明灯点亮个数根据人数而定,不在定时时间段或者教室无人的情况下,关闭所有照明灯,另外在手动模式下,可以通过手动开关控制照明灯的亮灭,人数统计部分仍然生效。 代码有注释!!! 包含: 仿真、程序、原理图、PCB、报告【仅供参考】