首页 > 其他分享 >【51单片机】智能百叶窗项目

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

时间:2024-06-03 20:59:46浏览次数:19  
标签:定时器 正转 反转 void 手动 51 百叶窗 单片机 光强


文章目录

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

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

功能演示:

<iframe allowfullscreen="true" data-mediaembed="csdn" frameborder="0" id="fQrJmn2B-1717310992221" src="https://live.csdn.net/v/embed/395273"></iframe>

前置要求:

编译软件: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
}

标签:定时器,正转,反转,void,手动,51,百叶窗,单片机,光强
From: https://blog.csdn.net/hdz_wiz_csdn/article/details/139378791

相关文章

  • 基于单片机大气压监测报警系统电路方案设计
    **单片机设计介绍,基于单片机大气压监测报警系统电路方案设计文章目录一概要二、功能设计设计思路三、软件设计原理图五、程序六、文章目录一概要  基于单片机大气压监测报警系统电路方案设计概要如下:一、系统概述本设计旨在通过单片机技术实现对大气压......
  • 基于单片机8155四层电梯控制系统设计
    **单片机设计介绍,基于单片机8155四层电梯控制系统设计文章目录一概要二、功能设计设计思路三、软件设计原理图五、程序六、文章目录一概要  基于单片机8155的四层电梯控制系统设计概要如下:一、系统概述本设计旨在通过单片机8155为核心控制器,构建一个四......
  • LeetCode 1151. 最少交换次数来组合所有的 1
    1151.最少交换次数来组合所有的1给出一个二进制数组 data,你需要通过交换位置,将数组中 任何位置 上的1组合到一起,并返回所有可能中所需 最少的交换次数。示例1:输入:data=[1,0,1,0,1]输出:1解释:有三种可能的方法可以把所有的1组合在一起:[1,1,1,0,0],交换......
  • 小白跟做江科大32单片机之对射式红外传感器计次
    原理部分1中断示意图,中断会打断主函数的执行,终端执行完成之后再返回主函数继续执行2.STM32中断这些灰色的是内核中断这些白色的是普通中断3.NVIC统一管理中断,每个中断通道都拥有16个可编程的优先等级,可对优先级进行分组,进一步设置抢占优先级和响应优先级4.抢占优先......
  • day46 完全背包理论基础 518. 零钱兑换 II 377. 组合总和 Ⅳ
    完全背包理论基础有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i],得到的价值是value[i]。每件物品都有无限个(也就是可以放入背包多次),求解将哪些物品装入背包里物品价值总和最大。01背包内嵌的循环是从大到小遍历,为了保证每个物品仅被添加一次。而完全......
  • 51单片机AD转换(ADC0808)
    ADC0808是CMOS单片型逐次逼近式A/D转换器,它有8路模拟开关、地址锁存与译码器、比较器、8位开关树型A/D转换器。将参考电压输出成0~255引脚ADC0808芯片有28条引脚,采用双列直插式封装。各引脚功能如下:1~5和26~28(IN0~IN7):8路模拟量输入端。8、14、15和17~21(out1~out8):8位数字量输......
  • atcoder350,351,352,353,354,355期部分题解
    声明:有些题感觉已经说到很明白了,就先不写代码了,有空会补上目录350D: newfriend350E:toward0351D:GridandMagnet352D:permutation subsequence353C:sigmaproblem353D:anothersigmaproblem354C:atcodermagics355C:bingo2355D:intersectingintervals......
  • 基于单片机HCSR04超声波测距
    **单片机设计介绍,基于单片机HCSR04超声波测距文章目录一概要二、功能设计设计思路三、软件设计原理图五、程序六、文章目录一概要  基于单片机HC-SR04超声波测距概要如下:一、模块简介HC-SR04超声波模块是一个常用于机器人避障、物体测距、液位检测、公......
  • 基于单片机的汽车防盗报警系统设计与实现
    摘要:为了有效保护车辆,防止车辆被盗,汽车防盗报警系统的设计成为研究的热点问题。基于STC89C52单片机设计了一套汽车防盗报警系统,该系统由硬件和软件两部分组成,通过高效集成电路形成完整的控制系统,电路结构简单、易于检测。介绍了各部件的结构及工作原理,利用实车试验对......
  • 单片机软件开发工程师(笔试+面试)
    笔试部分:1、strcpy和mencpy的作用与区别strcpy和mencpy都是C标准库函数,他们有以下特点:①复制内容不同:strcpy只能复制字符串,而mencpy可以复制任意内容、如字符数组、整型、结构体等。②复制方法不同:strcpy不需要指定长度、它遇到被复制的字符串的结束符’\0‘才结束,所以容易......