基于STC89C52单片机的自动窗帘控制系统设计

发布者:TranquilWhisper最新更新时间:2023-10-04 来源: elecfans关键字:STC89C52  单片机 手机看文章 扫描二维码
随时随地手机看文章

1.简介

自动窗帘控制系统核心采用的是单片机STC89C52,其次利用了光照传感器、按键、显示屏以及信号调理电路等外围电路,使整个系统在各模块的配合下可实现半自动控制、自动控制、定时控制等功能。 其主要功能有6个,分别为:


1.手动控制:该功能是根据用户的需求通过按键进行窗帘的开关,此功能可以使窗帘的开闭处于任何一种状态;
2.光照自动控制:系统可以根据用户设定的光照强度值通过感光器采集光照自动开关窗帘; 3.时间控制:此功能是根据用户设定的时间一次性开关窗帘,并显示当前温度。
4.温度报警系统:可以自行设置温度报警温度。
5.时间显示及闹钟系统:可以自行设置闹钟时间。
6.手动自动控制按键随时切换


2.硬件设计

自动窗帘控制系统的构成主要由STC89C52单片机最小系统、蜂鸣器报警电路电源模块、按键电路、LCD1602液晶显示电路、步进电机驱动电路、DS1302时钟电路、光照检测模块和温度检测电路组成。 其系统框图如图:

在这里插入图片描述

(1)光照检测电路

窗帘自动控制系统的光控功能是可以根据光照的强弱来自动控制窗帘的开闭的,因此需要用到光照传感元器件,在本设计中采用了光敏电阻,并和一个常规电阻串联在一起,根据光线的变化改变光敏电阻的分压值,然后通过ADC0832数模转换芯片传输给单片机,经过单片机处理后在液晶上显示。 电路图如图:

在这里插入图片描述

(2)灯光驱动电路

灯光电路使用了3个LED灯作为光源,采用了三极管作为LED灯开关的控制芯片,同时也对驱动电流进行放大,以达到LED灯工作电流的要求。 原理图如图:

在这里插入图片描述

(3)步进电机驱动电路

本系统的设计目的为了高效控制步进电机的转动,因此需要将单片机发出的脉冲转化为步进角度,才能控制步进电机转动,我们在这里采用ULN2003作为步进电机的驱动芯片,其作用为增强单片机的驱动能力。 其工作原理为:根据单片机引脚的输出状态,使ULN2003与单片机连接的四个管脚中每时刻只有一个管脚处于导通状态(采用单拍方式对步进电机控制),其他管脚处于断开状态。 这样就使得与ULN2003连接的步进电机只有一个引出端导通。 驱动原理图如图:

在这里插入图片描述

(4)按键电路

按键在单片机应用系统中能实现向单片机输入数据,传送命令等功能,是人工干预单片机的主要手段。 本设计中的按键采用独立按键式,共有五个。 其中S2是自动和手动切换键,S3是设置退出键,S4是手动反转和设置参数减键,S5是手动正转和设置参数加键,S6是参数设置键。 电路图如图:

在这里插入图片描述

(5)DS1302时钟电路

本设计采用DS1302时钟芯片为系统提供时钟源,它通过串行方式与单片机进行数据传送,能够向单片机提供包括秒、分、时、日、月、年等在内的实时时间信息,并可对月末日期、闰年天数自动进行调整; 电路如图:

在这里插入图片描述

电路图中,Vcc1为后备电源,Vcc2为主电源。 VCC1在单电源与电池供电的系统中提供低电源并提供低功率的电池备份。 VCC2在双电源系统中提供主电源,在这种运用方式中VCC1连接到备份电源,以便在没有主电源的情况下能保存时间信息以及数据。

(6)总体电路图

截图20230301181746.png

3.软件设计

系统软件设计主要有几部分组成,主要分为主程序和各个模块子程序。

(1)主程序设计

主程序构成无限循环,主要完成单片机初始化,关中断,菜单显示内容初始化,按键扫描,电机运行,计时等功能。 流程图如图:

在这里插入图片描述

代码:

void main()

{  

  init_eepom();     //初始化EEPROM

  init_1602();     //lcd1602初始化

  init_1602_dis_csf(); //lcd1602初始化显示

  init_ds1302_io();   //初始化ds1302Io

  init_time0();     //初始化定时器

  menu_1_break();       //菜单初始界面

  init_ds1302();     //ds1302初始化

  temperature1 = read1_temp();  //读温度1

  delay_1ms(650);

  while(1)

  {

    key();       //按键程序

    if(key_can < 10)

    {

      key_with();  

    }

    shoudong_kaiguan();    //手动开关窗帘

    if(flag_200ms == 1)

    {    

      flag_200ms = 0;

      temperature1 = read1_temp();  //读温度1  环境温度

      if(temperature1 >= 99)

        temperature1 = 99;

      zinengchuanglian_dis();    //智能窗帘处理函数

      guanxian = ad0832read(1,0) * 9.0 / 255;

      if((menu_1 == 0))

      {

        read_time();      //读时间

        init_1602_ds1302();   //显示时钟

        write_sfm_18b20(2,13,temperature1);  //显示温度

        write_sfm1(2,0,guanxian);  //显示温度

            if(guanxian <= guanxian_set)

       LED=0;

      else

       LED=1;

        if(temperature1 >= t_high)

          beep =  ~beep;   //温度报警 ,蜂鸣器报警

        else 

          beep = 1;        

      }

    }

    bujindj();   //步进电机函数

  }

}


(2)步进电机驱动程序设计

步进电机程序设计主要实现的功能为判断旋转方向; 按顺序传送控制脉冲; 判断所要求的控制步数是否传送完毕。 程序流程图如图:

在这里插入图片描述

代码:

void bujindj()   //步进电机函数

{

  static uchar i;

  if(flag_z_f != 0)  

  {  

    if(flag_z_f == 1)     //开

    {

      if(bjdj_value >= 254)

      {

        flag_z_f = 0;

        bjdj_value = 254;

        P2 = P2 & 0xf0;  //让4个IO口都不输出

        write_eepom();  //保存

      }else 

        bjdj_value ++;  

    }

    if(flag_z_f == 2)     //关

    {        

      if(bjdj_value <= 1)

      {

        flag_z_f = 0;

        bjdj_value = 1;

        P2 = P2 & 0xf0;  //让4个IO口都不输出

        write_eepom();  //保存

      }else  

        bjdj_value --;

    }

    for(i=0;i<4;i++)          //4相

    {

      if(flag_z_f == 1)    //开

        P2=zheng[i];// & (P2 | 0xf0);         //

      else if(flag_z_f == 2)//关

        P2=fan[i];// & (P2 | 0xf0);          //

      delay_uint(500);        //改变这个参数可以调整电机转速

    }

  }

}


关键字:STC89C52  单片机 引用地址:基于STC89C52单片机的自动窗帘控制系统设计

上一篇:AT89C52单片机点亮数码管的设计
下一篇:89C2051单片机无线遥控电铃的工作原理

推荐阅读最新更新时间:2024-11-11 11:40

技术文章—学好单片机必须了解的9个电路
单片机上拉电阻的选择 大家可以看到复位电路中电阻R1=10k时RST是高电平 ,而当R1=50时RST为低电平,很明显R1=10k时是错误的,单片机一直处在复位状态时根本无法工作。出现这样的原因是由于RST引脚内含三极管,即便在截止状态时也会有少量截止电流,当R取的非常大时,微弱的截止电流通过就产生了高电平。 LED串联电阻的计算问题 通常红色贴片LED:电压1.6V-2.4V,电流2-20mA,在2-5mA亮度有所变化,5mA以上亮度基本无变化。 端口出现不够用的情况 这时可以借助扩展芯片来实现,比如三八译码器74HC138来拓展 滤波电容 滤波电容分为高频滤波电容和低频滤波
[电源管理]
技术文章—学好<font color='red'>单片机</font>必须了解的9个电路
单片机串口设置问题
最近测试涉及到底层串口代码的修改。经过这次修改,突然发现其实自己对于串口的一些特性以前并不是十分清楚。 首先遇到的一些问题: 1)在使用IO的数据位的时候,没有考虑校验位所占的位数。 2)在设置串口输入的时候,使用悬空输入。 关于1),在一次使用 STM32 串口参数9600,N,8,1与另一个 8051MCU通信的时候发现偶校验没有问题,但是无校验通信就出现异常。但是,当将 STM32 与电脑通信的时候,偶校验与无校验通信又完全都是正确的。8051MCU单独与电脑通信也都是完全正确的。查看代码,还真不知道有什么不对劲的。因为这段代码,用了很长时间了。后来一个同事看代码后,提醒说对于数据位的设置,偶校验和无校验是一致的,既然没有数
[单片机]
一种基于单片机的高精度超声波多路同步测距系统设计
0 引言   超声波测距作为一种非接触性的检测方法,因其结构简单紧凑、可靠性高、价格低廉、实时性强等优点,近年来已经得到了广泛应用,如液位测量,修路过程中路面平整检测,汽车倒车雷达,机器人辅助视觉识别系统等。但因超声波在空气中传播时受到诸如环境温度、湿度、风速等影响,传统的超声波测距系统精度普遍较低。文献 采用了在系统中增加硬件温度补偿模块仅在一定程度上可以避免因环境温度变化带来的测量误差。文献 中采用小波等处理算法,也并不能弥补系统本质上的缺陷。因此,研究了一种控制精度高,适用范围宽的高精度多路同步超声波测距系统。   1 超声波测距工作原理与结构   1.1 工作原理   谐振频率高于20 kHz的声波被称为超声波。超声波
[单片机]
一种基于<font color='red'>单片机</font>的高精度超声波多路同步测距系统设计
以MSP430F449单片机为控制核心的智能数字化SLED控制系统设计
1971年Kurbativ等人首次制备出半导体SLED以来,SLED得到了惊人的发展。特别是近几年,其在光纤陀螺仪、光纤传感、光时域发射仪等方面得到了广泛的应用。SLED兼有LD和LED的优点,是一种自发辐射单程光放大非相干光源,具有发射谱宽、高输出功率、体积小、质量轻的特点。另外,由于其时间相干性短和空间相干性长,能有效地将光耦合进单模光纤。 对于SLED来说,其出射光功率及中心波长会随着驱动电流和管芯温度的漂移而发生变化。为了获得良好的光源性能,SLED管芯的电流和温度控制精度必须达到一定的水平。基于实现输出功率稳定、可靠,输出波长准确的目的,笔者设计了基于MSP430F449单片机的智能数字化SLED控制系统。 SL
[单片机]
以MSP430F449<font color='red'>单片机</font>为控制核心的智能数字化SLED<font color='red'>控制系统</font>设计
STM32单片机学习笔记(3):虚拟串口
项目简介 利用CubMX生成基于32单片机的HAl库工程,然后编写程序在proteus上仿真验证。本项目最适合没有开发板的同学学习,零成本利用仿真软件率先入门STM32单片机。这是第三部分针对串口通信的一个实例,虚拟串口其实只是计算机以软件的方式模拟串口通信的功能,可以基本等同于实际的串口。本文主要用于对STM32串口通信的理解。 硬件模块 STM32F103R4 串口模块 软件工具 CubMX Proteus KEIL 电路连接图 STM32F103R4 串口模块 工作流程 首先是下载相应的虚拟串口,这里下载的是Virtual Serial Port Driver软件。 安装好后,其使用期限是14天,后续超过这个
[单片机]
STM32<font color='red'>单片机</font>学习笔记(3):虚拟串口
温室智能控制器硬件单片机设计方案
  近年来,温室环境控制在国内外得到了相应的研究和应用。国内现有的智能温室系统硬件大部分从国外引进,国外的系统是经过多年的发展和完善,在技术上是比较成熟与先进的。但在我国的应用中出现了一些问题,如体积大、能耗大、温室降温较差、在我国使用不适应。从经济效益上看,因其设备投资大,运行费用高,普遍亏损。“林木种苗工厂化生产环境控制设备与自动化控制集成应用研究示范”是我们自主开发的智能温室监控系统,该系统对于实现农业精细化、自动化生产,提高农业生产的效率与农产品的质量有一定的促进作用。   系统硬件相关技术指标要求如下:   ( 1) 对现场空气温度湿度,土壤基质温度湿度,光照强度进行实时的数据采集、数据信号处理、数据分析。数据采集时
[单片机]
单片机点灯(点亮、闪烁、流水灯)
一、点亮 工作原理: 如图,二极管阳极连接电阻,二极管阴极连接单片机引脚。D0对应P20,D1对应P21,,,,,,,都通过P2孔进行控制。 二极管: 电源正极连接到二极管阳极,负极连接到阴极,二极管正常工作。所以,原理图中,引脚为低电平,连接的是二极管的阴极,阳极通过与电阻连接,电阻连接的是高电平,所以二极管正常工作。电阻的作用为保护二极管。 程序编写 #include reg52.h sbit LED=P2^0; /*sbit用于定义变量。LED为自定义变量。将P2.0(注意不要写成P2.0,应写为P^0)孔赋给变量LED*/ void main() { while(1) { LED=0;/*由二极管的工作原
[单片机]
【GD32 MCU 入门教程】七、分散加载说明
分散加载说明以GD32F103ZE为例,分别用Keil、IAR和Embedded Builder工具实现:将函数放置某个地址、将常量放置某个地址、将函数放在RAM中运行的三种效果。 1、将led_toggle()函数放在0x08040000地址后。 2、将tempbuf 常量放在0x08020000地址后。 3、将void led_flow(void) 函数在RAM中运行,放在0x20008000地址后面。 1.Keil IDE example 1.1.将函数放置某个地址 生成.sct 文件 单击 MDK 的 Option - linker 取消勾选“Use memory layout from target Dialog”。 单
[单片机]
【GD32 <font color='red'>MCU</font> 入门教程】七、分散加载说明
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved