主页 > 案例大全 > 论文写作模式-基于单片机的智能窗帘设计

论文写作模式-基于单片机的智能窗帘设计

2021-04-07 12:53:47

  自动控制技术是近些年最重要的技术之一。在我们生活的各个地方,都有它的影子。就定义而言,自动控制技术是通过具有某些可控功能的自动控制系统来完成某些控制需求,以确保按照预期方式执行特定过程或达到预定目标。随着社会的变革,信息化时代的加快,自动控制技术进步的同时给,在各种领域发光发亮,特别是在航天工程,军事科研技术等领域,自动控制技术发挥了非比寻常的作用。当然,在智能家居方面,自动控制技术也有较好的发展前程。应用自动控制技术,能够让人们的生活更好。

  针对家中的照明及避光问题,自动窗帘控制系统的出现将有效的取代人们的手工控制。本文主要讲述了自动窗帘的设计与控制系统,从设计到制作再到各种理论的学习和分析,以及每个步骤功能的实现。自动窗帘控制系统的主要核心是用单片机进行控制,其次使用用光强采集电路,时钟模块,电机控制的模块和按键电路使整个系统在各模块的配合下实现半自动化控制和自动化控制等功能。该设计在理论上,以程序来驱动促使各模块联合工作,在应用上使用软件来进行原理图的设计和仿真制作。

  该设计主要讨论了自动窗帘控制系统总设计的流程,硬件电路流程的设计,软件调试的过程。通过本系统可以实现通过光强、定时来使窗帘自行打开和关闭。

  1.1课题背景及意义

  伴随着社会的变革,信息化时代的加快,人们的工作和生活变得更加便利,在每天的生活中都会接受大量的信息。信息化社会在潜移默化中不断的改变人们生活和工作习惯,在不断拓开眼界,改变观念的同时,也越来越向往简单,舒适又便利的生活,对于自己住宅的要求也越来越高,他们希望只记得住宅能够变得安全、舒适、且方便,智能家居便随之出现。

  智能家居也叫家庭自动化,简单来说就是一种住宅为核心,利用各种技术为部件(如人工智能技术、网络通信技术、云平台技术、设备自动化技术、综合布线技术等)将一房屋报警器、传感器等),来实现家中设施的自动控制和远程控制功能。我认为它的出现使人们的居家生活变得便利和舒适,可以说它甚至改变了人们的生活方式,极大程度上节约的人们的时间。

  伴随信息化时代的不断加快,科学和技术,发展的进程在飞快的提升,大量技术也在不断的更替。当代人民生活水平也不断提高,人们开始对自己所生活和居住的环境产生了更多的需求。现如今,人们对现代家居的要求大多体现在高性能,多功能,低消耗这三个方面,人们在选择家居时,在保持美观的同时更加注意实用性。在这种趋势下,窗帘作为家居中必不可少的一员,在智能家居中也有很好的发展。。

  1.2国内外发展现状

  智能窗帘作为智能家居的一部分,在一些电子产品发达国家中的应用其实已经较为普遍(例如美国、日本、韩国等),并且好评连连。然而,因为理念、实用性和性价比等等的原因,智能家居在国内本身的发展就比较晚,由于各种因素的影响,其发展的进程更加迟缓。不过随着社会的快速发展,技术的快速进步,人们积累的财富越来越多,人们对家居的各项要求指标也不断提高,人们对于简单,舒适,便利生活的向往,推进着智能家居的发展,智能窗帘也伴随着需求的增长和大力的推广,其发展也愈发多样化。。

  1.3设计思想及基本功能

  首先,我们应该明确一点,该系统必须满足可以通过控制开关来打开或关闭窗帘。在可以保证基本功能完备的前提下,本设计根据自身需求添加了部分设计,使其可以根据不同时间段的光照强度和定时功能来实现自动开闭窗帘的功能。在选择设计方案和使用组件时,该系统基于经济实用和简单美观的思想,尽可能简化和优化电路设计,用最经济实用的设备和最简单的电路布线布局,在保证简单美观的同时满足该设计的要求。

  自动窗帘控制系统的基本功能主要有以下几种:

  (1)手动控制:主要作用是根据用户的需求直接通过控制按键来实现窗帘的开启和闭合,该功能可以使窗帘处于开启或闭合的任意一种状态;

  (2)光照自动控制:系统可以根据用户的预设的光强值,通过采集光照,来实现窗帘的自动开闭;

  (3)时间控制:该功能是根据用户预先设定的时间,进行一次性的开启或闭合窗帘的操作。

  (4)可以通过按键在上述三种控制模式中循环切换。

  第2章系统总体方案设计

  2.1设计要求

  (1)熟悉单片机的集成和开发环境,运用C语言编译工程文件;

  (2)熟练的运用所选用单片机;

  (3)构建基于单片机的最小系统,完成相关的电路;

  (4)理解智能窗帘的原理和掌握实现方法

  2.2方案选择和论证

  2.2.1单片机的选择

  方案一:选用DSP微处理器来作为系统的控制器。DSP非常特殊,它能够以数字信号来处理大量信息。DSP对比单片机有点如下:容易实现集成,共享处理器,对元件值的容限不敏感,外部影响小,方便调整处理器的系数实现自适应,可用于频率非常低的SP需要模数转换,硬件电路比较复杂,数字系统由耗电的有源器件所构成,没有无源设备安全可靠,且价格也较为贵。

  方案二:选用单片机作为系统控制器。单片机是一种典型的嵌入式微控制器,最早用于工业控制领域。对比dsp,单片机有价格低廉,开发环境较为完备,开发工具较为齐全,可应用的资料众多,具有位处理的能力,强调控制和事务处理功能等优点。

  综合上述分析,选取方案二为使用方案。。

  2.2.2显示方案的选择

  方案一:选用点阵数字管显示,它更适合显示大字体广告和通知。如果用于智能窗帘的显示器,有些太浪费了,且价格也比较昂贵,所以不采用此种作为显示。

  方案二:选用LED数码管动态扫描。尽管LED数码管价格合适,也最合适显示数字,而且当使用动态扫描的方法连接到单片机时,占单片机的口线很少。但是,由于需要使用特定移位寄存器来进行位移,因此芯片在电路调试的过程中通常会遇到很多阻碍,所以不推荐。

  方案三:选用LCD液晶显示屏。液晶显示器的显示功能强大,还可以显示大量的字符和图形,显示的内容多样且清晰可见。对于本设计来说,一个1602 LCD屏幕就足够了,价格也可以接受,因此选用LCD1602液晶显示屏作为本设计中的显示模块。

  2.2.3时钟模块的选择

  方案一:直接使用单片机自身的定时器计数器来提供秒信号,并使用该程序对年、月、日、周、小时、分钟和秒进行计时。尽管此解决方案可以减少时钟芯片的使用并省钱,但它具有较大的时间误差和复杂的时间算法,从而无法实现掉电走时。所以不采用此方案。

  方案二:选用DS1302时钟芯片来实现时钟,DS1302是一款高性能、低功耗、且带有RAM存储的实时时钟电路。它可以对年、月、日、周、小时、分钟和秒进行计时,其工作电压为2.5V至5.5V。选择三线接口用于与CPU同步通信,并且可以选用突发方式一次传输多个字节的时钟信号或RAM数据。DS1302内部含有有一个31×8的RAM寄存器,用于临时存储数据。DS1302是DS1202的升级产品,与DS1202兼容,但是增加了用于主电源和后背电源的双电源引脚,并且还可以为后背电源进行涓流电流充电。其主要功能是使用串行数据传输,可以为掉电保护电源提供可编程的充电功能,并可以关闭充电功能。

  所以,选用DS1302时钟芯片为本设计提供时钟功能。

  2.2.4电机的选择

  方案一:使用直流电机作为驱动器来驱动窗帘移动实现开合。该解决方案的优点在于电机速度可以非常高,从而能够迅速的打开和关闭窗帘。缺点是当电机的转速过快时,在发送停止信号后,窗帘会由于惯性继续移动,可能会损坏窗帘框架。但若是速度太低,则电机可能无法克服阻力,因此无法驱动窗帘。

  方案二:使用步进电机作为驱动器来驱动窗帘移动实现开合。该解决方案的优点是在发出停止信号后它会立即停止,并且不会损坏窗帘框架。且它的扭矩大于直流电动机的扭矩,这便于驱动窗帘移动。其缺点是价格比直流电动机贵。

  结合上述分析,选取步进电机作为系统的驱动器,通过驱动窗帘移动来实现窗帘的开合。

  第3章系统硬件设计

  3.1整体方案设计

  3.1.1系统概述

  本设计的整个系统以STC89C52单片机为核心器件,再加上电容器,电阻器,晶体振荡器等,一起构成了单片机的最小系统。其他所有模块都需围绕单片机的最小系统。该显示设备使用1602 LCD屏幕,该屏幕可以同时显示一些基本信息(如光强度,控制模式,年,月,日,小时,分钟等),时钟模块选用DS1302芯片,将其初始化之后,会自动开始运行计算时间,单片机只需读取时间信息即可;光照检测电路采用光敏电阻和模数转换芯片ADC0832,将模拟量数字化并将其显示出来;窗帘使用步进电机来进行代替模拟,同时配有一个LED灯来表示窗帘当前的开关状态;本设计共有5个按键作为操作输入设备,可以对当前的时间进行调整,并且可以设置帘的开关时间和光控阈值等;最后是供电系统,采用常用的USB 5V进行供电。。

  3.1.2系统框图

  3-1系统框图

  3.2最小系统模块

  3.2.1 STC89C52简介

  (1)概述

  STC89C52是一种携带8K字节闪烁可擦除只读存储器的低电压,高性能CMOS 8的微处理器,又叫单片机,该器件使用ATMEL公司高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容,该芯片具有内置的通用8位中央处理器和闪存存储单元。强大的STC89C52微控制器可以为您提供越来越复杂的系统控制应用程序。

  STC89C52具有40个引脚,32个外部双向输入/输出(I/O)端口,并且还包含2个外部中断端口,3个16位可编程定时器计数器和2个全双工串行通信端口。2条读写线。STC89C52具有PDIP,PQFP/TQF和PLCC等三种封装形式,可以满足不同产品的需求。

  (2)主要功能特性

  ??◆兼容工业标准的MCS51指令系统;

  ??◆8k可反复编辑(>1000次)的闪存;

  ??◆32个双向I/O口;

  ?◆256x8字节的内部RAM;

  ??◆3个16位的可编程定时/计数器中断;

  ?◆时钟频为0-24MHz;

  ??◆2个串行中断;

  ??◆可编程的UART串行通道;

  ??◆2个外部中断源;

  ??◆共8个中断源;

  ??◆2个读写中断口线;

  ??◆3级加密位;

  ??◆低功耗的空暇和掉电模式;

  ?◆能够通过软件设置寝息、唤醒功能;(3)8051单片机的引脚功能

  其外部引脚排列如图3-2所示。其中,各引脚的功能为:

  ?图3-2 STC89C52引脚图

  ①主电源引脚

  VCC(40引脚),接+5V为电源正端;

  GND(20引脚),接+5V为电源地端;

  ②外接晶体或外部振荡器引脚

  XTAL1(19引脚),连接到外部晶体振荡器的引脚。在单片机的内部,它是反相放大器的输入端。使用外部振荡器时,该引脚应接地。

  XTAL2(18引脚),连接到外部晶体振荡器的另一个引脚。连接到反相放大器的输出端和片上内部时钟电路的输入端。使用外部振荡器时,此引脚连接到外部振荡器的输出端。。

  ③控制信号线

  RESET(9引脚),复位信号输入端,复位/关闭电源时,内部RAM的备用电源输入端。

  ALE(30引脚),地址锁存允许/编程脉冲输入,使用ALE锁存从P0端口输出的低8位地址。对片上EPROM进行编程时,从此处输入编程脉冲

  PSEN(29引脚),外部程序存储器读选通信号,低电平有效。

  EA(31引脚),主要用于访问外部存储器时是否允许/编程电压输入。当EA引脚为高电平时,将访问内部存储器。当其为低电平时,则访问外部的存储器。

  ④多功能I/O口引脚

  8051单片机一共拥有4个双向的I/O端口(分别为P0,P1,P2,P3),每组I/O线都可以独立应用,作为输入或输出口,其中:

  P0口(32~39引脚)——双向端口(三态),可用作输入或输出端口,并可驱动8个LSTTL门。在实际应用中,它通常被用作时间共享的地址或数据总线端口。当寻址外部程序或数据存储器时,低8位地址和数据总线分时使用P0端口:首先将低8位地址信号发送到P0端口,该地址被地址锁存信号ALE锁存到地址锁存器后,用作输入或输出数据的数据总线。

  双向口(三态),可作为输入/输出口,可驱动8个LSTTL门电路。实际应用中常作为分时使用的地址/数据总线口,对外部程序或数据存储器寻址时低8位地址与数据总线分时使用P0口:先送低8位地址信号到P0口,由地址锁存信号ALE的下降沿将地址信号锁存到地址锁存器后,再作为数据总线的口线对数据进行输入或输出。

  P1口(1~8引脚)——准双向端口(三态),可以驱动4个LSTTL门电路。当被用作输入线时,单片机必须首先将端口锁存器写入“1”,并且每个位都可以被编程为输入或输出线。

  P2口(21~28引脚)——准双向端口(三态),可以驱动4个LSTTL的门电路。也可以用作输入/输出端口。实际上,它通常用作地址总线的高8位。与P0端口构成一个16位地址总线,用于寻址外部存储器的接口电路。

  P3口(10~17引脚)——准双向端口(三态)可以驱动4个LSTTL门电路。当双功能端口用作第一个功能时,它与P1端口相同;当用作第二功能时,每个功能都有特定的用处,如表3.1所示。

  表3.1 P3口第二用途

  端口引脚第二功能注释

  P3.0 RXD串行口数据接收端

  P3.1 TXD串行口数据发送端

  P3.2/INT0外中断请求0

  P3.3/INT1外中断请求1

  P3.4 T0定时/计数器0外部计数信号输入

  P3.5 T1定时/计数器1外部计数信号输入

  P3.6/WR外部RAM写选通信号输出

  P3.7/RD外部RAM读选通信号输出

  3.2.2最小系统电路

  整个最小系统由三个部分组成,如图3-3所示,分别是晶振电路部分、复位电路部分、电源电路部分。

  晶体振荡器电路包括两个30pF的电容器C2和C3,以及一个12M的晶体振荡器X1。其电容器在此处的主要作用是起振,能够帮助晶体振荡器更轻松地起振,其取值范围为15-33pF。晶体振荡器的值也可以是24M。单片机的执行速度随着晶体振荡器值的增高而加快,在电路的设计中,晶体振荡器部分离单片机越近越好。

  对于单片机的复位电路其实可以将其理解为计算机的重启按键。当计算机在使用的过程中发生崩溃时,按重启键位从头开始执行计算机内部的程序。同理,当单片机系统正在运行,并且由于环境干扰等因素使其程序发生混乱时,仅仅需要通过按一下复位按钮,就可以使内部程序自行从头再执行一遍。

  复位电路由一个10K电阻器R3和一个10uF极性电容器C1组成。利用电容器电压不会突然变化的特性,我们可以知道的是,当系统进行加电时,RESET引脚将显示高电平,并且该高电平的持续时间取决于电路的RC值。当RESET引脚的高电平持续两个机器周期以上时,典型的51 MCU就会复位,因此正确组合RC值可以保证可靠的复位。

  最后是电源部分,为了供电的方便故选取5V的USB直接进行供电,其优点在于可以使用手机充电线和移动电源为设备供电,较为方便。

  除此之外,还有一些外部电路。

  由于STC89C52的P0端口是漏极开路输出,为了使P0端口可以用作普通I/O端口使用,将10K的排阻R1接在P0端口,本设计使用P0端口作为LCD的数据端口。对于引脚31(EA),当连接到高电平时,单片机在复位后从内部ROM的0000H开始执行;当连接到低电平时,复位后直接从外部ROM的0000H开始执行。由于我们的程序存储在单片机的内部,因此EA应该连接到高电平,以确保单片机从内部读取程序以执行。

  图3-3单片机最小系统

  3.3液晶显示电路

  3.3.1 1602液晶简介

  1.1.1液晶显示器是一种具有尺寸小,重量轻和功耗低特征的显示装置。由于其功耗低,显示的信息量大(例如,文本,图形,曲线等),无电磁辐射且使用寿命长等优点,所以现在已被广泛用于便携式电子产品中。

  1.1.2系统显示工业字符LCD模块1602的使用,该模块可以2行显示16个字符,并且可以轻易显示英文字母包括大小写,阿拉伯数字,常用符号等。您还可以通过定制显示简单的汉字。此系统中使用的1602是一种低廉的LCD显示器,可以显示2行,每行16个标准字符。广泛用于通讯系统,智能操作设备和办公设备的自动化。因为它的主要功能是显示ASCII字符,所以它被称为“字符显示设备”。此系统中使用的1602是一种性价比非常高的的LCD显示器,可以显示2行,每行16个标准字符。被广泛应用于通讯系统、智能操作设备和办公设备的自动化。因为它的主要功能是显示ASCII字符,所以它也被称为“字符型显示装置”。如果没有带有合适的汉字库来表示汉字的液晶显示器,则第一步是获取所需的汉字或图形子模型数据。子模块软件不能直接提取子模块的5×8点矩阵的数据,而是可以从模具中手动提取中文字体。第二步是将获取的汉字子模型数据保存在LCD存储器中。

  1602液晶分为带背光和不带背光两种,基控制器大部分为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别,两者尺寸差别如下图(图3-4)所示:

  图3-4液晶尺寸说明

  1602LCD液晶显示器的主要技术参数:

  ?◆显示容量:16×2个字符

  ?◆芯片工作电压:4.5—5.5V

  ?◆工作电流:2.0mA(5.0V)

  ?◆模块最佳工作电压:5.0V

  ?◆字符尺寸:2.95×4.35(W×H)mm4.5—5.5V

  3.3.2液晶引脚说明

  1602的引脚如表3-2所示:

  表3-2 1602液晶引脚说明

  编号符号引脚说明编号符号引脚说明

  1 VSS电源地9 D2数据

  2 VDD电源正极10 D3数据

  3 VL液晶显示偏压11 D4数据

  4 RS数据/命令选择12 D5数据

  5 R/W读/写选择13 D6数据

  6 E使能信号14 D7数据

  7 D0数据15 BLA背光源正极

  8 D1数据16 BLK背光源负极

  第1脚:接地电源VSS。

  第2脚:5V为正电源为VDD。

  第3脚:VL是用于调整LCD对比度的端口。对比度的强度由电源确定。对比度可以通过10k电位器进行调节。

  第4脚:RS是寄存器选择,高级数据寄存器和低选择指令寄存器。

  第5脚:读/写R/W信号线,高电平低电平的读操作,写操作。RS和R/W之间的关系确定当前状态。例如,如果两端均为0,则可以编写命令或显示地址。如果两端均为1,则可以读取占线信号。当RS为1时,R/W为0,并且可以输入数据。

  第6脚:为使能端E,当E端从1变为0时,开始执行液晶模块中的命令。

  第7到14脚:D0-D7是8位的双向数据线

  第15脚:背光源正极。

  第16脚:背光源负极。7为8位双向数据线。

  3.3.3指令介绍

  (1)清屏指令

  指令如表3-3所示

  表3-3清屏指令功能表

  功能:

  1)删除液晶屏幕,即DDRAM中全部的内容都添加到“空白”ASCII代码20II中;

  2)要将光标返回到其原始位置,请将光标返回到LCD屏幕的左上角;

  3)将将地址显示器(AC)值重置为零

  (2)光标归位指令

  指令如表3-4所示

  表3-4光标归位指令功能表

  功能:

  1)将光标重新定位在显示屏幕的左侧上方;

  2)地址计数器(AC)值设置为零;

  3)所有DDRAM内容均保持其原始内容不变;;

  (3)进入模式设置指令

  指令如表3-5所示

  表3-5进入模式设置指令功能表

  功能:当定入一位数据之后光标移动的方向将被设置,参数设定的情况如下:

  (4)显示开关设置指令

  指令如表3-6所示

  表3-6显示开关设置指令功能表

  功能:能够控制显示器的开关与否,光标的显示或者关闭,光标是否需要闪烁,参数设定的情况如下:

  (5)设定显示屏或光标移动方向指令

  指令如表3-7所示

  表3-7设定显示屏或光标移动方向指令功能表

  功能:将光标移动或者整个显示屏幕移动位置,参数设定的情况如下:

  (6)功能设定指令

  指令如表3-8所示

  表3-8功能设定指令功能表

  功能:设置了数据总线中的位数和显示的行号类型。其主要参数设置为:

  (7)设定CGRAM地址指令

  指令如表3-9所示

  表3-9设定CGRAM地址指令功能表

  功能:置用于存储数据的下一个CGRAM地址。字符号是DB5DB4DB3。用于显示该字符的字符地址(000-111)可以同时定义8个字符。行号是DB2DB1DB0(000-111)8行。

  (8)设定DDRAM地址指令

  指令如表3-10所示

  表3-10设定DDRAM地址指令功能表

  功能:下一次要存入数据的DDRAM地址将被设置。

  (9)读取忙或AC地址指令

  指令如表3-11所示

  表3-11读取忙或AC地址指令功能表

  功能:设置下一个要保存数据的DDRAM地址

  1)HF(忙碌信号)读取。如果液晶显示器忙碌则BF=1,且单片机发送的数据和命令将无法被接收。当BF=0时,情况则恰恰相反。

  2)接收到地址计数器(AC)的内容。

  (10)数据写入DDRAM或者CGRAM指令

  指令如表3-12所示

  表3-12数据写入DDRAM或者CGRAM指令指令功能表

  功能:

  1)DREAM上写有字符代码是,LCD会立即显示相应的字符;

  2)OGRAM被存入由使用者设计的图案

  3.3.4液晶显示模块电路

  LCD模块电路的连接图如图3-5所示。引脚1和2分别连接到电路的GND和VCC。这两个引脚是LCD操作的电源输入引脚。第三个引脚通过10K电位器接地,可以通过调节电位器来调节液晶的对比度。第四个引脚是液晶的寄存器控制引脚,它连接到微控制器的P13引脚。第五个引脚是LCD读写控制引脚,该引脚连接到微控制器的P14引脚。引脚6是LCD的启用引脚,该引脚连接到微控制器的P15引脚。引脚7到引脚14是LCD数据/地址8位总线,该总线连接到微控制器的P0端口。最后,第15引脚和第16引脚是LCD背光电源引脚,直接连接到系统VCC和GND

  图3-5液晶模块连接图

  3.4时钟模块

  3.4.1 DS1302简介

  本设计所采用的DS1302是由美国DALLAS公司推出的具有RAM的高性能,低功耗的实时时钟电路,主要的特色功能是使用串行数据传输,可以为电源故障保护电源提供可编程的充电功能,并可以关闭充电功能。使用普通的32.768kHz晶体振荡器,它可以计时年,月,日,星期,小时,分钟和秒,并且还具备闰年补偿机制。随着科学技术的进步,现今社会有许多流行的串行时钟电路,例如DS1302,DS1307和PCF8485等。这些电路的接口简单,便宜且易于使用,并且被广泛使用。使用三线接口,能够实现和CPU的同步通信,而突发模式可用于一次传输多个字节的时钟信号或RAM数据。DS1302具有一个31×8 RAM寄存器,用于临时存储数据,是DS1202的升级产品,与DS1202兼容,但增加了用于主电源和备用电源的双电源引脚,还提供了使用备用电池为备用电源使用涓流充电的功能。

  3.4.2引脚说明

  DS1302引脚封装如图3-6所示。

  图3-6 DS1302引脚图

  1)Pin1:Vcc2作为主电源。

  (2)Pin8:Vcc1是备用电源。即使关闭主电源,时钟也可以继续运行。DS1302由Vcc1或Vcc2中的较大者供电。当Vcc2大于Vcc1+0.2V时,Vcc2为DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。

  (3)Pin2、3:X1,X2是振荡源,外部连接了32.768kHz晶体振荡器。

  (4)Pin5:RST是复位/芯片选择线。通过将RST输入驱动为高电平来开始所有数据传输。RST输入具有两个功能:首先,RST打开控制逻辑,从而允许将地址/命令序列发送到移位寄存器;其次,RST提供了一种终止单字节或多字节数据传输的方法。当RST为高电平时,所有数据传输都会初始化,从而使DS1302能够正常工作。如果在传输过程中将RST设置为低电平,则此次数据传输将终止,并且I/O引脚变为高阻抗。在上电操作期间,RST必须保持低电平,直到Vcc>2.0V。仅当SCLK为低电平时,RST才能设置为高电平。

  (5)Pin6:I/O是串行数据的输入和输出端(双向)。在输入控制指令字之后,在SCLK时钟的下一个上升沿,数据被写入DS1302,并且数据输入从低位bit 0开始。类似地,在紧接8位控制指令字之后的下一个SCLK脉冲的下降沿读取DS1302的数据。读取时从低位0到高位7

  (6)Pin7:SCLK为时钟的输入端。

  3.4.3时钟芯片DS1302的工作原理

  (1)时钟芯片DS1302的工作原理

  在进行每个读写程序之前,必须先初始化DS1302,首先将SCLK端设置为“0”,然后将RST端设置为“1”,最后提供SCLK脉冲;读/写时序如下图3-8所示。DS1302的控制字如图3-7所示。该控制字的位7必须设置为1。如果为0,则DS1302不能读取或写入。对于位6,如果程序读/写RAM=1,当进行时间读/写时,CK=0。位1至位5指操作单元的地址。位0是读/写操作位。执行读操作时,该位为1;该位为0时指示执行写操作。控制字节始终从最低位开始输入/输出。表3-14列出了DS1302的日历和时间寄存器的内容:“CH”是时钟暂停标志位。当该位置1时,时钟振荡器停止工作,DS1302处于低功耗状态。当该位为0时,时钟开始运行。“WP”是写保护位。在对时钟和RAM进行任何写操作之前,WP必须为0。当“WP”为1时,写保护位将阻止任何寄存器的写操作。

  (2)DS1302的控制字

  如图3-7所示为DS1302的控制字。控制字节的最高有效位(第7位)必须为逻辑1。如果为0,则无法将数据写入DS1302。如果第6位为0,则表示存取日历时钟数据,而1表示存取RAM数据。位5至1表示操作单元的地址;最低有效位(位0),为0时,表示要进行写操作,而1表示进行读操作,则控制字节始终从最低位输出。

  图3-7 DS1302控制字

  (3)数据输入输出

  在输入控制指令字之后,在SCLK时钟的下一个上升沿,数据被写入DS1302,并且数据输入从低位(即位0)开始。类似地,在紧接8位控制指令字之后的下一个SCLK脉冲的下降沿读取DS1302的数据,读取时从低位0到高位7,如下图3-8所示:

  图3-8 DS1302单字节读写时序图

  (4)DS1302的寄存器

  DS1302具有12个寄存器,其中7个与日历和时钟相关,并且所存储的数据采用BCD代码的形式,时间寄存器和日历及控制字见表3-14。

  表3-14 DS1302寄存器表

  3.4.4 DS1302模块电路图

  DS1302模块的电路图如图3-9所示,第1脚和第4脚分别接到了电路的VCC和GND,这2个脚是芯片工作的电源输入脚。第8脚接了一个3V的纽扣电池作为时钟芯片的后备电池,可以保证断掉主电源后时钟继续行走。第2和第3脚接了一个32.768K的晶振给芯片提供时钟脉冲,最后,第5、6、7依次连接到单片机的IO口,进行数据的传输。

  图3-9 DS1302模块电路图

  3.5光照强度采集电路

  3.5.1光敏电阻概述

  光敏电阻器(photovaristor)又叫光感电阻,是利用半导体的光电效应制成的一种电阻值随入射光的强弱而改变的电阻器,其工作原理是基于内光电效应;入射光愈强,电阻值愈低,入射光愈弱,电阻值愈大,在无光照时,其呈现为高阻状态,一般可达1.5MΩ。光敏电阻器通常用于光测量,光控制和光电转换(将光的变化转换为电的变化)。通常,将光敏电阻制成薄的结构以便吸收更多的光能。当受到光照射时,半导体芯片(光敏层)激发电子-空穴对参与导电,从而增强电路中的电流。

  光敏电阻的重要特性是其电阻值随环境光的变化而变化。当环境光相对较强时,其电阻值将减小。反之,当环境光线较弱时,其电阻值增加,这与其自身的生产材料有关。

  本文所设计的智能窗帘控制也同样是利用了光敏电阻的这一特性。如果环境光强,例如在白昼,则光敏电阻的电阻会变得很小,传感器信号处理电路将根据其电阻进行相应处理。相反,当环境光线较弱时,例如黑夜或阴天,电阻值将变大,并且传感器信号处理电路将在处理后将这些信号传递到单片机控制电路,从而实现窗帘的开启或闭合。

  3.5.2光敏电阻工作原理

  光敏电阻是一种特殊的电阻器,它主要是用金属的硫化物、硒化物和碲化物等半导体制成,其工作原理主要是基于内光电效应。在无光照或暗环境里,它的电阻值呈高阻状态,暗电阻一般能够达到1.5MΩ。只要光子能量大于半导体材料的禁带宽度,则价带中的电子吸收一个光子的能量后可跃迁到导带,并在价带中产生一个带正电荷的空穴,这种由光照产生的电子—空穴对增加了半导体材料中载流子的数目,使其电阻率变小,从而造成光敏电阻阻值下降。光照越强,电阻越低。入射光消失后,由光子激发产生的电子-空穴对将逐渐复合,并且光敏电阻的电阻也将逐渐恢复到其原始值。

  3.5.3光敏电阻的分类

  光敏电阻,又叫光导管,常用的制造材料为硫化镉。其特性为,在特定波长的光照下,其阻值迅速减小。根据光敏电阻的光谱特性,可将其分为三种类型。紫外线光敏电阻器:对紫外线敏感,用于检测紫外线,其中包括有硫化镉,硒化镉光敏电阻器等;红外光敏电阻:主要是硫化铅、碲化铅和硒化铅、锑化铟等光敏电阻,广泛用于国防,科研和导弹导航,天文检测,非接触式测量,人体疾病检测,红外光谱,红外通讯以及其他工农业生产;可见光光敏电阻:包括硒,硫化镉,硒化镉,碲化镉,砷化镓,硅,锗,硫化锌光敏电阻等。主要用于各种光电控制系统,如光电自动开门,自动开关的导航灯、路灯和其他照明系统,自动供水和自动止水装置,机器上的自动保护装置以及“位置检测器”,薄型部件厚度检测器,相机自动曝光装置,光电计数器,烟雾报警器,光电跟踪系统等。

  3.5.4光敏电阻的主要参数

  敏电阻的主要参数有亮电阻,暗电阻,光电特性,光谱特性,频率特性,温度特性。在光敏电阻两端的金属电极之间加上电压时,便会产生电流从中流过。当以适当的波长照射光敏电阻时,其中流过的电流就会随着光强度的增加而增加,从而达到光电转换的现象。在没有极性,纯粹将其当作电阻使用的期间,电压可以加直流也可以加交流。

  3.5.5 ADC0832简介

  ADC0832是一种具有8位分辨率的A/D转换芯片,其最高分辨率可以达到256级,能够适应一般的模拟转换要求。内部电源输入和参考电压的复用使得芯片的模拟电压输入一直介于0?5V之间。ADC0832为8位分辨率A/D转换芯片,其最高分辨可达256级,可以适应一般的模拟量转换要求。其内部电源输入与参考电压的复用,使得芯片的模拟电压输入在0~5V之间。芯片的转换时间仅为32μS。基于双重数据输出,可以用作数据验证来减少数据的误差。转换速度快,稳定性强。独立的芯片的输入使连接多个设备和控制处理器时会更加容易。通过DI数据输入端,可以轻松实现通道选择功能。当作为单通道模拟信号输入时,ADC0832的输入电压为0?5V,且在8位分辨率下的电压精度为19.53mV。如果将其用作IN+和IN-的输入时,可以将电压值设置在某个较大的范围内,从而增加了转换的宽度。但值得注意的是,在输入IN+和IN-期间,如果IN-的电压大于IN+的电压,则转换后的数据结果始终为00H。

  3.5.6光照强度采集电路

  本设计的智能窗帘有光控自动开关的功能,因此必须采集环境中的光照强度,以便进行光照强度的计算和窗帘开关的控制。光照强度采集使用的方案是光敏电阻,由于光敏电阻采集到的是光照强度的模拟量,因此使用ADC0832将光照模拟量转为数字量再传给单片机进行处理。该模块的电路图如图3-10所示。

  图3-10光照强度采集电路

  3.6电机驱动模块

  步进电机又叫做脉冲电机,它是一种开环控制元件的电动电机,它可以将电脉冲信号转换为角位移或线性位移。在没有过载的情况下,电动机的转速和停止位置仅仅取决于脉冲信号的频率和脉冲数,不受负载变化的影响。当步进驱动器接收到脉冲信号时,它将驱动步进电机,按照设定的方向旋转固定角度,称为“步距角”,并且其旋转以固定角度逐步运行。可以通过控制脉冲数来控制角位移量,以达到精确定位的目的。

  由于单片机的I/O口直接输出的电流非常弱小,无法直接使步进电机进行转动,因此,有必要在单片机和步进电机之间增加一个由TI公司生产ULN2003作为电机的核心。ULN2003主要适用于需要高速大功率来驱动的各种系统。

  电机驱动电路如图3-11所示。

  图3-11电机驱动电路

  3.7按键输入模块

  键盘是人与单片机沟通主要的装备。站在软件设计的方向上来看,仅仅读取当前时刻的键盘的状态是不够的,还有不少问题需要解决,否则,人们在操作键盘时经常会出现误触等情况。对于单片机而言,最常用的主要是独立/矩阵式键盘。他们都有自己的特点。独立式键盘要求的电路容易,编写程时也不复杂。它通常用于不需要高硬件要求的简单电路中。矩阵式键盘与独立式键盘有很大不同。矩阵式键盘在硬件电路上比独立式键盘复杂得多,程序上的算法费事得多,但是在俭省端口资源方面有很多优点,因此它更适合于多键电路。。

  本设计只有5个按键,按键数量较少,只有5个按键,故采用了独立的按键方式,其5个按键分别为“改变模式”、“时间”、“光强值”、“+”、“-”。具体如图3-12所示:

  图3-10按键电路

  第4章软件设计

  4.1程序语言及开发环境

  本设计采用C作为程序语言,C语言是一种面向过程的、抽象化的通用计算机程序设计语言,被广泛的应用于底层开发。C语言具有功能丰富、表达能力强、使用灵活方便、应用面广、目标程序效率高、可移植性好,既有高级语言的优点,又有低级语言的特点。它由美国贝尔实验室的Dennis M.Ritchie于1972年推出,1978年,Brian W.Kernighan和Dennis M.Ritchie合著了影响深远的名著The C programming language,这本书中介绍的C语言成为了后来广泛使用的C怨言伯南奔的基础,他是实际上第一个C语言标准,C语言问世后得到迅速推广,它的应用范围广泛,数据处理能力也很强,适用于编写系统软件。

  Keil C51是由美国Keil Software生产的单芯片C语言软件开发系统,与51系列兼容。与汇编语言相比,C语言在功能、结构、可读性和可维护性方面均具有明显的优势,因此易于学习和使用。Keil提供了一整套完整的开发解决方案,其中包括C编译器、宏汇编、连接器、库管理和强大的仿真调试器。将这些部分通过一个集成的开发环境进行组合。运行Keil软件需要WIN98,NT,WIN2000和WINXP等操作系统。如果您使用C语言编程,那么Keil几乎是您的最佳选择。即使您只使用汇编语言而不用C语言,它易于使用的集成环境和强大的软件仿真调试工具也可以使您事半功倍。

  4.2程序流程图设计

  4.2.1总体程序流程图设计

  本系统的流程如图4-1所示。首先,初始LCD和时钟芯片,然后进入循环过程。包括读取时钟芯片的日期和时间数据,然后将其显示在1602 LCD上,然后读取光强度并将其显示。再往下是按键扫描。如果检测到有按键被按下,则根据不同的按键来处理不同的任务。然后根据不同的模式,进行不同的窗帘开关控制。如果处于手动模式,则根据窗帘的打开和关闭按钮控制窗帘。如果模式处于定时,则根据设置的时间来控制窗帘。确定当前光线是否高于设定的控制阈值,如果是,则关闭窗帘,否则打开窗帘。至此,一个周期结束。

  图4-1主函数流程图

  4.2.2 1602液晶程序设计

  液晶开始显示之前,必须先确定一个位置,表示要在哪个地方显示,比如第2行第3列的位置。在完成坐标定位之后就可以开始显示内容了。液晶在显示的时候,是一位一位完成的。比如数字“123”,就会先显示百位的“1”,然后是十位的“2”,最后是个位的“3”。显示字符串的话,也是一样的道理,比如显示“hello”,也是从最开始的字母“h”开始显示,一位一位的完成,直到显示完字母“o”,才完成一次显示任务。要说明的是,每次显示一串字符或一个数字的时候,只需在最开始的时候完成一次定位,之后每显示完一个字符,会自动跳到下一个位置的,不需要每个字符都定位一次。

  图4-2液晶显示流程图

  4.2.3读出DS1302的时间信息

  液晶上面的时间会不断的走时刷新,就是靠单片机不断去读DS1302,并发到显示屏更新的。读取时钟芯片的时间信息主要流程是,写入年份寄存器地址0x8D,接着就读取的年份的数据。然后用同样的方式,依次写入寄存器地址0x89、0x87、0x8B、0x85、0x83、0x81,分别读取到月、日期、礼拜、小时、分、秒钟。具体读取的流程图如图4-3所示。

  图4-3读取DS1302时间信息流程图

  第5章硬件组装与调试

  5.1元器件的选择与测量

  本次设计的元器件主要有:STC89C52单片机、时钟芯片、AD芯片、电机驱动芯片、晶振、电阻、电容、开关、按键、步进电机、LCD等。这些元器件在焊接前都需要我们认真搜寻资料,了解每个部件的特性再进行焊接。这些部件在网上很容易买到。其中焊接时要注意元件极性,电阻/电容大小、芯片引脚顺序等。在不知道电阻大小的情况下,可以用多用表进行测量;电容和晶振等的大小会标注在元件自身上;元件的正负极可以遵循长正短负的基本原则,一些特殊元件可以通过查询资料获知其正负极。

  5.2元件的焊接与组装

  元件通常使用焊接和面包板插接的方式,无论采用哪种方式均应注意以下几方面。

  (1)尽可能的将所有元器件在组装前全部进行测试,保证所用元器件均为可用。

  (2)集成电路的拼装的方向应一致,以便于正确的焊接和走线。

  (3)分离组件时,应仔细识别设备的正向和负向,并且标识应位于易于观察和检查的位置。对于有极性的部件,在拼装的过程中必须特别注意它们的极性,不要装反,否则将导致实验失败。

  (4)为了便于对焊接的检查和对电路的后续检查,可以根据电路中接线的不同功能选择不同颜色的导线。当然,使用一种颜色也是可以的。

  (5)在实际焊接的过程中,连线需要尽可能简单且方便你进行连接。连线不能直接过集成电路芯片,必须从旁边绕。同时,应尽可能做到连线不会相互堆叠,并尽量不要穿过电路中的组件。

  (6)为了使电路正常工作和调试,必须将所有接地线连接在一起以形成一个公共参考点。正确的组装方法和合理的构造不仅可以使电路整体看起来乾净、雅观、而且会使之后的检查、调试和故障排除更加方便。如果能够在装配前,绘制出装配图,那么便会事半功倍,从而使装配更快,更好。

  5.3电路的调试

  电路的调试通常包括测试和调整两个方面。测试是指将电路组装完毕后测量电路的各项参数和工作状态,而调整则是根据测试的结果来修改电路的某些参数以满足设计需求。在调试之前,应根据需求拟定测试项目、测试步骤、调试方法和所使用的仪器,做到心中有数,并确保成功完成调试。

  5.3.1调试方法

  调试的方法主要有两个。第一个方法是在安装时一起调试。把复杂的电路按照不同的功能分为不同的单元分别进行装配和调试,在单元调试的基础上,不断地扩大安装和调试的范围,直至完成整个全部的调试。这种方法在新电路中使用的更多。第二个方法是在整个电路的系统完全焊接之后再执行调试。此方法更适合电路相对简单且系统不复杂的电路。

  5.3.2调试步骤

  (1)通电前检查

  在电路正常焊接完毕后,请勿急于接通电源。首先需要根据原理电路细心检查和对比,电路中的接线是否正确,包括错线,少线,多线和短路(尤其关注间距很小的引脚及焊点间),还要检查每个组件使用的引脚数是否与设计上一致。在检查线路时,最好使用多用表的“Ω×1”挡进行检查,并尽可能地直接的测量部件的引脚,这样做的优点是可以顺带检查电路各部分的联通性。

  (2)通电观察

  检查电路安装无误后接通电源(先将电路的电源开关关闭,等到将电源连线接通之后再将电电源开关打开)。请勿在刚接通电源后立即测试电路功能。首先,观察整个电路是否异常,电路中是否有组件烧坏,是否泄电,电源是否短路和开路等。如果在测试期间电路发生异常,首先应立即关闭电源,检查并维修,然后重新通电,进行测试。最后根据要求去测量各部件引脚的电压,而不仅仅是测量各个电路的总电源电压,以确保元器件能够维持正常。

  (3)单元电路调试

  调试单元电路时,应首先明确本部分的调试要求。调试顺序应基于电路原理图中的信号流进行,以便可以逐步调试整个电路,并且可以将先前调试的电路的输出信号用作为下一阶段的输入信号。从而确保电路的调试更加顺畅和方便。

  单元电路调试的方式有两种,分别为静态调试和动态调试。

  静态调试通常是指在不加任何输入信号或在没有外部信号干扰的情况下,测试整个电路中各点的电位。通过它,可以尽早发现毁坏的关键部件。

  动态调试一般是指用上一级的输出或自身的信号来测试此单元电路的各种指标是否满足要求。

  对于信号产生电路,通常来说只看动态指标即可。将静态测试和动态测试的结果与设计的指标进行比对,然后进行全方位分析以便对电路和参数进行较为合理的校正。调试过程中应有详细记录。

  (4)整机联调

  在调试了每个单元的电路之后,由它们组成的整个电路的性能不一定良好,因此整个电路也需要进行调试。整体电路在调试时主要是观察和测量动态性能,将测量出的结果与设计的指标进行逐一比对,找出其中问题并提出解决方案,随后修改电路及其参数,直到所有电路的性能能够完全满足设计的要求为止。