10081-大学教室智能照明控制系统设计(仿真+原理图+PCB+源代码工程+详细介绍说明书+PPT)
功能描述:
1、用4个 LED 灯模拟教室的照明灯,人数小于10人亮一个灯,10-20人亮二个灯,20-40人亮三个灯,大于40人则全亮4个灯:
2、教室使用两个红外对管来检测是否有人进入并进行人数统计,人数可以统计到二位数99人,并实时将人数显示到液晶屏 LCD 上,液晶屏同时显示实时日期/时间
3、利用光敏电阻检测教室的光线强弱:
4、系统分自动/手动模式,可以通过按键切换模式,并有 LED 指示当前所在模式:
5、在自动模式下,可以设定定时时间段,在定时时间段内,当教室有人(人数大于0)的情况下,如果光线暗则自动打开照明灯,照明灯点亮个数根据人数而定:6、非定时时间段或者教室无人的情况下,关闭所有照明灯:
7、在手动模式下,可以通过手动开关控制照明灯的亮灭,人数统计部分仍然生效。
资料摘要:
智能化设备目前应用比较广泛,发展也非常迅速,使得人们开始对智能化设备进行使用。大学作为高等教育的学堂引入智能化设备,让学生能够更加方便的学习。本文针对大学教室智能照明控制系统设计出一款智能化照明设备。
本次系统设计一款智能化照明控制系统,可以通过算法判断,当光线暗的时候,自动打开照明灯当光线。强的时候降低照明灯可通过手动模式与制动模式进行切换灯光打开方式。选择使用51系列单片机作为主控制芯片,LED作为被控制器件。LCD液晶显示器展示教室的时间与人数统计。使用光敏传感器实时监测教室内部的环境光。人体感应传感器监测教室内部学生的数量。按键可实现人机交互实现手动控制灯光开或者关。
本文通过对智能照明控制系统的历史研究方向分析、设计,最后通过仿真软件来对整个系统进行测试。完成大学教室智能照明控制系统设计。
资料包含:
1、详细设计说明书-13816字
2、仿真工程文件
3、原理图工程文件
4、源代码工程文件
5、元器件清单
6、讲解PPT-13页
7、PCB工程文件
8、任务书
9、操作说明
10、仿真截图
11、实物制作过程图片
12、物料清单
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar time_data[7];
uchar code write_add[7]={0x8c,0x8a,0x88,0x86,0x84,0x82,0x80}; //数据的地址
uchar code read_add[7]={0x8d,0x8b,0x89,0x87,0x85,0x83,0x81};
uchar code table1[]="Count|2000/00/00";
uchar code table2[]=" 00 |00:00:00 0";
uchar code table3[]=" "; //清屏内容
uchar code table4[]=" Set Real Time ";
uchar code table5[]=" Set Open Time ";
uchar code table6[]=" Start Time: ";
uchar code table7[]=" 00:00:00 ";
uchar code table8[]=" End Time: ";
uchar code table9[]="Date: 2000/00/00";
uchar code table0[]="Time: 00:00:00 0";
bit Adjust; //调节标志位,=1表示进入调节模式,=0是正常模式
bit Auto_flg; //自动模式标志位,=1表示手动模式,=0是自动模式
sbit rs=P1^0; //LCD1602
sbit rw=P1^1; //LCD1602
sbit e=P1^2; //LCD1602
sbit sck=P2^5; //时钟端口
sbit io=P2^6; //时钟端口
sbit rst=P2^7; //时钟端口
sbit SELT =P1^6; //设置键
sbit ENTER=P1^7; //确认键
sbit UP =P3^0; //加键
sbit DOWN =P3^1; //减键
sbit MODE =P3^2; //切换按键接口
sbit SWITCH=P3^3; //手动开关
sbit AUTO_LED=P1^3; //自动模式灯接口
sbit HAND_LED=P1^5; //手动灯接口
sbit LAMP1=P3^4; //灯接口
sbit LAMP2=P3^5; //灯接口
sbit LAMP3=P3^6; //灯接口
sbit LAMP4=P3^7; //灯接口
sbit LIGHT1=P2^0; //光线检测端口
sbit IN1=P2^2;
sbit OUT1=P2^1;
uchar Select_num; //设置按键按下次数
uchar Enter_num; //确认按键按下次数
float Year,Month,Day,Hour,Minute,Second; //时间设置值
char Week;
float Hour_H,Minute_H,Second_H; //设置结束时间
float Hour_L,Minute_L,Second_L; //设置开始时间
int Value1; //人数
uchar IN1_flag=0;
uchar OUT1_flag=0;
uint Count; //T0定时器中断计数次数
uchar Miao;
void read_rtc();
/*********************************************LCD1602液晶显示************************************************************************/
void delay1(uint z) //延时约0.03ms函数
{
uint x,y;
for(x=z;x>0;x--)
for(y=3;y>0;y--);
}
void write_com(uchar com) //写指令函数
{
rw=0;
delay1(5);
rs=0;
delay1(5);
e=1;
delay1(5);
P0=com;
delay1(5);
e=0;
delay1(5);
}
void write_date(uchar date) //写数据函数
{
rw=0;
delay1(5);
rs=1;
delay1(5);
e=1;
delay1(5);
P0=date;
delay1(5);
e=0;
delay1(5);
}
void init() //液晶屏初始化函数
{
uchar num;
e=0; //时序表e初始为0
write_com(0x38); //设置16*2显示,5*7点阵,8位数据接口
write_com(0x0c); //设置光标
write_com(0x06); //光标自动加1,光标输入方式
write_com(0x01); //清屏
write_com(0x80); //设置初始显示位置第一行0x80
for(num=0;num<16;num++) //把table1[]="Count|2000/00/00"分16次按顺序显示到第一行
{
write_date(table1[num]);
delay1(5);
}
write_com(0x80+0x40); //设置初始显示位置第二行0x80+0x40
for(num=0;num<16;num++) //把table2[]=" 00 |00:00:00 0"分16次按顺序显示到第二行
{
write_date(table2[num]);
delay1(5);
}
}
void SetTime_dispaly(uchar add,uchar dat)//第一个:参数的地址,第二个:参数的内容 显示十进制数
{
uchar shi,ge;
shi=dat/10; //把十位提取出来
ge=dat%10; //把个位提取出来
write_com(add); //要写的地址
write_date(0x30+shi); //十位的内容 1602字符库
write_date(0x30+ge); //个位的内容 1602字符库
}
void Week_dispaly(uchar add,uchar dat) //第一个:参数的地址,第二个:参数的内容
{
write_com(add); //要写的地址
write_date(0x30+dat); //十位的内容 1602字符库
}
void Date_dispaly(uchar add,uchar dat) //第一个:参数的地址,第二个:参数的内容 显示十六进制数
{
uchar shi,ge;
shi=dat/16; //把十位提取出来
ge=dat%16; //把个位提取出来
write_com(add); //要写的地址
write_date(0x30+shi); //十位的内容 1602字符库
write_date(0x30+ge); //个位的内容 1602字符库
}
void LCD_Clean(uchar i) //液晶屏清除显示