基于51单片机的智能教室系统
功能:
1.通过LCD实时温度、光照强度、人数以及手自动模式
2.温度过高且有人的情况下打开空调
3.光强过弱的时候且有人的情况下打开照明灯
4.通过两个运放电路模拟进人出人
5.通过按键调整手自动模式,手动模式可以手动打开照明灯和空调
一、原理图
二、部分代码
#include <reg51.h>
#include "lcd.h"
#include "adc.h"
#include "timer.h"
#include "hardware.h"
#include "ds18b201.h"
unsigned char add = 0; //电压采集的变量
extern unsigned char Auto;//自动or手动的变量
extern unsigned char sdata1;//温度的变量
extern unsigned int pwm;//pwm占空比的变量
extern unsigned char Peo;//人数的变量
extern unsigned char add1;//0-255 转化为 0-99的变量
extern unsigned char Auto_Flag;//自动手动标志位
void main()
{
LcdInit();//lcd初始化
Timer0Init();//定时器0初始化 给电机服务 产生pwm波
Motor_Forward();//电机配置
while(1)
{
Scan();//按键扫描 包括 人的进出
LcdShow();//LCD的显示函数
add = Adc0832(0);//ADC0832采集光照
ReadTemperature1();//读取温度
if(Peo > 0)
{
//自动模式下 根据来调整PWM占空比->调整电机转的快慢
if(Auto == 0)
{
if(sdata1 < 24)
{
pwm = 0;
}
else if(sdata1 >= 24 && sdata1 < 27)
{
pwm = 30;
}
else if(sdata1 >= 27 && sdata1 < 30)
{
pwm = 70;
}
else if(sdata1 >= 30)
{
pwm = 100;
}
}
//是否照明 自动模式
if(add1 < 50 && Auto == 0)
{
Air_conditioning_Start();
}
else
{
Air_conditioning_Stop();
}
}
//没有人 电机不动 照明灯不打开
else
{
pwm = 0;
Auto_Flag = 0;
Air_conditioning_Stop();
}
//手动魔术下 Auto_Flag是是否打开灯的标志位 人数大于0 满足开灯
if(Auto_Flag == 1 && Peo > 0)
{
Air_conditioning_Start();
}
else if(Auto_Flag == 1 && Peo == 0)
{
Air_conditioning_Stop();
}
//自动开LED1
if(0 == Auto)
{
LED1_ON();
LED2_OFF();
}
//手动开LED2
else
{
LED1_OFF();
LED2_ON();
}
}
}