• 2.42 MB
  • 2022-04-22 13:47:21 发布

实用智能窗帘控制器的设计.doc

  • 83页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'刘浩本科毕业设计·实用智能窗帘控制器的设计实用智能窗帘控制器的设计1绪论1.1研究意义随着电子信息技术迅猛发展,人们对智能家居的要求越来越强烈,方便及舒适的智能窗帘是适应现代化办公和生活环境的迫切需要。智能家居控制系统必将成为未来住宅的发展趋势,走进普通居民的家居,进一步提高居民的家居生活品质与品味[1]。智能窗帘作为其中的一个重要组成部分,其发展也标志着智能家居的发展程度,现在的智能窗帘控制系统集现代光、机、电为一体,是智能家居的理想选择,尽力达到完美与和谐的统一。本设计根据现代化办公和生活环境的迫切需要,以单片机STC89C54RD+为主控芯片,利用光强度传感器BH1750FVI、温湿度传感器、红外遥控器、红外对管等传感器设计一个实用智能窗帘控制器。其取代了传统的手动推拉窗操作,以一种人性化的工作模式适应人们日益追求简单、方便、舒适的生活方式。1.2实用智能窗帘控制器的设计的发展自从世界上第一幢智能建筑1984年在美国出现后,美国、加拿大、欧洲等经济比较发达的国家在智能家居的设计上也提出了各种方案[2]。智能窗帘作为其中的一个重要组成部分,其发展也标志着智能家居的发展程度,智能窗帘是未来居家生活的发展方向,虽然现在普及比较少且大多是有钱人的专属,但是随着电子技术的飞速发展和电子元件价格的下降,具有功能完备、安全性较高、便于窗帘的维护、性价比高等优点的智能窗帘得到窗帘设计者的青睐。1.2.1基于无MCU智能窗帘控制器的设计无MCU的智能窗帘控制器典型设计原理如图1.1,其核心电路为CK-95专用窗帘驱动模块。该控制器把控制信号经逻辑变换和电平变换后送到CK.95窗帘驱动模块控制电机工作,根据控制信号执行输出从而控制窗帘的开和关[3]。奥兰AL.CK01由驱动模块、电源模块、遥控接收及定时电路、控制电路等组成,其体积小巧,安装方便。但是,这种设计的控制器没用到微处理器MCU,使其控制不灵活,每一种功能上改动必会引起硬件上的变化,显得并不智能,不能满足高效、智能窗帘控制机的要求。第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计·信号变换电路遥控译码电路红外就收电路S1S3S4S2自动停止主机开/关关副机开/关关去副机光敏电阻CK.95窗帘驱动模块mSP.18D电源模块220V~VDDR图1.1典型无MCU的智能窗帘控制器原理图1.2.2基于PLC智能窗帘的设计基于PLC智能窗帘的设计框图如图1.2所示。接通开关后,打开PLC电源,PLC启动后就对煤气检测模块、烟雾检测模块、温度检测模块、红外线检测模块等进行检测[4]。PLC根据这些信息自动控制窗户或者窗帘的开关。该智能窗设计最大的特点是功能模块化,PLC的接口较多,使得该设计的制作和编程较为方便。显然PLC的功能强大可以完成一个智能窗户的所有功能,其利用输入的各个检测信号输入到预处理模块进行电量转换,并将信号输入到PLC处理,控制输出模块的动作,进行智能窗户的设计,功能十分完备。但是,其价格昂贵,一个低端的PLC裸机就高达一千元左右,再加上其体积庞大不易安装、I/O接口的浪费,显然是大材小用了。第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计控制按钮电源气敏传感器烟雾传感器湿度传感器红外传感器温度开关输入模块FXIN-24MR输出模块直流电机排气扇声光报警器指示灯图1.2基于PLC的智能窗帘的设计框图1.2.3基于网络化智能窗帘控制器的设计基于Zigbee技术设计的智能窗帘网络化控制系统,其典型的原理框图为图1.3。利用系统网络的拓扑和采用Zigbee网络技术来对整栋办公大楼的窗帘进行集中控制管理[5]。根据室外温度、光照强度等参数控制窗帘或者窗户,同时可以起到节约能源和美化整栋建筑幕墙的作用。但是这种方案把每个办公室的温度和光强的情况统一化了,没有按照每个办公室的实际需要而进行统一的管理和控制,使其在广泛利用方面有一定的局限性。图1.3基于Zigbee技术的智能窗帘网络化控制系统开始程序初始化判断窗帘初始化状态打开关闭是否有强光或者较大湿度是否有弱光或者湿度低否否向Zigbee模块发射关窗信号向Zigbee模块发射开窗信号A第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计1.3研究内容设计内容:设计一个智能窗帘,用STC89C54RD+为主控芯片,以数字光强度、湿度、温度等传感器作为外围电路的窗帘控制器。将各传感器的信号送入单片机,利用单片机发出控制信号去驱动电机转动,完成一个窗帘控制器的设计,使其具有功能完备、安全性较高、便于维护等特点。该控制器能检测环境的光线强度和湿度,并根据自己设点值自动打开窗帘的打开程度;定时早晚开关窗帘;红外遥控远程控制窗帘的开关和参数设置;能用液晶显示实时显示工作参数等。1.4论文结构整个论文结构安排如下:第1章绪论:介绍智能窗帘的背景、意义和发展现状第2章系统硬件设计:讲述本设计所用到的各硬件模块的功能和实现方案第3章系统硬件模块:系统的介绍硬件系统的总体电路和各个模块硬件功能的实现第4章系统软件设计:系统地介绍软件流程、各模块的软件设计和总体程序组合第5章系统的调试:从模块到整机的调试第6章结束语2系统硬件设计2.1功能要求主要功能:⑴光线强度检测:通过光线强度传感器实时检测光线强弱,控制窗帘打开的合适程度,为室内提供设定的光线强度;⑵时钟定时及万年历功能:能提供一个简单的万年历功能并能够定时早晚开关窗帘;⑶红外遥控远程控制:可以用遥控进行窗帘的开和关,以及各个参数的设置;⑷湿度检测:能完成湿度检测,当房屋内湿度太大能自动打开窗帘进行通风;⑸各参数(光线强度、湿度、工作模式、万年历等)的实时显示;⑹窗帘的完全关闭和打开的自动检测及控制等。根据设计的需要,将单片机最小系统、传感器模块、液晶12864显示、电机驱动电路和电机模块、红外遥控器和遥控接收模块、电源模块等有机组合完成以上的设计要求。第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计2.2设计方案利用单片机STC89C54RD+为主控芯片,以数字光强度、湿度、温度、红外对管等传感器为外围电路的有机结合,送入单片机中去驱动电机的转动。最终完成一个具有功能完备、安全性较高、便于窗帘维护等特点的窗帘控制器,总体设计框图如图2.1。模块化设计:⑴单片机最小系统模块:单片机的电源电路、开关、必要的时钟电路、复位电路及按键;⑵传感器模块:BH1750FVI是用16位数字光强度传感器,利用内部的模数转换器把采集光的强度实时送到STC89C54RD+中进行处理,理将温湿度传感器等信号通过电量转换送入单片机[6];⑶显示模块:通过液晶12864显示时间和工作模式及其参数等;⑷电机模块:经过单片机对各种传感器的实时信息输入,根据预先设置好的参数对电机进行控制,主要为正转和反正的控制;⑸遥控模块:通过红外解码,进行遥控器的重新设计;⑹红外对管的模块,设计红外对管电路,能完成窗帘的完全关闭和打开的自动检测及控制等。STC89C5212864液晶显示红外遥控BH1750FVI数字光强度监测温湿度监测复位电路时钟电路(走时、定时)红外对管模块完全打开关闭检测电机模块供电模块模式选择(手动、自动)图2.1窗帘总体设计框图2.3小结本章主要讲述了该设计要完成的主要功能和设计方案,根据功能确定智能窗帘设计的总体框图,以及其硬件电路设计的整体情况。完成了分析功能要求和确定设计方案。第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计3系统硬件模块3.1系统总体电路本设计的系统总体电路如图3.1所示。控制部分是以STC89C54RD+单片机为核心的最小系统[7];液晶12864显示各参数包括光线强度、湿度、工作模式、万年历等;把BH1750FVI实时采集光强信号和DHT11实时采集温湿度值送入最小系统进行处理;红外接收头接收遥控输入数据主要为功能键和数值键;DS1302提供一个万年历的功能,让预设时间和万年历时间一致,完成早晚开窗帘的开和关;2对红外对管分别完成完全打开和完全关闭的检测功能,使得电动机在完全打开和完全关闭时停下来。图3.1系统总体电路图第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计3.2STC89C54RD+单片机最小系统主控制器在一定程度上也决定了系统的整体性能,本设计选择的主控芯片是STC89C54RD+单片机。STC89C54RD+是宏晶科技公司推出的抗干扰性强、低功耗、高速、完全兼容传统8051指令代码且具有良好性价比的单片机。此单片机具有双倍速功能,支持6周期模式运行;还具备ISP在线系统编程功能,不用购买额外的编程器,为开发带来方便;最主要的是其具有16k字节Flash程序存储器和1280字节的RAM数据存储器,可以大大的满足使用者在编写复杂程序时遇到容量不够用的问题。本设计使用的传感器和外围电路较多,因此需要较大的存储容量,无需扩展外部程序存储器和数据存储器。考虑以上因素STC89C54RD+单片机是最好的选择,其最小系统为图3.2。图3.2单片机最小系统3.3LCD12864显示模块本设计采用带有中文字库的液晶显示器12864,显示的分辨率是128*64,内置有8192个16*16点汉字和128个16*8点的ASCII字符。该模块的接口方式灵活、简单,让程序的编写也较为方便;同时还具有工作电压低、耗电量低等特点。由该模块构成的液晶显示与同类型图形的点阵液晶显示模块相比,在硬件电路结构和显示程序上都要简洁得多。考虑到要实时显示时间、光线强度、湿度、窗帘模式等参数,从而12864成为本设计的最佳选择。引脚接法如图3.3所示。第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计图3.3液晶显示电路模块3.4时钟模块DS1302是DALLAS公司推出的新一代低功耗、高性能、自带RAM的时钟电路芯片。其可对年、月、日、周日、时、分、秒等精确计时,可以工作在2.5V~5.5V之间,满足本设计的5V电源供电;DS1302内部结构中包含一个为31×8临时性存放数据的寄存器RAM;可以在工作时接上主电源和后备电源双电源引脚,同时也为备用电源CR2032充电。本设计采用三线(SCLK、I/O、RST)接口与单片机之间的同步通信。按照设计需要利用DS1302和单片机结合做有一个万年历模块设计[8]。利用万历年中的时间进行早晚开关窗帘设定,时钟模块的电路如图3.4所示。图3.4时钟模块外围电路3.5光线传感器模块一般测光线强度的电路模块用到光敏电阻,光敏电阻需要用模数转换器将其模拟信号转换为数字信号,电路复杂、费用高而且光敏电阻进行光强度采集不够理想等缺点。从而人们提出了一种利用16位高精度数字光线强度传感器BH1750FVI进行光强度检测仪的设计方案[9]。利用IC总线接口数字型光强度传感器还可以避免额外的模数转换带来的误差,可在12864液晶显示器上进行测量数值的显示。该传感器具有光强度采集精度较高、实时性较强、反应速度非常灵敏等优点,并且电路设计较为简单,第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计利用它的高分辨率可以探测较大范围的光强度变化(1lx.65535lx),可以很好地满足人们办公和居家的使用需要。除电源和接地外,只需使用2个I/O接口就可以实现光线强度的实时读取,使用十分方便,其引脚接法如图3.5所示。图3.5光线传感示模块外围电路3.6红外遥控模块红外遥控系统如图3.6所示,由发射器和接收器两部分组成。遥控发射部分一般包括键盘矩阵、编码调制电路和LED红外发射器;接收部分一般由光、电转换放大器、解调和解码电路等组成。本设计采用的是1838T红外接收头,其体积和普通的三极管样的体积一样大小,使用十分方便,它集成红外线的接收、放大、解调,不需要外接任何其他元件就能完成从红外接收到输出与TTL电平信号兼容的所有工作。1脚接VCC接电源,2脚GND是地线,3脚脉冲信号输出(P33),系统只要检测到INT0信号下降沿就能测出控制指令,从而完成相应的功能。根据遥控信号进行编码[10]、周期波形图如图3.7所示进行解码[11]。1838T红外接收头的引脚排列如图3.8所示。键盘编码调制LED光/电放大解调解码遥控发射器遥控接收器图3.6红外遥控系统框图遥控信号编码波形图遥控信号周期波形图图3.7遥控信号编码、周期波形图第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计图3.81838T的引脚排列3.7温湿度传感器模块DHT11数字温湿度传感器是一个内部包含已校准的数字信号输出温湿度复合型传感器,其应用专用的温湿度传感技术和数字模块采集技术,以确保产品具有很高的稳定性;本设利用其中的测温元件NTC和电阻式感湿元件与一个STC89C54RD+单片机相连接,完成湿度的精确读取;极低的功耗、超小的体积、连接方便(只需用到单片机的一个I/O接口)。在工作中同时提供温度和湿度的实时读取。本设计利用STC89C54与DHT11之间的同步通讯,采用单总线数据格式。一次通讯时间4毫秒左右,传输完整的数据为40bit,高位先出。把数据分为整数部分和小数部分,根据具体格式为:8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据+8bit校验就能提取湿度值[12]。温湿度感器模块如图3.9所示。图3.9湿度传感器模块3.8电机模块步进电机28BYJ48是四相八拍型电机,工作电压为DC5V—DC12V。当对步进电机施加一系列连续不断的控制脉冲时,就可以连续不断地转动[13]。本设计采用的是A.AB.B.BC.C.CD.D.DA.A节拍方式如图3.10所示,当数组中的值改变并完成完成一个循环的时候,转子就转过一个齿距,以此类推地连续工作。其中因为P1的低字节已作为按键使用,所以P1=(P1&0x0f)|(0xf0&FFW[j],使得P1的高字节(FFW[j]的值依j的变化次循环)在不影响P1低字节的变化,去驱动步进电机。因此数组FFW的值为{0x1f,0x3f,0x2f,0x6f,0x4f,0xcf,0x8f,0x9f},使得电动机正转。同理可以利用数组REV的值为{0x9f,0x8f,0xcf,0x4f,0x6f,0x2f,0x3f,0x1f}去完成电动机反转。由于单片机接口信号不够大需要通过第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计ULN2003放大后再连接到相应的电机接口。电机接口的电路如图3.11所示,驱动方式:(4-1-2相驱动),从左到右CCW旋转方向(轴伸端视)。导线颜色123456785红++++++++4橙---3黄---2粉---图3.10步进电机运行方式1蓝---图3.11电动机模块3.9红外对管模块2对红外对管分别完成窗帘的完全打开和完全关闭检测功能,使得电动机在完全打开和完全关闭的时停下来。当窗帘通过D2和D3之间时,D3就会导通,此时P00为低电平,否则就是高电平。同理窗帘通过D4和D5之间时,D5就会导通,此时P01为低电平,否则就是高电平。所以,设定2个全局变量openall(完全打开)和closeall(完全关闭)分别为P00和P01的电平信号值,就可以反馈窗帘的打开程度,以使得电动机在完全打开和完全关闭的时停下来。其电路如图3.12。第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计图3.12红外对管模块3.10电源模块设计直流稳压电源通常由电源变压器、整流电路如图3.13所示、滤波电路和稳压电路这四部分组成。变压器将220V的交流电变换为所需要的电压值;整流电路将正负交替的交流电变换成单向的脉动电压;滤波电路将单向的脉动电压变换成比较平滑的直流电压;稳压电路将平滑的直流电压变成恒定的直流电压,并且当电网电压波动,负载和温度变化时,维持输出的直流电压稳定[14]。±12V电源模块如图3.14所示,主要由核心元件是7812和7912。±5V电源模块如图3.15所示,核心元件是LM7805和7905,为不同的电动机在不同工作环境提供相应的电压。图3.13整流电路模块第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计图3.14±12V电源模块图3.15±5V电源模块C170.33uFC312.2nFC190.1uFC270.01uFC280.01uFC294.7nFC230.1uFC240.1uFC250.033C260.033C322.2nFC304.7nFC21220uFC201uFC22220uFC182.2uFD31N4148D41N4148AB+5.5GNDVin1Gnd2+5V3U3LM7805CTVin2Gnd1.5V3U4LM79053.11遥控版面设计将遥控器进行解码,将原有的遥控版面如图3.16所示,进行重新设计,最终完成适合该设计实际应用的版面如图3.17所示。第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计开停关手/自时间确定0设置123456789图3.17遥控版面重新设计图3.16遥控原有版面重新设计3.12小结本设计使用的模块较多、较散,必须在模块化设计时把每个模块的最终协调工作考虑进去,从而为系统的软件设计提供方便和做好准备。4系统软件设计4.1程序工作流程图4.1.1程序总体工作流程图本设计使用C语言完成程序的编写和调试,Keil软件是目前开发51系列单片机最流行的软件,可直接用串口转USB下载由Keil软件生成的.hex文件进行程序烧录,使用十分方便。与汇编语言比较,C语言有程序灵活性强、代码简洁、容易进行模块化设计等优点[15]。总体工作流程如图4.1所示,首先,进行程序初始化,其包括单片机、液晶、各传感器等模块的初始化。进入界面后按照DS1302原有的时间进行走时,该界面也提供一个万年历的功能,可以使用遥控查看时间包括年、月、日、时、分、秒、星期的查看,如果不进行时间调整,就可以进入自动模式和手动模式的任意切换,默认下为自动模式。第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计初始化是否调整窗帘显示时间是否年、月、日、时、分、秒、星期调整是否让窗帘工作在手动模式否是是否工作在手动模式工作在自动动模式是否退出自动模式是否完成设置否图4.1程序总体工作流程图是4.1.2自动模式工作程序流程图如果工作自动模式的流程图如图4.2所示,则按照预设定的值(最适宜的光线强度值、最大湿度值、早晚开窗时间)进行工作,其中这些值可以用遥控进行修改。系统有个全局变量dayfalg,它可以判断当前时间是否在早晚开窗时间之间,从而决定早晚开窗时间。如果是晚上就完全关闭窗帘,除非用手动模式打开窗帘。在早晚开窗时间之间,如果当前湿度大于设定值,就完全打开穿了通风,如果光线强度值不满足设定要求,就进行正反转自动调节。第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计是是是是图4.2自动模式工作流程图完全打开电动机正转完全关闭电动机反转是当前当前光线是否小于设定要求是否否当前光线是否大于设定要求完全打开是否电动机正转是当前湿度是否大于设点最大值否完全关闭是否电动机反转否当前时间是否在早晚开窗时间之间是否完成设置是否设置各预设定的参数是是否调整适宜光线强度值、最大湿度值、早晚开窗时间工作在自动模式4.1.3手动模式工作程序流程图如果工作在手动模式下流程如图4.3所示,不受设定值的影响,自由地进行打开和关闭窗帘。第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计工作在手动模式是否按下打开否是电动机正转否是是否按下停止是否按下关闭否是完全打开是电动机反转否是是否按下停止是完全打开否否否否否否图4.3手动模式工作流程图4.2BH1750FVI数字型光强度值读取主要程序写好BH1750FVI的初始化程序后,主要通过Single_Read_BH1750(ucharREG_Address)和voidMultiple_read_BH1750(void)子程序读取光线强度数据。ucharSingle_Read_BH1750(ucharREG_Address)////单字节读取//{ucharREG_data;BH1750_Start();//起始信号//BH1750_SendByte(SlaveAddress);//发送设备地址加写信号//BH1750_SendByte(REG_Address);//发送存储单元地址,从最开始的单元开始//BH1750_Start();BH1750_SendByte(SlaveAddress+1);//发送设备地址加读信号//REG_data=BH1750_RecvByte();//读出寄存器数据//第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计BH1750_SendACK(1);BH1750_Stop();//信号停止//returnREG_data;}voidMultiple_read_BH1750(void)///连续读出BH1750内部数据{uchari;BH1750_Start();///起始信号//BH1750_SendByte(SlaveAddress+1);///发送设备地址加读信号//for(i=0;i<3;i++){BUF[i]=BH1750_RecvByte();if(i==3){BH1750_SendACK(1);//还回NOACK//}else{BH1750_SendACK(0);//回应ACK//}}BH1750_Stop();////停止信号//Delay5ms();}4.3红外遥控解码程序及工作程序以下是红外遥控数值键解码的工作程序,例如数字0x16为按键0的操作,flag_num为光标的标记,在设置时光标起指示移动之用。voidir_display(){第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计ucharbuf,i;disp[4]=ircode[2];//数字键的数据码从0到9和加减if(disp[4]==0x16||disp[4]==0x18||disp[4]==0x0c||disp[4]==0x5a||disp[4]==0x52||disp[4]==0x42||disp[4]==0x5e||disp[4]==0x1c||disp[4]==0x08||disp[4]==0x4a){switch(disp[4]){case0x16:buf=0;flag_num++;break;case0x0c:buf=1;flag_num++;break;case0x18:buf=2;flag_num++;break;……}disp[4]=0;//接受下一次做好准备//if(flag_num==1)sum=buf;if(flag_num>2){flag_num=0;sum=sum*10+buf;}for(i=0;i<4;i++)//关闭接收防止进入死循环//ircode[i]=0;}}gkey()为除数字键咦外的功能键程序。voidgkey(){uchari;receive();第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计disp[4]=ircode[2];if(disp[4]==0x45||disp[4]==0x47||disp[4]==0x46||disp[4]==0x46||disp[4]==0x44||disp[4]==0x43){switch(disp[4]){case0x45:kai=1;guan=0;break;//打开//case0x47:kai=0;guan=1;break;//关闭//case0x46:kai=0;guan=0;break;//停止//case0x44:zidong++;break;//手动自动切换//case0x43:wangnianli++;break;//查看万年历//}if(zidong>1)zidong=0;if(wangnianli>1)wangnianli=0;for(i=0;i<4;i++)//关闭接收防止进入死循环//ircode[i]=0;}}4.4温湿度传感器工作程序voidread_init(){DHT=0;//使DHT11低电平并延时至少18ms//delay_ms(21);DHT=1;//置DHT11高电平20~40us,并等待从机相应//delay_10us();……DHT=1;if(!DHT)//从机发出响应信号//{flag=2;while((!DHT)&&flag++);//等待从机发高电平结束//flag=2;第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计while(DHT&&flag++);//开始采集数据//tr_shiZ=read_datadht();//采集湿度整数部分//tr_shiX=read_datadht();//采集湿度小数部分//tr_wenZ=read_datadht();//采集温度整数部分//tr_wenX=read_datadht();//采集温度小数部分//check=read_datadht();//采集校验位//}DHT=0;delay(20);//采集完数据后//}charread_datadht(){uchari,num,tempp;num=0;for(i=0;i<8;i++){flag=2;while((!DHT)&&flag++);//等待50毫秒低电平//delay_10us();//延时判断0还是1//……if(DHT==1){tempp=1;flag=2;while(DHT&&flag++);}elsetempp=0;num<<=1;num|=tempp;}return(num);第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计}湿度(shiZ)的值和预设定值shidu[0]进行比较,如果在设定的早晚时间之间,当shiZ大于shidu[0]就执行打开窗帘通风。4.5早晚定时开窗主要程序在早晚定时的程序中,如果当前时间不在早晚定时之间,dayflag为0,如果当前时间在早晚定时之间,dayflag为1。程序段为:read_init();//读传感器数据//read_time();//读时间子程序//if((am[0]*10000+am[1]*10)<(shi*10000+fen*10)<(pm[0]*10000+pm[1])*10)dayflag=1;elsedayflag=0;利用dayflag就可以控制while里的程序。while((temp>(SET_guangqiang+20)||(dayflag==0))&&(closeall==0)&&zidong){…...}4.6电动机模块以打开窗帘为例,程序段为:dakai(){inti,j;for(i=0;i<16;i++)for(j=0;j<8;j++){{P1=(P1&0x0f)|(0xf0&);DelayMS(1);}}……}第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计其中因为P1的低字节已作为按键使用,所以P1=(P1&0x0f)|(0xf0&FFW[j]使得P1的高字节(FFW[j]的值依j的变化次循环)在不影响P1低字节变化的情况下,去驱动步进电机。同理可以完成关闭窗帘的函数程序guanbi()。4.7红外对管程序控制定义2个全局变量openall(完全打开)、closeall(完全关闭),信号分别从引脚是P1.0和P1.1输入。如果窗帘已完全关闭,则closeall为高电平;如果窗帘已完全打开,则closeall为低电平。例如:intopenall,closeall;while((temp>(SET_guangqiang+20)||(dayflag==0))&&(closeall==0)&&zidong){……}while(((temp<(SET_guangqiang.20)||shiZ>shidu[0])&&(dayflag==1))&&(openall==1)&&zidong){……}只有closeall为低电平才能执行第一个while循环体内容(关闭操作),只有openall为高电平才能执行第一个while循环体内容(打开操作)。4.8系统主程序voidmain(){uintSET_guangqiang;uchari,j;while(1){floattempp;delay_ms(200);//延时200mslcd_init();//初始化LCDInit_BH1750();//初始化BH1750timer0init();int0init();while(1){if(k4flag==1)//如果按下k4即设置键,进入调整时间{lcd_wcmd(0x80);xianshi("智能窗帘时钟");lcd_wcmd(0x91);xianshi("20年月日");lcd_wcmd(0x8A);第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计xianshi("星期");lcd_wcmd(0x9a);xianshi("00:00:00");while(k4flag==1){if(k1==0){read_time();//读时间子程序dingwei();}keyscan();//设置退出if(key4==0){k4flag=0;}}if(key4==0){k4flag=0;break;}}if(k4flag==0){read_init();//读传感器数据read_time();//读时间子程序//if((am[0]*10000+am[1]*10)<(shi*10000+fen*10)<(pm[0]*10000+pm[1])*10)if((am[0]*10000+am[1]*10)<(shi*10000+fen*10)<(pm[0]*10000+pm[1])*10)dayflag=1;elsedayflag=0;keyscan();if(key4==0){k4flag=1;break;}第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计gkey();if(wangnianli){cwannianli();//查看万年历}lcd_wcmd(0x80);xianshi("::");receive();if(ircode[2]==0x0d)//光线强度/湿度/早晚开关时间设置{set();}SET_guangqiang=guangqiang[0]*100+guangqiang[1];tempp=tr_shiZ+tr_shiX+tr_wenZ+tr_wenX;if(check==tempp){shiZ=tr_shiZ;str2[0]=shiZ/10+0x30;str2[1]=shiZ%10+0x30;}k();while((temp>(SET_guangqiang+20)||(dayflag==0))&&(closeall==0)&&zidong){guanbi();//晚上(设定值)或者光线小于设定值关闭窗帘}while(((temp<(SET_guangqiang.20)||shiZ>shidu[0])&&(dayflag==1))&&(openall==1)&&zidong){dakai();//早上(设定值)或者光线大于设定值打开窗帘}while(zidong==0&&(kai==1||guan==1))//手动{gkey();while(zidong==0&&kai==1&&openall==1)//手动下打开{gkey();第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计dakai();}if(openall==0)break;while(zidong==0&&guan==1&&closeall==0)//手动下关闭{gkey();guanbi();}if(closeall==1)break;}}}}}4.9小结本设计的模块较多,要完成整体设计,必须模块化设计。在开始,写一个简单的液晶12864的程序调试,因为利用它可以调试并显示其他模块的工作情况并显示出来。首先,进行显示界面的规划、进行红外遥控解码、功能键等程序的编写,编写好DS1302的工作程序。然后,进行光线强度传感器、湿度传感器、红外对管程序的设计。最后,把各个模块程序加入的主程序中完成整体程序的设计。5系统调试5.1各模块调试5.1.1电机模块调试电动机模块P1=(P1&0x0f)|(0xf0&FFW[j]使得P1的高字节(FFW[j]的值依j的变化次循环)在不影响P1低字节的变化,去驱动步进电机。调节延时函数即控制电动机转速。FFW数组的值为{0x1f,0x3f,0x2f,0x6f,0x4f,0xcf,0x8f,0x9f},这样满足电动机正转。同理同理可以利用REV数组的值为{0x9f,0x8f,0xcf,0x4f,0x6f,0x2f,0x3f,0x1f}完成电动机反转。5.1.2时钟模块调试第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计经过24小时过5秒的走时,测出和网络时间吻合,如图5.1时钟电路和程序正常。测试前的走时24小时之后的走时图5.1时钟走时测试调试5.1.3湿度模块调试图5.2所示为室内湿度值和向湿度传感器加湿气的比较(湿度值55%RH增加到81%RH),湿度传感器模块工作正常。室内湿度值加湿气后的湿度值图5.2湿度传感器调试5.1.4光线模块调试在对着窗子较强的光线强度和室内灯光调试对比(光线强度由224Lx减少到148Lx)测试图如图5.3所示。第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计图5.3光线强度传感器测试调试5.1.5红外遥控按键解码及调试将遥控器按键面板如图5.4所示的按键解码,其对应的键值为图5.5所示。00FF453A00FF463900FF473800FF443B00FF403F00FF433C00FF077800FF156A00FF097600FF166900FF199600FF0D7200FF0C7300FF186700FF5E2100FF087700FF1C6300FF5A2500FF432D00FF522D00FF4A35开停关手/自时间确定0设置123456789图5.4遥控版面重新设计图5.5遥控解码值5.1.6红外对管模块调试将电路按照图3.12连接起来,测得P00和P01的电压都0.2V,用一张透光性不强的布料穿过红外对管,此时,接收管截止,测得P00和P01的电压都4.6V。2个全局变量openall(完全打开)和closeall第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计(完全关闭)分别为P00和P01的值,用于反馈信号(0.2V为低电平、4.6V为高电平),此时能够使得电动机在窗帘完全打开和完全关闭时停下来。5.2系统整体调试经模块调试,各模块的工作正常。将整体程序烧录,系统整体整体工作如下:首先,程序初始化,其包括单片机、液晶、各传感器等模块的初始化。然后,进入界面后按照DS1302原有的时间进行走时,该界面也提供一个万年历的功能,可以有用遥控查看时间(包括年、月、日、时、分、秒、星期的查看),如果不进行时间调整,就直接进入自动模式和手动模式的任意切换,默认下为自动模式。其中,图5.6为用遥控设置预设值(最适宜的光线强度值、最大湿度值、早晚晚开窗时间)的工作界面;图5.7为自动模式下光强变化工作图片,预设置的最适宜光强为150Lx,室内光强控制在窗帘在150+20Lx,如大于170就关闭窗帘调整,小于130则打开窗帘调整。图5.8是手动模式下关窗工作图片,在此工作模式下,窗帘的开关不受预设值控制,只可以用遥控进行开关或者停等操作。图5.6遥控设置预设值工作图片图5.7自动模式下光强变化工作图片第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计图5.8手动模式下关窗工作图片5.3小结经过前面几章的工作,调试阶段很顺利的进行。本章节先对显示模块、时钟模块、传感器等功能模块电路分别调试,然后整体调试直到调试成功。该控制器的显示模块、时钟模块、遥控器模块、电动机模和各传感器等都能正常工作,并且设计的功能和结果都达到了预期目的。该设计具体能经行光线强度检测、温湿度检测、红外遥控远程控制;具有时钟定时及万年历功能、各参数(光线强度、湿度、手动和自动工作模式、万年历等)的实时显示功能;以及窗帘完全关闭和打开的自动检测和控制。最实用的是,其可以根据自己设定的光线强度值自动控制窗帘的打开程度;当湿度过大时能打开窗帘;早晚定时开关窗帘。最终在模块化设计和不断调试中完成各项指标和功能。6结束语6.1结论本设计以STC89C54RD+为主控芯片,利用数字光强度、湿度、温度、红外对管等传感器为外围元件,经过信号电量转换送人单片机,然后利用单片机发送控制信号驱动电机的转动,最终完成了以下功能:⑴光线强度检测:通过光线强度传感器实时检测光线强弱,控制窗帘打开的合适程度,为室内提供设定的光线强度;⑵时钟定时及万年历功能:能提供一个简单的万年历功能并能够定时早晚开关窗帘;⑶红外遥控远程控制:可以用遥控进行窗帘的开和关,以及各个参数的设置;⑷湿度检测:能完成湿度检测,当房屋内湿度太大能自动打开窗帘进行通风;⑸各参数(光线强度、湿度、工作模式、万年历等)的实时显示;⑹窗帘的完全关闭和打开的自动检测及控制等。第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计6.2展望本次设计的电动机模块是模拟的有较大力矩的电动机,如果把该设计投入使用,则需要将它换成实际需要的电动机用控制脉冲控制即可。本设计本来是完成智能窗的设计,由于缺少机械的器件,换成了智能窗帘控制部分的设计,如果有需要可以加上滑轮组和玻璃窗即可完成设计。本设计还可以用IOIOforAndroidGoogleIOPIC单片机进行设计,它可以代替本设计中的红外遥控完成无线控制。随着Android设备的快速增加,用手机等Android设备去控制窗帘,可以显得更加智能和方便。由于本学期的时间被耽搁,很遗憾没去整合Android知识,直接用学过的51单片机进行了设计,希望以后有空能完成Android系统的智能窗控制器的设计。第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计参考文献[1]孙向滨.智能家居控制系统展望[J].科协论坛,2012(9):30-31.[2]侯海涛.国内外智能家居发展现状[J].建材发展导向,2004(5):92-93.[3]冯旭升.奥兰AL.CK01的智能窗帘机[J].住宅科技,2003(11):36-37.[4]李胜多,张还,佟春明.基于PLC的多功能智能窗的设计[J].青岛农业大学学报(自然科学版),2010,27(1):84-88.[5]陈海松,夏继媛.基于Zigbee技术的智能窗帘网络化控制系统[J].电子设计工程,2012,20(15):136-138.[6]王俊杰.传感器与检测技术[M].北京:清华大学出版社,2011.[7]陈旦花.单片机最小系统的设计与应用[J].无线互联科技,2012(10):103-104.[8]李伟跃.基于时钟芯片DS1302的万年历的设计[J].技术创新,2012(9):20-21.[9]云中华,白天蕊.基于BH1750FVI的室内光照强度测量仪[J].单片机与嵌入式系统应用,2012,12(6):27-29.[10]倪健,董强.编码解码技术在红外遥控器中的实现[N].中国民航飞行学院学报,2004,15(1):35-36.[11]朱志伟,刘湘云.基AT89S51的红外遥控解码的实现[J].科技信息,2009(34):109-112.[12]郭豫荣.温湿度传感器的原理及应用[J].电子元器件应用,2012,14(11):35-56.[13]王晓明.电动机的单片机控制[M].北京:北京航空航天大学出版社,2002.[14]王兆安,刘进军.电力电子技术[M].北京:机械工程出版社,2011.[15]温子祺.51单片机C语言创新教程[M].北京:航空航天大学出版社,2011.第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计致谢该控制器设计的最终结果达到了预期的目的,在这过程中也遇到很多的困难,在此衷心感谢我的指导老师严文娟的悉心指导,从论文的选题、文献的采集、总体设计、实物的制作、元件的购买、论文结构的布局到论文定稿,从标题到标点,内容到格式,她都费尽了心血。感谢严老师的辛勤栽培和孜孜教诲,在她的支持和帮助下顺利地完本设计系统的设计及论文撰写。在此,还要感谢长江师范学院物理学与电子工程学院和所有老师、同学们的支持,感谢他们在技术上的指导和为我们提供软硬件的支持。特别感谢实验室的各位老师对该设计做PCB板的细心指导和时间上的及时安排,才使学生能在较短的时间里做好硬件的各个模块。由于自身专业水平实际应用能力及经验有限,整篇论文肯定存在尚未发现的缺点和错误。恳请阅读此篇论文的老师、同学,多予指正,不胜感激!第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计附录A原理图、印制板图和实物图原理图:第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计印制板图:第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计实物图及实物工作图:⑴成品图:第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计⑴工作图自动模式手动模式窗帘打开查看万历年参数设置第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计附录B元件清单CommentValueDesignatorFootprint晶振11.0591MHZB1R38晶振32.768KZB2R38瓷片电容CapacitorC1,C2VP32-3.2电解电容CapacitorC3CAPR5-4X53V电源3VCR2032PCBComponent_1-duplicate-duplicate发光二极管TypicalBLUESiCLEDD13.5X2.8X1.9红外对管发射管-D2,D43.5X2.8X1.9红外对管接收管-D3,D5TO-220_A排阻1KR0HDR1X9电阻1K(R1,R4),10K,4.7K(R5-R8),220(R9,R11),9.1k,(R10,R12)R1,R2,R4,R5,R6,R7,R8,R9,R10,R11,R12AXIAL-0.4电位器1KR3PCBComponent_1-duplicate3按键-S0,S1,S2,S3,S4PCBComponent_1-duplicate4按钮-S5PCBComponent_1-duplicate4单片机 STC89C54U1DIP40时钟芯片TrickleChargeTimekeepingChip,DS1302U2DIP8红外接收头和遥控器1838TU3HDR1X3H湿度传感器DHT11U4HDR1X4光线强度传感器BH1750FVIU5HDR1X5电动机驱动芯片ULN2003ADU6D016液晶显示带中文字库12864液晶12864HDR1X20注:不包括电源元件清单第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计附录C使用说明书(1)接上电源后,进行初始化,默认工作在自动模式:通过按键可以调整万年历的时间设置和查看;通过遥控可完成设置改控制器的工作参数(最适宜的光线强度值、最大湿度值、早晚开窗时间等);在12864的界面上能对各参数的实时显示;(2)在自动模式下预设值中,到开窗时间就打开窗帘,到关窗时间就关闭窗帘。有一个最适宜的光强度值,可根据实际的需要设点其值的大小。在开窗和关窗的设定值之间,如果高于设定湿度最大值,就会打开窗帘进行通风。(3)按下遥控的手动和自动键,就可进行手动模式和自动模式的切换,在手动模式下可随意开关窗帘,不受各预设参数的影响,按下“开”就打开,按下“关”就关闭,按下“停”就停止工作。(4)根据需要可以调滑动变阻器的值,改变12864的显示的亮暗程度。(5)本设计包含有电源模块、光线传感器模块、温湿度传感器模块、红外遥控器模块、红外对管模块,必要时可分别对其维护。(6)光线强度可以根据环境照度值(阴天室内:5—50;阴天室外:50—500;晴天室内:100—1000;夏季中午太阳光下的照度:约为10*6次方;阅读书刊时所需的照度:50—60;家用摄像机标准照度:1400)进行设定自己要求。(7)可以根据最有利的防病、治病环境(40%~55%RH;图书、文物保管环境:40%-60%RH;棉毛织品存放:40%-60%RH;糖果、点心存放:50%~60%RH;蔬菜、水果存放:50%~70%RH;粮食存放:50%~70%RH)设定开窗的最大湿度值。第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计附录D程序主要程序:#include#include#include#include#include#include#defineucharunsignedchar#defineuintunsignedint#defineSlaveAddress0x46uchark4flag;uchardayflag;ucharflag_num=0;uchararrows_x=1;ucharline_num=4;ucharrow_num=5;ucharset_flag,kai,guan,shoudong,zidong=1,wangnianli;uintdisp[4];uchark1;ucharplus=0,sub=0;ucharsum=0;ucharnian,yue,ri,xq,shi,fen,miao;ucharnian1,yue1,ri1,xq1,shi1,fen1,miao1;voidxianxq(ucharxq);charread_datadht();/////按键第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计sbitkey3=P1^0;sbitkey2=P1^1;sbitkey1=P1^2;sbitkey4=P1^3;sbitopenall=P0^0;sbitcloseall=P0^1;sbitclk=P3^4;sbitIO=P3^5;sbitrst=P3^6;sbitACC0=ACC^0;sbitACC7=ACC^7;voiddelay(ucharz){uintx,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}sbitDHT=P3^7;sbitSCL=P3^0;sbitSDA=P3^1;sbitLCD_RS=P0^7;sbitLCD_RW=P0^6;sbitLCD_EN=P0^5;sbitLCD_PSB=P0^4;sbitLCD_RST=P0^3;ucharidatastr1[]={""};//用来存放湿度数据unsignedcharidatastr2[]={""};//用来存放温度数据unsignedcharidatastr3[]={""};//用来存放光强数据unsignedcharidatastr4[]={"自动"};unsignedcharidatastr5[]={"手动"};unsignedcharidataam[3]={7,30,0};第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计unsignedcharidatapm[3]={20,0,0};unsignedcharidatashidu[1]={70};unsignedcharidataguangqiang[2]={1,50};unsignedcharcodedis2[]={"湿度%RH"};unsignedcharcodedis3[]={"光强LX"};unsignedcharcodedis4[]={"窗帘模式:"};unsignedlongidatazao_time_flag;//早上打开窗帘的时间标志unsignedlongidatanow_time_flag;unsignedlongidatawan_time_flag;//晚上打开窗帘的时间标志typedefunsignedcharBYTE;typedefunsignedshortWORD;typedefunsignedcharunint8;typedefunsignedcharunint16;BYTEBUF[8];ucharge,shi2,bai,qian,wan;intdis_data;unint8TH_data,TL_data,RH_data,RL_data,CK_data;unint8TH_temp,TL_temp,RH_temp,RL_temp,CK_temp;unsignedinttemp_s,temp_w;unint8com_data,untemp,temp;unint8respond;ucharshiZ,shiX,wenZ,wenX,check;uchartr_shiZ,tr_shiX,tr_wenZ,tr_wenX;ucharflag;//定义红外解码所用变量charirtime;ucharstartflag,bitnum,irreceok,irprosok,l;ucharidatairdata[32];ucharidataircode[4];ucharidatadis8[8];第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计voidtimer0init(void)//计时器初始化{TMOD=0X02;TH0=0X00;TL0=0X00;ET0=1;EA=1;TR0=1;}voidint0init(void){IT1=1;EX1=1;EA=1;}voidirpros(void){uchark,i,j;ucharvalue;k=1;for(j=0;j<4;j++){for(i=0;i<8;i++){value=value>>1;if(irdata[k]>6){value=value|0x80;}k++;}ircode[j]=value;第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计}irprosok=1;}//以下为中断服务程序/////////voidtimer0()interrupt1{irtime++;}voidint0()interrupt2{if(startflag){if(irtime>32){bitnum=0;}irdata[bitnum]=irtime;irtime=0;bitnum++;if(bitnum==33){bitnum=0;irreceok=1;}}else{startflag=1;irtime=0;}第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计}/*****************************延时程序***********************************/voiddelayNOP(){_nop_();_nop_();_nop_();_nop_();}voiddelay_ms(unsignedcharms){unsignedchari;while(ms--){for(i=0;i<250;i++){_nop_();_nop_();_nop_();_nop_();}}}voiddelay_us(){unint8i;i--;i--;i--;i--;i--;}voiddelay_10us()第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计{uchari;i--;i--;i--;i--;i--;i--;}voidDelay5us(){_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}voidDelay5ms(){WORDn=560;while(n--);}/************************延时end****************************//*************12864程序段***********************************/////测试LCD忙碌状态lcd_busy()为1时,忙,等待。lcd_busy()为0时,闲,可写指令与数据。///bitlcd_busy(){bitresult;LCD_RS=0;LCD_RW=1;LCD_EN=1;Delay5us();第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计result=(bit)(P0&0x80);LCD_EN=0;return(result);}voidlcd_wcmd(unsignedcharcmd){while(lcd_busy());LCD_RS=0;LCD_RW=0;LCD_EN=0;Delay5us();P2=cmd;Delay5us();LCD_EN=1;Delay5us();LCD_EN=0;}voidlcd_wdata(unsignedchardat){while(lcd_busy());LCD_RS=1;LCD_RW=0;LCD_EN=0;P2=dat;Delay5us();LCD_EN=1;Delay5us();LCD_EN=0;}voidlcd_init()//////LCD初始化设定{LCD_PSB=1;////并口方式LCD_RST=0;第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计Delay5ms();LCD_RST=1;Delay5ms();lcd_wcmd(0x34);Delay5ms();lcd_wcmd(0x30);Delay5ms();lcd_wcmd(0x0C);Delay5ms();}///*/设定LCD显示位置*/////voidlcd_dis_pos(unsignedcharX,unsignedcharY){unsignedcharpos;if(X==1){X=0x80;}elseif(X==2){X=0x90;}elseif(X==3){X=0x88;}elseif(X==4){X=0x98;}pos=X+Y;lcd_wcmd(pos);///////////////显示地址}voidxianshi(uchar*s){while(*s>0){lcd_wdata(*s);s++;}第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计}voidlcd_pos(unsignedcharX,unsignedcharY){unsignedcharpos;if(X==1){pos=0x80;}elseif(X==2){pos=0x90;}elseif(X==3){pos=0x88;}elseif(X==4){pos=0x98;}lcd_wcmd(Y|pos);}/********************12864end************//*****************BH1750程序段*************/voidBH1750_Start()//起始信号{SDA=1;/////拉高数据线//SCL=1;////拉高时钟线//Delay5us();////延时///SDA=0;//产生下降沿//Delay5us();////延时///SCL=0;/////拉低时钟线///}voidBH1750_Stop()//停止信号{SDA=0;SCL=1;Delay5us();SDA=1;//产生上升沿Delay5us();第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计}voidBH1750_SendACK(bitack)//发送应答信号入口参数:ack(0:ACK1:NAK){SDA=ack;SCL=1;Delay5us();SCL=0;//拉低时钟线Delay5us();}bitBH1750_RecvACK()//接收应答信号{SCL=1;Delay5us();CY=SDA;SCL=0;Delay5us();returnCY;}voidBH1750_SendByte(BYTEdat)//////向IIC总线发送一个字节数据{BYTEi;for(i=0;i<8;i++){dat<<=1;SDA=CY;//送数据口SCL=1;Delay5us();SCL=0;第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计Delay5us();}BH1750_RecvACK();}BYTEBH1750_RecvByte()//////从IIC总线接收一个字节数据{BYTEi;BYTEdat=0;SDA=1;//使能内部上拉,准备读取数据,for(i=0;i<8;i++){dat<<=1;SCL=1;Delay5us();dat|=SDA;SCL=0;Delay5us();}returndat;}voidSingle_Write_BH1750(ucharREG_Address){BH1750_Start();//起始信号BH1750_SendByte(SlaveAddress);BH1750_SendByte(REG_Address);//BH1750_SendByte(REG_data);BH1750_Stop();}//////*/*单字节读取*/*/第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计ucharSingle_Read_BH1750(ucharREG_Address){ucharREG_data;BH1750_Start();BH1750_SendByte(SlaveAddress);BH1750_SendByte(REG_Address);BH1750_Start();BH1750_SendByte(SlaveAddress+1);//发送设备地址+读信号REG_data=BH1750_RecvByte();//读出寄存器数据BH1750_SendACK(1);BH1750_Stop();returnREG_data;}voidMultiple_read_BH1750(void)//连续读出BH1750内部数据{uchari;BH1750_Start();BH1750_SendByte(SlaveAddress+1);for(i=0;i<3;i++){BUF[i]=BH1750_RecvByte();if(i==3){BH1750_SendACK(1);}else{BH1750_SendACK(0);////回应ACK}}第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计BH1750_Stop();////停止信号Delay5ms();}voidInit_BH1750()//初始化BH1750{Single_Write_BH1750(0x01);}//*****************BH1750程序段end************//***************DHT11温湿度传感器************voidread_init(){DHT=0;delay_ms(21);DHT=1;delay_10us();delay_10us();delay_10us();delay_10us();DHT=1;if(!DHT){flag=2;while((!DHT)&&flag++);flag=2;while(DHT&&flag++);tr_shiZ=read_datadht();tr_shiX=read_datadht();tr_wenZ=read_datadht();第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计tr_wenX=read_datadht();check=read_datadht();}DHT=0;delay(20);//采集完数据后}charread_datadht(){uchari,num,tempp;num=0;for(i=0;i<8;i++){flag=2;while((!DHT)&&flag++);delay_10us();//延时判断0还是1delay_10us();delay_10us();delay_10us();if(DHT==1){tempp=1;flag=2;while(DHT&&flag++);}elsetempp=0;num<<=1;num|=tempp;}return(num);第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计}voidwrite_sj1(uchardate)//12864时间的划分{ucharshi2,ge;shi2=date/10;ge=date%10;lcd_wdata(0x30+shi2);lcd_wdata(0x30+ge);}voidconversion(uinttemp_data){wan=temp_data/10000+0x30;temp_data=temp_data%10000;qian=temp_data/1000+0x30;temp_data=temp_data%1000;bai=temp_data/100+0x30;temp_data=temp_data%100;shi2=temp_data/10+0x30;temp_data=temp_data%10;ge=temp_data+0x30;}//***************DHT11温湿度传感器end***//************DS1302及按键时间调整阶****voiddingwei()////12864年月日等的定位{lcd_wcmd(0x92);write_sj1(nian);lcd_wcmd(0x94);write_sj1(yue);第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计lcd_wcmd(0x96);write_sj1(ri);xianxq(xq);lcd_wcmd(0x9a);write_sj1(shi);lcd_wcmd(0x9c);write_sj1(fen);lcd_wcmd(0x9e);write_sj1(miao);}voidInputByte(ucharbyte1){uchari;ACC=byte1;for(i=8;i>0;i--){IO=ACC0;clk=1;clk=0;ACC=ACC>>1;}return;}ucharOutputByte(){uchari;for(i=8;i>0;i--){ACC=ACC>>1;ACC7=IO;clk=1;clk=0;第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计}return(ACC);}voidwrite_ds1302(ucharadd,uchardate){rst=0;_nop_();clk=0;_nop_();rst=1;InputByte(add);_nop_();InputByte(date);clk=1;_nop_();rst=0;}ucharread_ds1302(ucharadd){uchardate;rst=0;_nop_();clk=0;_nop_();rst=1;InputByte(add);date=OutputByte();clk=1;_nop_();rst=0;第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计return(date);}voidBCDTO(ucharnum1,ucharnum2){num2=((num1&0x70)>>4)*10+(num1&0x0f);//return(num2);}voidTOBCD(ucharnum1,ucharnum2){num1=((num2/10)<<4|(num2%10));//return(num1);}voidwrite_time(){write_ds1302(0x8e,0x00);//TOBCD(nian1,nian);nian1=((nian/10)<<4|(nian%10));write_ds1302(0x8c,nian1);//年//TOBCD(yue1,yue);yue1=((yue/10)<<4|(yue%10));write_ds1302(0x88,yue1);//月//TOBCD(ri1,ri);ri1=((ri/10)<<4|(ri%10));write_ds1302(0x86,ri1);//日//TOBCD(xq1,xq);xq1=((xq/10)<<4|(xq%10));write_ds1302(0x8A,xq1);//星期//TOBCD(shi1,shi);shi1=((shi/10)<<4|(shi%10));write_ds1302(0x84,shi1);//时第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计//TOBCD(fen1,fen);fen1=((fen/10)<<4|(fen%10));write_ds1302(0x82,fen1);//分//TOBCD(miao1,miao);miao1=((miao/10)<<4|(miao%10));write_ds1302(0x80,miao1);//秒write_ds1302(0x8e,0x80);//写保护寄存器}voidread_time()//读DS1302时间子程序{miao1=read_ds1302(0x81);//秒寄存器//BCDTO(miao1,miao);miao=((miao1&0x70)>>4)*10+(miao1&0x0f);fen1=read_ds1302(0x83);//分//BCDTO(fen1,fen);fen=((fen1&0x70)>>4)*10+(fen1&0x0f);shi1=read_ds1302(0x85);//时//BCDTO(shi1,shi);shi=((shi1&0x70)>>4)*10+(shi1&0x0f);xq1=read_ds1302(0x8b);//BCDTO(xq1,xq);xq=((xq1&0x70)>>4)*10+(xq1&0x0f);//write_ds1302(0x8a,xq+1);ri1=read_ds1302(0x87);//BCDTO(ri1,ri);ri=((ri1&0x70)>>4)*10+(ri1&0x0f);yue1=read_ds1302(0x89);//BCDTO(yue1,yue);yue=((yue1&0x70)>>4)*10+(yue1&0x0f);nian1=read_ds1302(0x8d);第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计//BCDTO(nian1,nian);nian=((nian1&0xf0)>>4)*10+(nian1&0x0f);}voidxianxq(ucharxq){lcd_wcmd(0x8e);if(xq==1)xianshi("一");if(xq==2)xianshi("二");if(xq==3)xianshi("三");if(xq==4)xianshi("四");if(xq==5)xianshi("五");if(xq==6)xianshi("六");if(xq==7)xianshi("日");}ucharkeyscan()//键盘控制{if(key1==0){delay(45);if(key1==0){while(!key1);k1++;switch(k1){case1:lcd_wcmd(0x92);lcd_wcmd(0x0d);break;case2:lcd_wcmd(0x94);break;case3:lcd_wcmd(0x96);break;case4:lcd_wcmd(0x8e);break;case5:lcd_wcmd(0x9a);break;第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计case6:lcd_wcmd(0x9c);break;case7:lcd_wcmd(0x9e);break;case8:k1=0;lcd_wcmd(0x0c);write_time();break;}}}if(k1!=0){if(key2==0){delay(45);if(key2==0){while(!key2);if(k1==1)//nian{nian++;if(nian==100)nian=0;//qiehuan(1,nian);//write_sj(0x92,nian);write_sj1(nian);lcd_wcmd(0x92);}if(k1==2)//yue{yue++;if(yue>=13)第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计yue=0;//qiehuan(1,yue);//write_sj(0x94,yue);write_sj1(yue);lcd_wcmd(0x94);}if(k1==3)//ri{ri++;if(ri==31)ri=0;//write_sj(0x96,ri);//qiehuan(1,ri);write_sj1(ri);lcd_wcmd(0x96);}if(k1==4)//xq{xq++;if(xq==8)xq=1;xianxq(xq);lcd_wcmd(0x8e);}if(k1==5)//shi{shi++;if(shi==24)shi=0;//write_sj(0x9a,shi);第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计//qiehuan(1,shi);write_sj1(shi);lcd_wcmd(0x9a);}if(k1==6)//fen{fen++;if(fen==60)fen=0;//write_sj(0x9c,fen);//qiehuan(1,fen);write_sj1(fen);lcd_wcmd(0x9c);}if(k1==7)//miao{miao++;if(miao==60)miao=0;//write_sj(0x9e,miao);//qiehuan(1,miao);write_sj1(miao);lcd_wcmd(0x9e);}}}if(key3==0){delay(45);if(key3==0)第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计{while(!key3);if(k1==1)//nian{nian--;if(nian==-1)nian=99;//write_sj(0x92,nian);//qiehuan(2,nian);write_sj1(nian);lcd_wcmd(0x92);}if(k1==2)//yue{yue--;if(yue<=0)yue=12;//write_sj(0x94,yue);//qiehuan(2,yue);write_sj1(yue);lcd_wcmd(0x94);}if(k1==3)//ri{ri--;if(ri==-1)ri=30;//write_sj(0x96,ri);//qiehuan(1,ri);write_sj1(ri);第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计lcd_wcmd(0x96);}if(k1==4)//xq{xq--;if(xq==0)xq=7;xianxq(xq);lcd_wcmd(0x8e);}if(k1==5)//shi{shi--;if(shi==-1)shi=23;//write_sj(0x9a,shi);//qiehuan(2,shi);write_sj1(shi);lcd_wcmd(0x9a);}if(k1==6)//fen{fen--;if(fen==-1)fen=59;//write_sj(0x9c,fen);//qiehuan(2,fen);write_sj1(fen);lcd_wcmd(0x9c);}第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计if(k1==7)//miao{miao--;if(miao==-1)miao=59;//write_sj(0x9e,miao);//qiehuan(2,miao);write_sj1(miao);lcd_wcmd(0x9e);}}}}}//********DS1302及按键时间调整阶段end******/***************电动机******************/ucharcodeFFW[]={0x1f,0x3f,0x2f,0x6f,0x4f,0xcf,0x8f,0x9f};//正转数组ucharcodeREV[]={0x9f,0x8f,0xcf,0x4f,0x6f,0x2f,0x3f,0x1f};//正转数组voidDelayMS(uintms){uchari;while(ms--){for(i=0;i<140;i++);}第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计}/***************电动机end******************//***************红外遥控操作******************/voidir_display(){ucharbuf,i;disp[4]=ircode[2];if(disp[4]==0x16||disp[4]==0x0c||disp[4]==0x18||disp[4]==0x42||disp[4]==0x52||disp[4]==0x5e||disp[4]==0x08||disp[4]==0x1c||disp[4]==0x5a||disp[4]==0x4a){switch(disp[4]){case0x16:buf=0;flag_num++;break;case0x0c:buf=1;flag_num++;break;case0x18:buf=2;flag_num++;break;case0x5e:buf=3;flag_num++;break;case0x08:buf=4;flag_num++;break;case0x1c:buf=5;flag_num++;break;case0x5a:buf=6;flag_num++;break;case0x42:buf=7;flag_num++;break;case0x52:buf=8;flag_num++;break;case0x4a:buf=9;flag_num++;break;}disp[4]=0;if(flag_num==1)sum=buf;if(flag_num>2){flag_num=0;第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计sum=sum*10+buf;}for(i=0;i<4;i++)//防止进入死循环ircode[i]=0;}}voidreceive(){if(irreceok){irpros();irreceok=0;}if(irprosok){ir_display();irprosok=0;}}voidgkey(){uchari;receive();disp[4]=ircode[2];if(disp[4]==0x45||disp[4]==0x47||disp[4]==0x46||disp[4]==0x46||disp[4]==0x44||disp[4]==0x43){switch(disp[4]){case0x45:kai=1;guan=0;break;//打第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计case0x47:kai=0;guan=1;break;//关case0x46:kai=0;guan=0;break;case0x44:zidong++;break;case0x43:wangnianli++;break;}if(zidong>1)zidong=0;if(wangnianli>1)wangnianli=0;for(i=0;i<4;i++)//防止进入死循环ircode[i]=0;}}voidHkeyscan()//按键扫描{uchari;receive();/////红外接收处理完成//ir_display();//lcd_pos(line_num,row_num);lcd_wcmd(0x0c);if(ircode[2]==0x15){ircode[2]=0;set_flag=0;line_num=4;//恢复到原来坐标row_num=5;lcd_wcmd(0x01);第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计lcd_wcmd(0x01);//清屏return;}/***************红外遥控操作end***************//**************对光标位置进行操作***********/if(disp[4]==0x40)//光标行往上{flag_num=0;delay(20);if(disp[4]==0x40){disp[4]=0;line_num--;if(line_num<1)line_num=4;lcd_dis_pos(line_num,row_num);lcd_wcmd(0x0f);}}if(disp[4]==0x19)//光标行向下{flag_num=0;delay(20);if(disp[4]==0x19){disp[4]=0;disp[4]=0;line_num++;if(line_num>2&&row_num>6){第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计row_num=3;}if(line_num>4)line_num=1;lcd_dis_pos(line_num,row_num);lcd_wcmd(0x0f);}}if(disp[4]==0x07)//光标向左{disp[4]=0x00;row_num--;row_num--;if(line_num>2&&row_num>6){row_num=3;}if(row_num<3)row_num=7;lcd_dis_pos(line_num,row_num);lcd_wcmd(0x0f);}if(disp[4]==0x09)//光标向右{disp[4]=0x00;row_num++;row_num++;if(line_num>2&&row_num>6){row_num=3;}if(row_num>7)row_num=3;lcd_dis_pos(line_num,row_num);lcd_wcmd(0x0f);}for(i=0;i<4;i++)//防止进入死循环//第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计ircode[i]=0;}voidset(){set_flag=1;lcd_init();lcd_wcmd(0x80);xianshi("开窗00:00:00");lcd_wcmd(0x90);xianshi("关窗00:00:00");lcd_wcmd(0x88);xianshi("光强0000LX");lcd_wcmd(0x98);xianshi("湿度00.00%RH");lcd_wcmd(0x83);lcd_wdata(am[0]/10+0x30);lcd_wdata(am[0]%10+0x30);lcd_wcmd(0x85);lcd_wdata(am[1]/10+0x30);lcd_wdata(am[1]%10+0x30);lcd_wcmd(0x87);lcd_wdata(am[2]/10+0x30);lcd_wdata(am[2]%10+0x30);lcd_wcmd(0x93);lcd_wdata(pm[0]/10+0x30);lcd_wdata(pm[0]%10+0x30);lcd_wcmd(0x95);lcd_wdata(pm[1]/10+0x30);lcd_wdata(pm[1]%10+0x30);lcd_wcmd(0x97);lcd_wdata(pm[2]/10+0x30);第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计lcd_wdata(pm[2]%10+0x30);lcd_wcmd(0x8b);lcd_wdata(guangqiang[0]/10+0x30);lcd_wdata(guangqiang[0]%10+0x30);lcd_wcmd(0x8d);lcd_wdata(guangqiang[1]/10+0x30);lcd_wdata(guangqiang[1]%10+0x30);lcd_wcmd(0x9b);lcd_wdata(shidu[0]/10+0x30);lcd_wdata(shidu[0]%10+0x30);while(set_flag){Hkeyscan();lcd_wcmd(0x0f);if(line_num==1&&row_num==3){am[0]=sum;lcd_wcmd(0x83);delay(10);lcd_wdata(am[0]/10+0x30);lcd_wdata(am[0]%10+0x30);}if(line_num==1&&row_num==5){am[1]=sum;delay(10);lcd_wcmd(0x85);lcd_wdata(am[1]/10+0x30);lcd_wdata(am[1]%10+0x30);}if(line_num==1&&row_num==7){am[2]=sum;第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计delay(10);lcd_wcmd(0x87);lcd_wdata(am[2]/10+0x30);lcd_wdata(am[2]%10+0x30);}if(line_num==2&&row_num==3){pm[0]=sum;lcd_wcmd(0x93);lcd_wdata(pm[0]/10+0x30);lcd_wdata(pm[0]%10+0x30);}if(line_num==2&&row_num==5){pm[1]=sum;delay(10);lcd_wcmd(0x95);lcd_wdata(pm[1]/10+0x30);lcd_wdata(pm[1]%10+0x30);}if(line_num==2&&row_num==7){pm[2]=sum;delay(10);lcd_wcmd(0x97);lcd_wdata(pm[2]/10+0x30);lcd_wdata(pm[2]%10+0x30);}if(line_num==3&&row_num==3){guangqiang[0]=sum;lcd_wcmd(0x8b);lcd_wdata(guangqiang[0]/10+0x30);lcd_wdata(guangqiang[0]%10+0x30);第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计}if(line_num==3&&row_num==5){guangqiang[1]=sum;delay(10);lcd_wcmd(0x8d);lcd_wdata(guangqiang[1]/10+0x30);lcd_wdata(guangqiang[1]%10+0x30);}if(line_num==4&&row_num==3){shidu[0]=sum;lcd_wcmd(0x9b);lcd_wdata(shidu[0]/10+0x30);lcd_wdata(shidu[0]%10+0x30);}}}/**************对光标位置进行操作end***********//**************窗帘打开及关闭操作*************/dakai()//打开窗帘{inti,j;for(i=0;i<16;i++)for(j=0;j<8;j++){{P1=(P1&0x0f)|(0xf0&FFW[j]);DelayMS(1);}}Multiple_Read_BH1750();dis_data=BUF[0];dis_data=(dis_data<<8)+BUF[1];第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计temp=(float)dis_data/1.2;lcd_pos(4,0);xianshi("窗帘打开中<<>>");read_time();//读时间子程序lcd_wcmd(0x80);write_sj1(shi);lcd_wcmd(0x82);write_sj1(fen);lcd_wcmd(0x84);write_sj1(miao);conversion(temp);//计算数据和显示lcd_dis_pos(3,0);for(i=0;i<16;i++)//显示字符lcd_wdata(dis3[i]);lcd_pos(3,2);lcd_wdata(bai);lcd_pos(3,3);lcd_wdata(shi2);lcd_pos(3,4);lcd_wdata(ge);return;}guanbi()//关闭窗帘{inti,j;for(i=0;i<16;i++)for(j=0;j<8;j++){P1=(P1&0x0f)|(0xf0&REV[j]);DelayMS(1);第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计}Multiple_Read_BH1750();dis_data=BUF[0];dis_data=(dis_data<<8)+BUF[1];temp=(float)dis_data/1.2;lcd_pos(4,0);xianshi("窗帘关闭中>><<");read_time();//读时间子程序lcd_wcmd(0x80);write_sj1(shi);lcd_wcmd(0x82);write_sj1(fen);lcd_wcmd(0x84);write_sj1(miao);conversion(temp);//计算数据和显示lcd_dis_pos(3,0);for(i=0;i<16;i++)//显示字符lcd_wdata(dis3[i]);lcd_pos(3,2);lcd_wdata(bai);lcd_pos(3,3);lcd_wdata(shi2);lcd_pos(3,4);lcd_wdata(ge);return;}/**************窗帘打开及关闭操作end**********//**************万年历及参数显示***************/voidcwannianli()第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计{lcd_init();lcd_wcmd(0x80);xianshi("智能窗帘时钟");lcd_wcmd(0x91);xianshi("20年月日");lcd_wcmd(0x8A);xianshi("星期");lcd_wcmd(0x9a);xianshi("00:00:00");while(wangnianli){read_time();//读时间子程序dingwei();gkey();}return;}voidk(){inti,j;lcd_wcmd(0x80);write_sj1(shi);lcd_wcmd(0x82);write_sj1(fen);lcd_wcmd(0x84);write_sj1(miao);lcd_dis_pos(2,0);for(i=0;i<16;i++)//显示字符lcd_wdata(dis2[i]);第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计//写湿度数据for(i=0;i<4;i++){lcd_pos(2,i+2);lcd_wdata(str2[i]);}lcd_dis_pos(4,0);for(i=0;i<16;i++)//显示字符lcd_wdata(dis4[i]);if(zidong==1){lcd_pos(4,5);//自动for(i=0;i<4;i++){lcd_wdata(str4[i]);}}else{lcd_pos(4,5);for(i=0;i<4;i++)//手动{lcd_wdata(str5[i]);}}Single_Write_BH1750(0x01);//poweronSingle_Write_BH1750(0x10);//H-resolutionmodedelay_ms(180);//延时180ms第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计Multiple_Read_BH1750();dis_data=BUF[0];dis_data=(dis_data<<8)+BUF[1];//合成数据temp=(float)dis_data/1.2;conversion(temp);//计算数据和显示lcd_dis_pos(3,0);for(i=0;i<16;i++)//显示字符lcd_wdata(dis3[i]);lcd_pos(3,2);lcd_wdata(bai);lcd_pos(3,3);lcd_wdata(shi2);lcd_pos(3,4);lcd_wdata(ge);}/**************万年历及参数显示end************////////////**********主程序********////////////voidmain(){uintSET_guangqiang;uchari,j;while(1){floattempp;delay_ms(200);//延时200mslcd_init();//初始化LCDInit_BH1750();//初始化BH1750timer0init();int0init();while(1){if(k4flag==1)//如果按下k4即设置键,进入调整时间第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计{lcd_wcmd(0x80);xianshi("智能窗帘时钟");lcd_wcmd(0x91);xianshi("20年月日");lcd_wcmd(0x8A);xianshi("星期");lcd_wcmd(0x9a);xianshi("00:00:00");while(k4flag==1){if(k1==0){read_time();//读时间子程序dingwei();}keyscan();//设置退出if(key4==0){k4flag=0;}}if(key4==0){k4flag=0;break;}}if(k4flag==0){read_init();//读传感器数据read_time();//读时间子程序zao_time_flag=(long)am[0]*10000+am[1]*100+am[2];now_time_flag=(long)shi*10000+fen*100+miao;wan_time_flag=(long)pm[0]*10000+pm[1]*100+pm[2];if((zao_time_flag(SET_guangqiang+20)||(dayflag==0))&&(closeall==0)&&zidong){guanbi();//晚上(设定值)或者光线小于设定值关闭窗帘}第83页,共83页 刘浩本科毕业设计·实用智能窗帘控制器的设计while(((temp<(SET_guangqiang-20)||shiZ>shidu[0])&&(dayflag==1))&&(openall==1)&&zidong){dakai();//早上(设定值)或者光线大于设定值打开窗帘}while(zidong==0&&(kai==1||guan==1))//手动{gkey();while(zidong==0&&kai==1&&openall==1)//手动下打开{gkey();dakai();}if(zidong==0&&kai==1&&openall==0)break;while(zidong==0&&guan==1&&closeall==0)//手动下关闭{gkey();guanbi();}if(zidong==0&&guan==1&&closeall==1)break;}}}}}///////////**********主程序end****/////////////*end*/第83页,共83页'