基于51单片机教室灯光全自动控制设计( proteus仿真+程序+设计报告+原理图+讲解视频)

基于51单片机教室灯光全自动控制设计( proteus仿真+程序+设计报告+原理图+讲解视频)

基于51单片机教室灯光全自动控制设计

  • [1. 主要功能:](#1. 主要功能:)
  • [2. 讲解视频:](#2. 讲解视频:)
  • [3. 仿真设计](#3. 仿真设计)
  • [4. 程序代码](#4. 程序代码)
  • [5. 设计报告](#5. 设计报告)
  • [6. 原理图](#6. 原理图)
  • [7. 设计资料内容清单&&下载链接](#7. 设计资料内容清单&&下载链接)

仿真图proteus7.8及以上

程序编译器:keil 4/keil 5

编程语言:C语言

设计编号:S0075

1. 主要功能:

基于51单片机的教室灯光自动控制系统

1、数码管显示当前工作强度,光照阈值和教室人数;

2、设定值可以通过按键调整;

3、通过按键模拟红外对射传感器统计进出人数;

4、教室内是否开灯取决于光照强度,光照强度低于阈值(教室灯光暗)的时候开灯;

5、教室内开灯的数量根据教室内人数的多少设定,人数越多,开灯数量越多;

需注意仿真中51单片机芯片是兼容的,AT89C51,AT89C52是51单片机的具体型号,内核是一样的。相同的原理图里,无论stc还是at都一样,引脚功能都是一样的,程序是兼容的,芯片可以替换为STC89C52/STC89C51/AT89C52/AT89C51等51单片机芯片。

以下为本设计资料展示图:

2. 讲解视频:

讲解视频包含仿真运行讲解和代码讲解

基于51单片机教室灯光控制proteus仿真+程序+设计报告+原理图+讲解视频

3. 仿真设计

打开仿真工程,双击proteus中的单片机,选择hex文件路径,然后开始仿真。开始仿真后数码管显示当前光照强度,光照阈值,教室人数,光照强度低于阈值即教室内灯光暗,满足开灯条件。此时教室人数0,即教室没有人,所以不需要开灯。

通过点击按键进教室完成教室人数的设置,从1开始,每多十个人多开一盏灯,最多开8盏灯。

如果光照强度大于阈值,说明自然光足够亮,不需要开灯。

4. 程序代码

使用keil4或者keil5编译,代码有注释,可以结合视频理解代码含义。

mian 函数

c 复制代码
#include "reg51.h"
#include "ADC0832.h"
sbit smg1=P2^0;//数码管引脚
sbit smg2=P2^1;
sbit smg3=P2^2;
sbit smg4=P2^3;
sbit smg5=P2^4;
sbit smg6=P2^5;
sbit k1=P1^0;//按钮
sbit k2=P1^1;
sbit k3=P1^2;
sbit k4=P1^3;
unsigned char time=0;
unsigned char code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; 
unsigned char num=0;//人数
unsigned char light=0,limit=20;//光照
unsigned char m1=0,m2=0,m3=0,m4=0;
void delay(unsigned int i)//延时
{
	while(i--);
}
void disp() 
{
    // 根据光照强度light的十位数,通过数组smgduan获取对应的显示数据,并将结果显示在P0口上(假设用于连接数码管的段选)
    P0 = smgduan[light / 10]; 
    // 清除数码管第一位(smg1)的位选信号,使其不显示任何数字
    smg1 = 0;
    // 延时100ms,以便观察数码管的显示效果
    delay(100);
    // 设置数码管第一位(smg1)的位选信号为1,使显示数据生效
    smg1 = 1;
    // 根据光照强度light的个位数,通过数组smgduan获取对应的显示数据,并更新到P0口上
    P0 = smgduan[light % 10];
    // 清除数码管第二位(smg2)的位选信号
    smg2 = 0;
    // 延迟100ms
    delay(100);
    // 设置数码管第二位(smg2)的位选信号为1,使显示数据生效
    smg2 = 1;

    // 同理,根据光照阀值limit的十位和个位数,分别显示到数码管的第三位和第四位
    P0 = smgduan[limit / 10];
    smg3 = 0;
    delay(100);
    smg3 = 1;
    P0 = smgduan[limit % 10];
    smg4 = 0;
    delay(100);
    smg4 = 1;

    // 根据人数num的十位和个位数,分别显示到数码管的第五位和第六位
    P0 = smgduan[num / 10];
    smg5 = 0;
    delay(100);
    smg5 = 1;
    P0 = smgduan[num % 10];
    smg6 = 0;
    delay(100);
    smg6 = 1;
}
// 主函数定义
void main() 
{
    // 设置定时器0的工作模式为模式1(16位定时器/计数器)
    TMOD |= 0X01;
    // 设置定时器0的高8位初始值,这里设置的是一个特定的计数值(具体取决于晶振频率和系统配置)
    TH0 = 0X3C;
    // 设置定时器0的低8位初始值,与TH0共同决定定时器的初值
    TL0 = 0XB0; 
    // 打开定时器0中断允许位,使能定时器0中断功能
    ET0 = 1;
    // 打开总中断,允许单片机接收并处理所有中断请求
    EA = 1;
    // 启动定时器0
    TR0 = 1;
    // 进入无限循环
    while(1)
    {
        // 调用disp()函数,执行显示操作(如可能的话,可能是显示当前光照阈值或人数等信息)
        disp();

        // 检测按键k1状态,并在m1标记为0时调整光照阈值limit(增1)
        if(!k1 && (m1 == 0)) 
        {
            if(limit < 100) // 如果当前阈值小于最大值100
                limit++; // 阈值加1
            m1 = 1; // 标记m1为已操作,防止连续触发
        }
        // 当按键k1释放时,重置m1标记
        if(k1)
            m1 = 0;

        // 类似地检测按键k2状态并减少光照阈值limit(减1)
        if(!k2 && (m2 == 0)) 
        {
            if(limit > 0) // 如果当前阈值大于最小值0
                limit--; // 阈值减1
            m2 = 1; // 标记m2为已操作
        }
        // 当按键k2释放时,重置m2标记
        if(k2)
            m2 = 0;

        // 检测按键k3表示有人进入教室,当m3标记为0时增加教室内人数num(增1)
        if(!k3 && (m3 == 0)) 
        {
            if(num < 100) // 如果当前人数小于最大值100
                num++; // 人数加1
            m3 = 1; // 标记m3为已操作
        }
        // 当按键k3释放时,重置m3标记
        if(k3)
            m3 = 0;

        // 检测按键k4表示有人离开教室,当m4标记为0时减少教室内人数num(减1)
        if(!k4 && (m4 == 0)) 
        {
            if(num > 0) // 如果当前人数大于最小值0
                num--; // 人数减1
            m4 = 1; // 标记m4为已操作
        }
        // 当按键k4释放时,重置m4标记
        if(k4)
            m4 = 0;

        // 判断当前光照强度是否低于设定阈值limit
        if(light < limit)
        {
            // 如果教室内有人(即num>0),根据人数开启相应数量的灯光
            if(num > 0)
                P3 = 0xff << (num / 10) + 1; // 假设每10人开一组灯,不足10人也开一组
            else
                P3 = 0xff; // 若教室内无人,则全开灯光
        }
        // 光照强度高于或等于阈值时,关闭所有灯光
        else
        {
            P3 = 0xff;
        }
    }
}

// 定义一个名为Timer0的中断服务程序,该中断由定时器0溢出触发(中断号为1)
void Timer0() interrupt 1
{
    // 判断计数变量time是否小于10
    if(time < 10)
    {
        // 如果time小于10,则将其加1,表示时间累计增加
        time++;
    }
    else
    {
        // 如果time不小于10(即等于或大于10),则执行以下操作:
        // 将time重置为0,重新开始计时周期
        time = 0;
        
        // 调用ADC函数进行光照强度检测,并将返回值赋给light变量
        light = ADC();
    }
    
    // 设置定时器0的高8位和低8位初始值,以维持特定的定时周期
    // 假设此处设置的定时器初值使得定时器0每10个单位时间产生一次溢出中断
    TH0 = 0X3C; // 设置TH0为0X3C(十六进制)对应到二进制并转换为对应的机器周期数
    TL0 = 0XB0; // 设置TL0为0XB0(十六进制),与TH0共同决定定时器0的定时周期
} 

5. 设计报告

7608字设计报告,内容包括硬件设计、软件设计、软硬件框图、调试、结论等

本课程设计项目正是顺应这一时代潮流,选择了51系列单片机作为核心控制器元件,以其稳定可靠、易于编程的特点来构建一套适用于教室环境的灯光自动控制系统。该系统旨在模拟真实应用场景中的光照条件变化和人员流动情况,实现精准的光线感应控制机制。具体来说,通过集成光敏传感器实时监测教室内的自然光线强度,并设定一个可调阈值,当实际光线低于此阈值时,系统将自动开启照明设备,确保室内有足够的光线供师生进行教学活动。

此外,为了进一步提高系统的智能性和实用性,本设计还特别加入了人数统计功能,通过按键模拟红外对射传感器的工作原理,以简化的操作方式记录进出教室的人数变化。这种创新性的设计不仅有助于精确掌握教室内学生数量,更为关键的是,能够基于人数动态调整教室内灯光的数量和分布,从而实现按需照明,避免不必要的能源浪费。

6. 原理图

原理图使用AD绘制,可供实物参考,仿真不同于实物,需要调试经验才能做出来。

Proteus仿真和实物作品的区别:

1.运行环境:Proteus仿真是在计算机上运行的,而实物则是在硬件电路板上运行。

2.调试方式:在Proteus仿真中,可以方便地进行单步调试和观察变量值的变化,而在实物中则需要通过调试器或者串口输出等方式进行调试。

电路连接方式:在Proteus仿真中,可以通过软件设置进行电路连接的修改,而在实物中则需要通过硬件电路板和连接线进行修改。

3.运行速度:Proteus仿真通常比实物运行速度快,因为仿真是基于计算机运行的,而实物则需要考虑电路板上的物理限制和器件的响应时间等因素。

4.功能实现:在Proteus仿真中,可以通过软件设置实现不同的功能,而在实物中则需要根据电路设计和器件的性能进行实现。

7. 设计资料内容清单&&下载链接

资料设计资料包括仿真,程序代码、讲解视频、功能要求、设计报告、软硬件设计框图等。

0、常见使用问题及解决方法--必读!!!!

1、程序

2、proteus仿真

3、功能要求

4、软硬件流程图

5、开题报告

6、设计报告

7、原理图

8、讲解视频

Altium Designer 安装破解

KEIL+proteus 单片机仿真设计教程

KEIL安装破解

Proteus元器件查找

Proteus安装

Proteus简易使用教程

单片机学习资料

相关数据手册

答辩技巧

设计报告常用描述

鼠标双击打开查找嘉盛单片机51 STM32单片机课程毕业设计.url

资料下载链接(可点击):

https://docs.qq.com/doc/DS3ZEVW13cXBzT0ZS

相关推荐
若兰幽竹15 分钟前
【大模型应用】抖音爆款视频深度分析系统:流水线式AI逆向拆解流量密码,精准预测播放量!
人工智能·python·音视频·抖音爆款分析
网管NO.11 小时前
视频核心技术 08:播放器原理与秒开优化 —— 首帧链路、缓冲策略与卡顿根治
音视频
searchforAI1 小时前
视频画面里的PPT怎么提取?视频转图文讲义的实操教程
人工智能·学习·ai·aigc·powerpoint·音视频·贴图
视频号下载助手1 小时前
2026实测可用!全网视频无水印保存完整操作方法
音视频
广州灵眸科技有限公司3 小时前
瑞芯微(EASY EAI)RV1126B 音频电路
开发语言·人工智能·深度学习·算法·yolo·音视频
孤舟簔笠翁3 小时前
音频均衡器(EQ)详解
音视频
jushi89994 小时前
网易爆米花 网盘视频聚合播放器 支持各大网盘、NAS挂载
音视频
MicroTech20254 小时前
微算法科技(NASDAQ :MLGO)发布基于NEQR技术的新型量子视频处理算法,重构智能视觉底层逻辑
科技·算法·音视频
REDcker5 小时前
QUIC协议详解1
音视频·webrtc·实时音视频·webtransport
K姐研究社14 小时前
怎么用AI制作电商口播视频,开拍APP一键生成
人工智能·音视频