基于单片机的教室照明控制系统设计_第1页
基于单片机的教室照明控制系统设计_第2页
基于单片机的教室照明控制系统设计_第3页
基于单片机的教室照明控制系统设计_第4页
基于单片机的教室照明控制系统设计_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

【电子信息工程毕业设计+文献综述+开题报告】基于单片机的教室照明控制系统设计(20__届)本科毕业设计基于单片机的教室照明控制系统设计摘要随着电子技术的飞速发展,基于单片机的控制系统已经广泛应用于各个邻域。另外,由于楼宇智能化的发展和成熟,基于单片机的教室照明控制系统得到了广泛的普及。本文根据教室灯光智能控制方面的发展现状,分析了有效的节电控制方案,提出了基于AT89S51单片机的教室照明控制系统。系统采用热释红外人体传感器检测人体的存在,以此来控制照明灯的开启和关闭;利用光敏电阻来检测环境光的强度,以此来调节灯具的亮度;另外,系统还带有键盘及液晶显示,键盘用于输入密码及设置时间参数,液晶显示屏用于显示当前时间及系统提示;系统还可以自主设置教室灯具的开启及关闭时间,关灯前可利用蜂鸣器发出警告。通过对人体存在信号及环境光信号的识别和判断,完成对教室灯具的智能控制,以达到节能的目的。本系统软件采用C语言编制,采用模块化结构设计,条理清晰,便于修改。关键词:AT89S51;智能控制;热释红外;传感器

TheDesignofClassroomLightingControlSystemBasedonSingle-chipMicrocomputerAbstractWiththerapiddevelopmentofelectronictechnology,thesystemofcontrolbasedonMCUiswidelyappliedinvariousfields.What'smore,duetothedevelopmentandmaturationoftheintelligentbuilding,thecontrolsystemforclassroomlightingbasedonsingle-chipmicrocomputerhasbeenwidelypopular.Accordingtothedevelopmentstatusofintelligentlightingcontrolintheclassroom,analysisofeffectivepower-savingcontrolsolution,proposedclassroomlightingcontrolsystemwhichisbasedonAT89S51MCU.Thissystemcancontrolthelampswitchbytestandprocessthesignalofhumanbodythatilluminatesthebacktrackexists;Itcanadjustthebrightnessoflightbytestandprocessdaylightsignal;Inaddition,thesystemalsohasakeyboardandLCD,keyboardusetoenterpasswordsandsettimeparameters,LCDdisplaysthecurrenttimeandthesystemprompts;ThissystemalsocanIndependentlysetuptheturnonandofftimeoflights,itcangeneratewarningsbybuzzerbeforeturnoffthelights.Accordingtoidentifyandjudgethehumanbodyexistencesignalandthedaylightsignal,completionofclassroomlightingintelligentcontroltosaveenergy.ThemicrocontrollersoftwarewasdevelopedbasedonClanguage,Clanguageadoptsbuildingblokedesign,itscorporalityisverygoodandeasytochange.Keywords:AT89S51,intelligentcontrol,pyroelectricinfrared,sensors

目录摘要 IIIAbstract IV1绪论 11.1课题的来源 11.2课题的意义 11.3国内外教室照明控制系统的发展现状及研究成果 21.3.1国内外教室照明控制系统的发展现状 21.3.2国内外教室照明控制系统的研究成果 21.4课题研究的主要内容 32教室照明控制系统的方案设计 52.1教室照明控制系统的方案设计 52.2方案评价 53教室照明控制系统的硬件设计 63.1芯片器件介绍 63.1.1AT89S51单片机简介 63.1.2LCD1602 73.1.3DS1302涓流充电时钟保持芯片 93.1.4TOP3224热释红外人体传感器 103.2系统模块分析 123.2.1人体信号采集模块 123.2.2光信号采集模块 133.2.3时钟电路 133.2.4LCD显示 143.2.5键盘 143.2.6报警模块 153.2.7继电器驱动接口电路 154教室照明控制系统的软件设计 164.1系统整体功能的软件设计 164.2数据采集的软件设计 174.3时钟模块的软件设计 174.4显示模块的软件设计 184.5报警模块的软件设计 194.6键盘扫描的软件设计 19结论 21参考文献 22致谢 23附录Ⅰ 24附录Ⅱ 25附录Ⅲ 26

1绪论1.1课题的来源由于学校开放型的管理模式,以及全员的节能意识的淡薄,造成了电能的极度浪费。一般存在以下几种浪费现象:①因为很多人缺乏节电意识,而且白天的时候眼睛对光线也不太敏感,在光线很强的情况下,很难发现灯具亮着,所以在白天光线很强的情况下,仍然可以看到到处都是长明灯;②即使教室内没有几个人或者根本就没有人,整个教室的灯也全都开着;③晚上许多教室,即使只有少数学生在,整个教室的灯也全都是开着的;到处都是长明灯,空荡荡的教室里全部灯都亮着的现象到处可见。一个教室的长明灯,看起来耗能不大,但从整个学校来看,却是一个不小的数字,再从全国来看,这是电力资源的一种极大的浪费。同时,这种经意或不经意间的浪费,给学校的水电支出带来了沉重的负担。随着现代照明系统在各领域中所占的比例的日益增大,实现照明系统的节能迫在眉睫,而解决高校教室照明的节电问题至关重要。1.2课题的意义(1)一个好的教室照明控制系统可以改善工作环境,实现工作效率的提高。目前的智能照明控制系统具有两种控制方法,即开关和调光。可有效的控制各个场所的照明亮度,从而达到节能的效果。同时,此类系统还可以根据时间段以及人们的需要来调节照明亮度,进一步达到节能的效果。一个好的教室照明控制系统可以为我们提供一个良好的节能效果,并且可以延长灯具寿命。它可以根据工作场所以及人数的不同,划分不同的时间段以及工作模式,关掉部分照明灯以减少浪费,在你需要的时候,系统会自动为你开启。同时,系统还可以根据外部光线来调节室内灯具的亮度。这种方式不但保证了充足的照明,而且也缩短了灯具的工作时间,这样不但节省了开支,而且灯具的寿命也延长了。一个好的教室照明控制系统可以提高管理水平。这种照明控制系统一般主要靠自动控制,再结合一些人工控制,系统会自动开启或关闭开关,并且根据外部环境来调节室内灯具的亮度,不但很大程度的减少了用于管理的人员数量,而且也排除了由于人为控制不到位而不定时开关灯的现象,从而影响学校正常的教学生活秩序[1]。一个好的教室照明控制系统可以具有比较好的投资收益效果。智能的照明控制系统除了可以节约能源和延长灯具的使用寿命,还可以有效节省电费与管理费用的支出[2]。1.3国内外教室照明控制系统的发展现状及研究成果1.3.1国内外教室照明控制系统的发展现状目前,我国的能源问题已日渐紧张,能源问题已将成为制约我国国民经济发展的关键问题。它不仅关系到经济发展和环境生态,在一定条件下,它还会影响社会稳定。因此,我国发布了绿色照明工程新闻,决定在各个领域大力推广节能照明系统。从普通白炽灯到高效节能灯,是我国的电光源产品逐渐向节能型转变。目前我国照明用电约占整个社会总用电的12%,采用高效节电产品代替传统的照明产品可节电70%左右。北京奥运回期间,各个场馆就采用了大量的节能灯具,这是我国大力推广绿色照明的良好证明。由于大家的节电意识薄弱,造成很多院校大量电能的浪费,长明灯处处可见。全国上下有那么多的院校,这对整个国家来说是一笔很大的损失。因此,寻找简便高效的节能方案是目前十分紧要的事情。1.3.2国内外教室照明控制系统的研究成果随着科技的进步,各种节能高效的照明设备将陆续被发明使用;对照明设备的控制功能也将越来越灵活,而设备与控制器的通讯方式将逐步统一[3]。以下是几种新型照明控制系统:基于射频技术的无线网络智能照明控制系统系统采用了分级组网的方式,由有线和无线通信两级网络组成。整个系统由PC、Atmega8单片机、无线射频模块RF905以及照明控制模块组成。使用有线网络来直接连接上位机主机与下位机主机。附近的下位机主机和分机则采用无线信道通信,这样不但可以减少物理线路的连接,而且还可以增加通信的可靠性。该智能照明系统采用的照明方法是区域控制,并且结合教室内的人数以及学校的课程表时间来控制教室内灯具的开启数量,同时还可以组建一个小型局域网络,为系统增加一个自动诊断功能以及自动故障报警功能,从而可以有效地控制整个教学楼的照明。这种系统的运用避免了“长明灯”现象,减少了人为浪费,降低了运行维护费用,节约管理成本,具有巨大的生态、环境和经济效益[4]。基于红外技术的智能照明控制系统系统由AT89S51单片机、热释电红外传感器检测模块、光电检测模块、执行控制模块继电器、手动开关等组成。通过光电检测模块和热释电红外传感器检测模块采集室内光照强度、人数分布等信息,并送至单片机,通过单片机来实现控制智能化[5]。这种智能照明控制系统,通过在传感器模块中加入一电磁铁挡板,从而实现对人体的检测;利用自然光检测模块实现对室内灯具亮度的自动调节。此系统能根据实际需要来控制照明灯的开关,可大幅度降低电能的浪费,而且其成本低廉,达到了环保节能的目的[6]。基于CAN总线的智能照明控制系统该系统的上位机采用了工业控制计算机,主要负责接收管理系统数据、发送控制命令、实时显示系统工作过程等。下位机是各智能节点,微处理器是AT89C52单片机,负责每个照明区域的现场数据检测和工作状态控制等[7]。智能节点内有一个CAN总线控制器SJA1000,它主要负责接收数据以及通过发送数据。上位机通过智能CAN总线通信适配卡连接到CAN总线上。智能节点也可脱离上位机,直接进行现场手动控制。节点数量可根据建筑物的规模和照明系统灯具功能的种类增减。CAN总线设计思想独特、性能优良、可靠性很高,越来越受到人们的重视。使用CAN总线技术,可以有效提高系统内部的通信速率、实时性并且降低误码传送率。另外它还可以进行灯光调控,具备一定的先进性。相信这种系统经扩展后会有非常广阔的应用前景,它将成为各个领域中理想的智能照明控制系统,而且它在节能方面也会有重大的经济价值[8]。基于ZigBee和模糊控制的新型室内照明控制系统整个系统包括ZigBee无线传感器网络、基站和远程监控中心。每个房间都有采集环境信息的传感器、自然光控制器以及人工照明控制器。利用传感器来采集房间的照度、人员位置等各种信息,并利用ZigBee无线传感器网络传输到基站PC机[9]。基站PC机自动分析处理相关信息,计算所需引入的自然光量以及所需补充的人工照明量,从而确定照明模式,并通过ZigBee输出结果,以控制人工照明控制器和自然光控制器的工作,从而实现室内照明的自动控制[10]。基站PC机还可以实时显示每个设备的一些相关信息,并将信息传输到用户手中。这种系统综合考虑了室内的遮阳系统与照明系统之间的相互联系,整个系统很大限度地利用了自然光,通过控制百叶窗旋转角度,引入自然光作为光源,并以人工照明作为补充来调节亮度,以此来满足用户的需要。该系统能够有效地降低照明系统能耗,构建一个节能、舒适的居住环境[11]。1.4课题研究的主要内容1缓慢阶梯式调功功能:这是本节电器的核心功能,能根据工作日和休息日的不同时刻调节照明灯具的工作电压,实现分时间照明。白天,外部光照强度大时进行缓慢阶梯式调功,实现半照明。采用微电脑时控进行设定进入实质性节电阶段。2人体检测功能:系统可自主判断是否有人,从而控制灯具的开启和关闭。3定时开关灯及报警提示功能:可自主设定开关灯时间,关灯前报警提示。4方便的命令输入界面,可实现密码设置及参数设定;液晶显示当前时间及工作状态,以使用户能够方便的了解系统的工作状态,也给其他各项人机交互工作带来方便;其他便于用户使用的各项辅助功能,如密码输入、系统提示等[12]。2教室照明控制系统的方案设计2.1教室照明控制系统的方案设计该系统以AT89S51单片机作控制,采用热释红外人体传感器检测人体存在,从而控制灯具的开断,达到初步节能的效果;采用光敏电阻检测外部光线强弱,通过改变电压大小来实现对灯具亮度的调节,更加有效地达到节能效果;通过对人体存在及环境光的检测判断,实现教室灯光的智能控制[13]。在此基础之上,系统还具备方便的命令输入界面及LCD显示功能。可通过键盘进行密码输入和参数设定,控制灯具的开启及关断时间;通过LCD显示当前时间及工作状态,便于用户直接了解系统工作状态,从而做出有效的控制。除此之外,系统还具备报警功能,当密码输入有误及关灯之前都会有报警提醒。系统控制框图如图2-1所示:图2-1系统控制结构框图2.2方案评价该系统通过热释红外传感器实现对人体存在信号的检测;利用光电检测模块实现光照亮度的自动调节。此系统能根据实际需要来控制照明灯的开关,可大幅度降低电能的浪费。而且它的成本很低,结构简单,便于修改,是一种十分简便有效地节电系统,适合于在各种室内照明中推广。

3教室照明控制系统的硬件设计3.1芯片器件介绍3.1.1AT89S51单片机简介AT89S51为ATMEL公司所生产的一种低功耗、高性能的CMOS八位微控制器,具有8K比特的可反复擦写的Flash只读程序存储器和256的随机存取数据存储器(RAM)[]。(1)AT89S51单片机主要功能特性介绍:①拥有8位CPU和可编程Flash②晶片内部具时钟振荡器③8KB内部程序存储器(ROM),256字节内部数据存储器(RAM)④32个双向I/O口⑤8个中断向量源⑥三个16位定时器/计数器⑦三级加密程序存储器⑧全双工UART串行通道(2)AT89S51各引脚功能介绍:图3-1AT89引脚图P3口(P3.0~P3.7):3.1.2LCD1602(一)主要技术参数:显示容量:16×2个字符芯片工作电压:4.5~5.5V工作电流:2.0mA(5.0V)模块最佳工作电压:5.0V字符尺寸:2.95×4.35(WXH)mm(二)接口信号说明:VSS:电源地VDD:电源正极VL:液晶显示偏压信号RS:数据/命令选择端(H/L)R/W:读/写选择端(H/L)E:使能信号D0~D7:数据I/O口BLA:背光源正极BLK:背光源负极(三)基本操作时序:RS1:选择数据寄存器;RS0:选择指令寄存器RW1:读状态;RW0:写状态RS0,RW0:写入指令或显示地址RS0,RW1:读忙信号RS1,RW0:写入数据RS0,R/W1,E1:读状态RS1,R/W1,E1:读数据RS0,R/W0,E1:写指令 RS1,R/W0,E1:写数据(四)RAM地址映射图:图3-2)))3.1.3DS1302涓流充电时钟保持芯片(一)DS1302简介DS1302是一款涓流充电时钟芯片,它是由DALLAS公司推出的,它包括一个实时时钟/日历和31字节静态RAM,利用串行接口与单片机进行通信,实时时钟/日历电路提供秒、分、时、日、日期、月、年的信息,大小月以及平润年都可以自动调节,还可以区分24用或12小时格式。DS1302与单片机之间通信方式是同步串行的方式,只需用到三个口线:(1)RES(复位),(2)I/O(数据线),(3)SCLK(串行时钟)图3-33.1.4TOP3224热释红外人体传感器(一)TOP3224简介这是一个基于红外线技术的自动控制产品。当有人进入开关感应范围时,专用传感器探测到人体红外光谱的变化,自动输出高电平,人不离开感应范围,将持续输出高电平;人离开后,开关延时自动关闭负载。这种传感器灵敏度高,可靠性强,广泛应用于各种自动感应电器设备[15]。(二)功能特点:1、全自动感应:感应范围则输出高电平,感应范围则自动延时输出低电平。

2、光敏控制(可选择):可光敏控制,光线强不感应。

3、两种触发方式:(可跳线选择)

不可重复触发方式:即感应输出高电平后,延时时间结束输出自动变为低电平;

可重复触发方式:即感应输出高电平后,延时时间段内如果其感应范围活动,其输出将保持高电平,直到人离开后才延时变为低电平

4、具有感应封锁时间(默认设置:0.2秒):每一次感应输出后可以设置一个封锁时间段,在此感应器不接受任何感应信号。功能可以实现“感应输出时间”和“封锁时间”两者的间隔工作,可应用于间隔探测产品;功能可有效抑制负载切换过程中产生的各种干扰。

5、工作电压范围:工作电压默认DC5V-20V,也可订做范围DC3V-24V。

6、微功耗:静态电流50mA。

7输出高电平信号:可方便与各类电路实现对接[]。:1、工作电压:DC4.5V至20V可定做3~5V

2静态功耗:50微安

3电平输出:高3.3V,低0V

4延时时间:可调0.3秒~18秒

5封锁时间:0.2秒

6触发方式:L不可重复,H可重复,默认值为H

7感应范围:小于120度锥角,7米以内

8工作温度:-15~+70

9、PCB外形尺寸:32*24mm,螺丝孔距28mm透镜尺寸:直径:23mm默认,螺丝孔径2mm,感应透镜尺寸:直径:23mm默认外接示意图和典型应用:图3-4性能传感信号处理集成电路。它热释电红外传感器外接元器件被动式的热释电红外开关。它自动快速开启各类装置,白炙灯自动门、电风扇等报警系统。I,实物图见附录Ⅱ。.3.2.1人体信号采集模块当有人进入开关感应范围时,专用传感器探测到人体红外光谱的变化,自动输出高电平,人不离开感应范围,将持续输出高电平;人离开后,开关延时自动关闭负载。人体信号采集原理图如图3-5:图3-53.2.2光信号采集模块在这个系统中,采用光敏电阻(图3-6中的R3)图3-63.2.3时钟电路此系统的时钟电路原理图如图3-7所示。其中VCC1外接3V的可充电锂电池,作为DS1302的备用电源,VCC2直接接5V电压,是DS1302的主电源。DS1302由两者中的较大者供电。系统正常运行时,VCC2大于VCC1,因此系统由VCC2供电。如主电源关闭,则由VCC1供电来保持时钟的正常运行。图中X1和X2是振荡源,外接32.768kHz晶振。图3-73.2.4LCD显示在本系统中,采用1602液晶模块,它是目前应用比较广泛的一种液晶显示模块。这种显示器可以显示两行,每行16个ASCII字符,并且可以自定义图形,只需要写入相应字符的ASCII码就可以显示。LCD1602原理图如下图所示:图3-83.2.5键盘采用16位键盘,可设置多个功能按键。矩阵式键盘中,行、列线分别连接到按键开关两端,在进行键盘扫描时首先把键盘列线的第一根线至高,再分别检测行线是否有高电平的信号。如有信号,则证明此行线与第一条列线间的被按下了。单片机读入这个键值。如果四根行线均无信号,则将第一根列线置低,将第二根列线置高,再次检测各条行线有无信号,以此类推。键盘原理图如下:图3-93.2.6报警模块当密码输错和定时关灯前都会发出警报。此时蜂鸣器鸣叫并且指示灯点亮,原理图如图3-10和3-11所示:图3-10蜂鸣器原理图图3-11指示灯原理图3.2.7继电器驱动接口电路使用继电器可以有效地保护系统电路。继电器驱动接口电路原理图如图3-12所示:图3-12继电器驱动接口电路原理图4教室照明控制系统的软件设计4.1系统整体功能的软件设计系统开始工作时,会跳出登陆界面,用户要输入正确的密码才能登陆并控制系统。当密码输错时,显示屏会出现错误提醒。密码输错三次以上,报警系统就会产生反应,蜂鸣器鸣叫并且指示灯闪烁。当密码输入正确并且成功登陆系统后,系统开始工作。它采集人体信号及环境信号并且根据这两个信号调节开关及灯具的亮度。如果有手动按键按下,则根据按键信息来控制开关的开启及关闭。期间各个工作状态都可由LCD显示屏来显示,实现简单的人机交换。系统整体实现流程图如图4-1所示,系统整体程序代码见附录Ⅲ。图4-1系统整体实现流程图4.2数据采集的软件设计本系统优先考虑环境光是否充足,当光线充足时,无论教室是否有人都不开灯;当环境光不够亮时,系统会判断是否有人存在,如果有人则开灯,并根据光敏电阻阻值变化改变电压大小,从而调节灯具的亮度。数据采集流程图如图4-2所示:图4-2数据采集流程图4.3时钟模块的软件设计在对DS1302进行各种操作之前,必须先对其初始化,这时需要把复位输入RST端置为高电平,如RST输入为低电平,那么数据传送将会终止,且I/O引脚变为高阻状态。数据读/写完后,RST端应置为低电平,以防外部干扰对DS1302产生影响。同时,在要求上电时,在主电源引脚VCC2大于或等于2.5V之前,RST必须为0,这是为了防止复位输入端受到外部的干扰。不管是读或者写操作,都必须在开头的8个时钟周期把命令字装入DS1302的移位寄存器。对DS1302进行读写的程序流程图如图4-3所示:图4-3DS1302读写程序流程图4.4显示模块的软件设计显示模块是本系统中人机交换的一个重要途径,通过显示器的显示,我们可以知道当前时间以及当前的工作状态并作出相应的操作。在本系统中,采用1602液晶模块,它是目前应用比较广泛的一种液晶显示模块。这种显示器可以显示两行,每行16个ASCII字符,并且可以自定义图形,只需要写入相应字符的ASCII码就可以显示。本系统中主要的显示子程序流程图如图4-4所示:图4-4显示子程序流程图4.5报警模块的软件设计本系统中的报警模块由两部分组成,即蜂鸣器和指示灯。当密码输错和定时关灯前都会发出警报,此时蜂鸣器鸣叫并且指示灯点亮。报警模块流程图如图4-5所示:图4-5报警模块流程图4.6键盘扫描的软件设计本系统采用4×4矩阵式键盘,总共含有16个按键,可设置多个功能按键。矩阵式键盘中,行、列线分别连接到按键开关两端,在进行键盘扫描时首先把键盘列线的第一根线至高,再分别检测行线是否有高电平的信号。如有信号,则证明此行线与第一条列线间的被按下了。单片机读入这个键值。如果四根行线均无信号,则将第一根列线置低,将第二根列线置高,再次检测各条行线有无信号,以此类推。由于一般人按键会有抖动。抖动会造成键盘扫描时出现一些错误信号,可能会扫描不了数据,或者重复输入很多数据,因此需要设计一个消除抖动的程序。它是这样实现的,当检测到一个脉冲信号时,并不马上认为是一次按键,而是延时一段时间后再进行检测,如果三次检测都有信号,那么就可以认为是一次有效的按键。键盘扫描程序流程图如图4-6所示:图4-6键盘扫描程序流程图

结论踉踉跄跄地忙碌了两个幸福和欣慰2003,14(3):26-32.[2]熊涛,丁辛芳,陈德英.一种新颖的照明控制电路[J].传感器技术,1999,18(5):50-53.[3]蒋世祥,徐伟杰.单片机在智能照明中的应用[J].电子工程师,2002,(7):68-73.[4]高立兵,马殷元.基于射频技术的无线网络校园照明智能控制系统[J].科学技术与工程,2010,10(1)259-262.[5]张毅刚.单片机原理及应用[M].高等教育出版社,2003.[6]桂要生,向桥,杨康.基于红外技术的智能照明控制系统设计[J].计算机与数字工程,2009,37()-104.[7]何立民.?MCS-51单片机应用系统设计[M].北京:北京航空航天大学出版社,1990.[8]梁伟伟.基于CAN总线的智能照明控制系统设计[J].信息技术与信息化,2008,()-74.[9]L.Gallin-Martela,P.AguayodeHoyosb,L.Erauda.Theread-outelectronicsoftheAMSprototypeRICHdetector[J].NuclearInstrumentsandMethodsinPhysicsResearch2003,504:273-275.[10]GaetanoGerardi,LeonardoAbbene,AngeloLaManna.DigitalfilteringandanalysisforasemiconductorX-raydetectordataacquisition[J].NuclearInstrumentsandMethodsinPhysicsResearch,2007,571:378-380.[11]王雅宁,王兆丰.基于ZigBee和模糊控制的新型室内照明控制系统设计[J].现代建筑电气,2010,()-12.[12]黄立新.使用单片机设计照明节电系统方案[J].烟台职业学院学报,2007,13(1):20-26.[13]况荣平,容太平.I2C总线在单片机上的实现[J].国外电子元器件,2001,(6):120-165.[14]?余永权,汪明慧,黄英.单片机在控制系统中的应用[M].电子工业出版社,2003.[15]吴永桥,金康进,施光林.基于单片机的节电照明控制系统[J].世界电子元器件,2004,(4):80-83.[16]黄春耀.基于非接触IC卡的开放式实验室管理系统的设计与实现[J].厦门大学,2009,(4):36-37.附录Ⅰ附录Ⅱ附录Ⅲ#include#defineucharunsignedchar#defineuintunsignedint/**********数组定义*******************/ucharcodetable1[]"inputcode:";ucharcodetable2[]"nolongthan6";ucharcodetable3[]"inputagain:";ucharcodetable4[]"Youareright!";ucharcodetable5[]"codeiswrong";ucharcodetable6[]"Havenoright!";ucharcodetable7[]"time:";ucharcodetable8[]"Setcurrenttime";ucharcodetable9[]"ymdhmsd+e";ucharcodetable10[]"Setisdone";ucharcodetable11[]"Setagain:";ucharcodetable12[]"Welcomemaster";ucharcodetable13[]"begintoset";ucharcodetable14[]"setopentime";ucharcodetable15[]"setdowntime";ucharcodetable16[]"hms+e:";ucharopentime[6]0,6,0,0,0,0;uchardowntime[6]2,3,0,0,0,0;uchartime[14]0;ucharmo[]"0123456789abcdef";ucharjian[7]1,2,3,4,5,6,15;ucharmima[7]0,0,0,0,0,0,15;/***********变量定义*********************/uchartemp,key20,count0,temp2,lastkey0;ucharnum,i,flag0,wrong0,number,codenum;ucharaa0,opennum,downnum,openhour,openmin,downhour,downmin;ucharsetsec,setmin,sethour,setdate;ucharsetmon,setday,setyear;ucharsec,min,hour,date,mon,day,year;/***********位定义***********************/sbitRSP0^7;//LCD1602sbitRWP0^6;sbitENP0^5;sbitSCLKP1^2; //DS1302sbitIOP1^1; sbitRSTP1^0;sbitP1_3P1^3; //继电器sbitP0_0P0^0; //蜂鸣器sbitP1_4P1^4; //红色报警灯sbitP0_4P0^4; //传感器输出脚/*****************函数声明****************/ucharDS1302_readucharcom;voidDS1302_writeucharcom,uchartemp;voidDS1302init;voidDS1302display;voidsettime; //timevoidlog_in; //codevoidwrite_comucharcom; //LCDvoidwrite_datauchardate;voidinit; voidstart; //LEDvoidkeyscan; //keyvoiddelayuintz;voidopen;voiddown;/*****************主函数***************/voidmaininit;while1 openhouropentime[0]*16+opentime[1];//预设的开启时间(小时)转换为十六进制数 downhourdowntime[0]*16+downtime[1]; //预设的关断时间(小时)转换为十六进制数 downmindowntime[2]*16+downtime[3]; openminopentime[2]*16+opentime[3]; minDS1302_read0x83; //读取当前的时间(分钟)即寄存器0x83处存储的是min,具体可查看1302pdf资料 hourDS1302_read0x85; ifhouropenhour&&minopenmin P1_31; //开启,即继电器导通LED灯控制端与光敏电阻 ifhourdownhour&&mindownmin P1_30; //关断,蜂鸣器停止鸣叫,红色LED灯停止闪烁 EA0;P1_40;P0_01; ifhourdownhour&&downmin-min1 start; //蜂鸣器鸣叫,红色LED灯闪烁,频率参看计数器计数初值 temp2P0_4; iftemp21 delay50; temp2P0_4; iftemp21 P1_31; iftemp20 delay50; temp2P0_4; iftemp20 P1_30; keyscan; //键盘扫描 ifkey10 log_in; //进入登陆系统 whilenumber6 //仍然处于设置阶段 write_com0x80; fori0;i16;i++write_datatable12[i]; //显示Welcomemaster write_com0xc2; fori0;i12;i++write_datatable13[i]; //显示begintoset keyscan; //扫描键盘 switchkey case11:num0;DS1302init;num0;delay500;write_com0x01;//按下key11,进入时钟设置DS1302init函数 break; case12: key20;open;opennum0;delay500;write_com0x01;//按下key12,进入开启时间设置open函数 break; case13: key20;down;downnum0;delay500;write_com0x01;//按下key13,进入关断时间设置down函数 break; case14:number0;key20;delay500;write_com0x01; //按下key14,跳出循环(number0不符合循环条件),结束设置 break; DS1302display; //液晶显示当前的时间 /*****************delay函数*************/voiddelayuintz uintx,y;forxz;x0;x-- fory110;y0;y--;//延时1ms/****************写指令函数*************/voidwrite_comucharcom //LCD1602写指令的时序RS0;RW0;EN0; P2com; delay5; RS0;RW0;EN1; delay5; RS0;RW0;EN0;/****************写数据函数************/voidwrite_datauchardate //LCD1602写数据的时序RS1;RW0;EN0; P2date; delay5; RS1;RW0;EN1; delay5; RS1;RW0;EN0;/****************初始化函数************/voidinitwrite_com0x00; write_com0x38; write_com0x0c; write_com0x06; write_com0x80;write_com0x01; //液晶初始化,光标,显示开关等的初始值 P1_40;P0_01; P1_31; //红色LED灭,蜂鸣器不叫,继电器 DS1302_write0x8e,0x00;//写使能 DS1302_write0x8e,0x80;//写保护 /****************设置开启时间**************/voidopenwrite_com0x01; //清屏write_com0x80;fori0;i13;i++write_datatable14[i]; //显示setopentimedelay1000;write_com0x01;write_com0x80; //第一行fori0;i9;i++write_datatable16[i]; //显示hms+e:write_com0xc0; //第二行whileopennum7 //继续输入的条件 keyscan; ifkey!20 //有键按下 opentime[opennum]key; //键值赋给数组 write_datamo[key]; //显示键值 opennum++; //输入的数目加1 ifopennum7&&key!15||opennum7&&key15//如果第7位输入不是Enter键或者输入的数小于7个时就按下了Enter键 write_com0x01; //清屏write_com0x80; fori0;i10;i++ write_datatable11[i]; //显示Setagain: delay1000; write_com0x01; fori0;i8;i++ write_datatable16[i]; //显示hms+e:opennum0; //输入的数目清零write_com0xc0; ifopennum7&&key14 //如果输入的数目小于7个并且按下key14即删除键write_com0x01;write_com0x80;fori0;i9;i++ write_datatable16[i]; //显示hms+e:write_com0xc0;fori0;iopennum-2;i++ write_datamo[opentime[i]];//把删除的数之前的数重新显示在LCD上,看上去的效果就是把最后输入的数删除了opennumopennum-2; //输入的数目减去2,因为自加了1次,删除了1个,所以是减2write_data''; //删除的那个位置显示空格,其实就是什么都不显示write_com0xc0+i; //设置下次写输入的数时的位置ifopennum0 //没有输入的时候按下删除键,赋值,不然会乱码opennum1; key20; //初始键值 /****************设置关断时间**************/voiddown write_com0x01; //与开启时间函数open类似 write_com0x80; fori0;i13;i++write_datatable15[i]; delay1000; write_com0x01; write_com0x80; fori0;i9;i++write_datatable16[i]; write_com0xc0; whiledownnum7 keyscan; ifkey!20 downtime[downnum]key; write_datamo[key]; downnum++; ifdownnum7&&key!15||downnum7&&key15 write_com0x01;write_com0x80; fori0;i10;i++ write_datatable11[i]; delay1000; write_com0x01; fori0;i8;i++ write_datatable16[i];downnum0;write_com0xc0; ifdownnum15&&key14write_com0x01;write_com0x80;fori0;i9;i++ write_datatable16[i];write_com0xc0;fori0;idownnum-2;i++ write_datamo[downtime[i]];downnumdownnum-2;write_data'';write_com0xc0+i;ifdownnum0downnum1; key20; /****************设置当前时间**************/voidsettimekey20; //初始键值write_com0x01;write_com0x80;fori0;i16;i++write_datatable8[i]; //显示Setcurrenttimedelay2000;write_com0x01;fori0;i16;i++write_datatable9[i]; //显示ymdhmsd+ewrite_com0xc0;whilenum15 //与open函数里输入的设置是一样的keyscan; ifkey!20 time[num]key; write_datamo[key]; num++; ifnum15&&key!15||num15&&key15 write_com0x01;write_com0x80; fori0;i10;i++ write_datatable11[i]; delay1000; write_com0x01; fori0;i16;i++ write_datatable9[i];num0;write_com0xc0; ifnum15&&key14write_com0x01;write_com0x80;fori0;i16;i++ write_datatable9[i];write_com0xc0;fori0;inum-2;i++ write_datamo[time[i]];numnum-2;write_data'';write_com0xc0+i;ifnum0num1; key20;/***************时钟初始化**************/voidDS1302initsettime; //设置时间函数 setyeartime[0]*16+time[1]; //将输入的时间转换为十六进制数 setmontime[2]*16+time[3]; setdatetime[4]*16+time[5]; sethourtime[6]*16+time[7]; setmintime[8]*16+time[9];setsectime[10]*16+time[11];setdaytime[12]*16+time[13]; write_com0x01; write_com0x80; fori0;i11;i++write_datatable10[i]; //显示 Setisdonedelay2000; write_com0x01; DS1302_write0x8e,0x00;//写使能 DS1302_write0x80,setsec;//参看DS1302_write函数 DS1302_write0x82,setmin; DS1302_write0x84,sethour; DS1302_write0x86,setdate; DS1302_write0x88,setmon;DS1302_write0x8a,setday;DS1302_write0x8c,setyear; DS1302_write0x8e,0x80;//写保护 /****************显示时钟***************/voidDS1302display uchari0;secDS1302_read0x81; //读取存储器中的时间数据minDS1302_read0x83;hourDS1302_read0x85; dateDS1302_read0x87;monDS1302_read0x89; dayDS1302_read0x8b; yearDS1302_read0x8d; write_com0x80; write_datamo[hour/16]; //显示小时到LCD上,因为是16进制的,所以是除以16 write_datamo[hour&0x0f]; //把高4位清零 write_data':'; write_datamo[min/16]; write_datamo[min&0x0f]; write_data':'; write_datamo[sec/16]; write_datamo[sec&0x0f]; write_data'';write_data''; //显示day write_data'w'; write_data'e'; write_data'e'; write_data'k'; write_datamo[day&0x0f]; write_com0x80+0x40; write_datamo[year/16]; //显示year write_datamo[year&0x0f]; write_data'/'; write_datamo[mon/16]; //显示mon write_datamo[mon&0x0f]; write_data'/'; write_datamo[date/16]; write_datamo[date&0x0f];//显示date/**************DS1302_Read*************/ucharDS1302_readucharcom uchartemp0; uchari0; RST0; SCLK0; RST1; fori0;i8;i++ SCLK0; //上升沿有效取出1位1位发送 ifcom&0x010x01 IO1; else IO0; SCLK1; com1; fori0;i8;i++ SCLK0; //下降沿有效 temp1; ifIO1 temp|0x80; else temp|0x00; SCLK1; SCLK0; RST0; returntemp; /***************DS1302_write************/voidDS1302_writeucharcom,uchartemp uchari0; RST0; SCLK0; RST1; fori0;i8;i++ SCLK0; //上升沿有效 ifcom&0x010x01 IO1; else IO0; SCLK1; com1; fori0;i8;i++ SCLK0; //上升沿有效 iftemp&0x010x01 IO1; else IO0; SCLK1; temp1; SCLK0; RST0; /*****************登录函数***************/voidlog_inwhilenumber4 //输入密码错误次数key20;flag0;wrong0;count0;delay100;write_com0x01; write_com0x80;fornum0;num11;num++ write_datatable1[num];//显示inputcode: delay10; write_com0xc0;whilecount7 //输入密码 keyscan; //以下与open函数里的输入设置也是一样的 ifkey!20&&key!14 mima[count]key; write_datamo[key]; ifjian[count]!key //判断输入的数与预设的密码值 wrong1;//不同,错误次数加1 count++; lastkeykey; ifcount7&&key14 //删除键 ifcount0count1;write_com0x01;write_com0x80;fornum0;num12;num++ /r

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论