• 【51单片机】智能百叶窗项目



    文章目录

        • 功能演示:
        • 前置要求:
        • 主要功能:
        • 主要模块:
        • 主函数代码:

    具体的仿真程序和代码程序已经免费放置在资源中,如有需要,可以下载进行操作。

    功能演示:

    前置要求:

    编译软件:Keil C51 uvision5.27

    仿真软件:Proteus 8.13

    主要器件:

    • 数码管:1个
    • 光敏电阻:1个
    • TLC2543ADC芯片:1个
    • 步进电机(六线四相):1个
    • LED灯:1个
    • 按钮:3个
    • 开关:2个

    主要功能:

    实现智能百叶窗的控制,具体功能:数码管显示测量结果光强,设置三个按键:手动/自动切换、手动正转和手动反转,用一个发光二极管显示手动/自动状态,自动状态时设置一个发光二极管点亮。创新:设置两个极限位置保护行程开关,用于保护百叶窗叶片。当压下正转行程开关时,电机停止正转,但还可以反转;当反转到极限位置压下行程开关时,电机停止反转,但还可以正转。

    主要模块:

    1. 模数转换模块:

      光敏电阻传感器可以用于测量光强,然后使用TLC2543 ADC将获取的光强模拟量转换为数字量,便于之后操作。

    2. 按键扫描模块

      三个按键用于手动/自动切换、手动正转和手动反转,使用户可以手动控制百叶窗。

      使用LED来显示手动/自动状态,灯灭为手动状态,灯亮为自动状态。

      按下正转行程开关时,无法正转,但反转可以进行;

      按下反转行程开关时,无法反转,但正转可以进行。

    3. 电机驱动模块

      自动状态时,通过光强大小自动控制电机转向。

      光强越大,电机正转以完成遮阳效果。正转时,百叶窗会一直下放,直到完全遮住。

      光强越小,电机反转以完成照光效果。反转时,百叶窗会一直上升,直到完全展开。

      手动状态时,则通过正反转按键实现控制电机转向。

    4. 光强显示模块

      将转换后的数字量显示在四位数码管上,这样可以实时监测周围光照情况。

    在这里插入图片描述

    主函数代码:

    #include "reg51.h"
    #include "Delay.h"
    #include "Motor.h"
    #include "SegShow.h"
    #include "TLC2543ADC.h"
    #include "KeyScan.h"
    
    void Init(void);
    
    // 最终光强数据
    unsigned int value = 0;
    
    // 记录百叶窗的位置,初始时完全折叠
    unsigned int book = 0;
    
    // 用于标志 手动/自动状态
    unsigned int flag = 1;
    
    void main(void)
    {
        Init();
        while (1)
        {
            KeyScan();
        }
    }
    
    void Int1() interrupt 2
    {
        flag = ~flag;
    }
    
    // 定时器0中断服务程序
    void Timer0_ISR() interrupt 1 {
        // 每次定时器中断发生时,延时计数器递减
        TH0 = (65536 - 50000) / 256;  // 设置定时器0初值
        TL0 = (65536 - 50000) % 256;  // 设置定时器0初值
    
    	value = TLC2543_Getdata(0x10);
    	SEG_SHOW(value);
    }
    
    void Init(void)
    {
        /* 初始化中断 */
        EA = 1;
        EX1 = 1;
        IT1 = 1;
    
        /* 初始化为手动模式(灯灭)*/
        led = 0;
    
    	/* 初始化定时器0 */
        TMOD = 0x01; // 设置定时器0为模式1
        TH0 = (65536 - 50000) / 256;  // 设置定时器0初值
        TL0 = (65536 - 50000) % 256;  // 设置定时器0初值
        ET0 = 1;     // 允许定时器0中断
        EA = 1;      // 允许总中断
        TR0 = 1;     // 启动定时器0
    }
    
    
  • 相关阅读:
    植被参数遥感反演与数据同化
    【树】【图论】【树路径】【深度优先搜索】2867. 统计树中的合法路径数目
    2022-9-16 第七小组 学习日记 (day71)Maven
    第一章 网络类型和数据链路层协议
    第一百四十二回 如何使用intl插件实现国际化
    一些文本在CSS上的作用
    java计算机毕业设计师生交流平台源程序+mysql+系统+lw文档+远程调试
    详细设计结构化程序和人机界面设计
    抖音怎么录屏?这个方法,亲测好用
    Linux零基础快速入门篇
  • 原文地址:https://blog.csdn.net/hdz_wiz_csdn/article/details/139378791