基于单片机的智能路灯节能系统的设计与实现1_第1页
基于单片机的智能路灯节能系统的设计与实现1_第2页
基于单片机的智能路灯节能系统的设计与实现1_第3页
基于单片机的智能路灯节能系统的设计与实现1_第4页
基于单片机的智能路灯节能系统的设计与实现1_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

摘要本文介绍了基于单片机的智能路灯节能系统的设计与实现。本系统会根据交通情况和环境明暗自动调节亮灯状态:当环境较暗时,汽车靠近路灯时,路灯能自动点亮;当汽车远离时,路灯自动熄灭。本方案以AT89S52单片机为核心,用来实现物体感应模块,时钟模块,主控制模块,按键控制模块,显示模块,加以简单的外围电路,实现了智能路灯节能系统所要求的全部技术内容。单片机在最近几年应用越来越广泛,因其抗干扰能力强、稳定性好,性价比高,因此是低本钱路灯控制解决方案的首选。该控制系统除了选用廉价的单片机芯片,还采用了廉价的红外对射传感器,大大降低了系统本钱。整个系统的电路简单,结构紧凑,电源驱动仅采用变压器与三端稳压器相结合,附加少许滤波电容便实现了稳定的电源输出。系统的单片机程序使用C语言编写,windowsxp为开发平台,keil为开发工具。经过屡次测试,证实该系统能长时间稳定工作,完全满足设计要求指标。关键词:模拟控制LED照明单片机C语言ABSTRACTThispaperintroducesthedesignandimplementationofintelligentstreetlampenergysavingsystembasedonMCU.Thesystemwillaccordingtothetrafficconditionsandthebrightnessautomaticallyadjustthelightingstate:whentheenvironmentisdark,thecarclosetothestreetlamp,streetlamplightautomatically;whenmovingawayfromthecar,streetlampsautomaticallyextinguished.ThisplantomacrocrystalcompanyAT89S52asthecore,usedtorealizetheobjectsensingmodule,clockmodule,mastercontrolmodule,keycontrolmodule,displaymodule,tochiptheperipheryofthesimplecircuit,realizethesimulationstreetlampcontrolsystemalloftherequestedtechnologycontent.STCSCMinrecentyearsmoreandmorewideapplication,becauseofitsstronganti-interferenceability,goodstability,highperformance/priceratio,andsoisthelowcoststreetlampcontrolsolutionsofchoice.Thecontrolsysteminadditiontochoosecheapsingle-chipmicrocomputerchip,alsoadoptedthecheapinfraredmutualilluminatesensor,andgreatlyreducethecostofsystem.Thewholesystemofthecircuitissimple,compactstructure,powerdriveonlyusedthreetransformerandtheregulators,andthecombinationofafewadditionalfiltercapacitancewillrealizethestablepoweroutput.ThemicrocontrollerprogramofthesystemiswritteninClanguage,WindowsXPisthedevelopmentplatform,Keilisthedevelopmenttool.Aftermanytest,andconfirmthatthesystemcanworkstablyforalongtime,fullymeetthedesignrequirementsindex.Keywords:SimulatecontrollingLEDlightingSingle-chipmicrocomputerClanguage目录第一章绪论51.1概述51.2论文的题目51.3研究的背景51.4研究的目的及意义51.5国内开展现状与趋势61.6研究内容6第二章系统总体设计方案92.1.0系统设计思路与方案比拟论证9系统设计思路9方案论证与确立9第三章系统硬件设计132.2.0各个模块的硬件电路设计132.2.1时钟模块设计132.2.3主控制模块设计142.2.4单片机AT89S52芯片介绍142.2.4显示模块设计172.3.0系统各模块的最终方案192.4.0系统功能说明书202.4.1路灯的工作模式20第四章软件设计243.1.0系统主程序流程图24系统流程图243.2.0定时器溢出中断处理函数流程图253.3.0按键扫描流程图26总结27致谢28参考文献29附录30第一章绪论1.1研究的背景随着全球经济的飞速开展,节约能源己成为全世界各国最为关注的问题。中国的电力能源问题近年来十分紧迫,个别地区时常会出现停电问题,停电事故严重阻碍人们的日常生活和工作,甚至会影响中国之崛起,华夏文明之延续。在城市美化和夜间亮化潮流的趋势下,城市夜间照明也巨大的消耗着我们的电能资源。然而电业的投资和建设需要一个很长的周期,快速的经济开展需要更多更充足的电能供给,电力的供给与需求之间存在大量矛盾。电力供给缺陷很难在短时间内得到解决,开展与节约并重,已然成为经济建设的必然选择。因此,灯光照明行业节电也成为了我们的必然要求!1.2研究的目的及意义〔1〕研究的目的智能路灯节能系统主要以AT89S52单片机作为智能路灯节能系统的控制核心,用以实现物体感应,时钟,主控制,按键控制,显示,五大模块。〔2〕研究的意义介于单片机具有集成度高,处理能力强,可靠性高,系统结构简单,价格低廉的优点,因此在交通照明中被广泛使用,照明管理的先进与否又将直接影响到城市的外观、交通平安和社会治安等方面,是营造良好城市环境的重要条件,对城市建设和未来开展都有着重要的影响。1.3国内开展现状与趋势随着中国城市化建设的不断深入,人们出行更加方便,交通设施也更加健全,但是城市的能耗也更加严重。在现代化的城市里,公路、建筑照明已成为城市必不可少的一局部,一座城市的兴旺程度往往和城市夜间照明成正比。在开展城市照明的进程中,照明强度及控制设备取得了前所未有的进步,然而城市照明的电能消耗和损耗也越来越大,随着地区停电和电费涨价,人们越来越关心节能问题。其中路灯的节能控制相当重要,目前国内路灯节能主要的途径有三种:合理的光照度;使用节能光源,例如日常生活中常见的LED节能灯;合理的管控设备,即根据环境而控制开关的系统,可以在现有照明系统上加装节能控制设备。从现实的角度来看,第一种方案输入电压不过高即可,可人为调控;第二种方案适用于新设计的照明回路,对于已有的照明系统,更换所有灯具的投入资金过大;第三种方案比拟流行,对现有照明系统的节能进行再次改造即可,一般在原有根底上加装节能设备较为经济和实用,目前国内的照明节能设备市场中照明调控装置所占的比例是最大的而且也是最实用的。1.4研究内容图1-1路灯控制系统示意图图1-2路灯模型示意图〔单位:厘米〕如图1-1所示,支路控制器能控制其所在支路上的所有LED灯的开关时间并显示,而且能根据环境明暗变化,自动开灯和关灯。根据车流情况自动改变亮光状态。如图1-2所示,当车辆M〔在车辆M前已标出定位点,由此确定车辆位置〕由左至右行进到S处,LED灯1亮;当车辆M行进到B处,LED灯1灭,LED灯2亮;假设车辆M由右至左移行进,那么LED灯开启顺序与之正好相反。支路控制器能分别控制每个LED灯的开关时间。当LED灯出现故障时,支路控制器会在城市路灯终端系统显示故障LED灯的地址号码。单元控制器具有调节灯光,采用恒流驱动电源等特性,路灯的输出功率能在要求下自动减小或增大,其功率能在百分之二十到全额输出的范围设置和改变,它的误差小于等于百分之二。具有稳定性强,性价比相对较高,符合电磁兼容方面的要求,无对外干扰或干扰较小。第二章系统总体设计方案2.1系统设计思路本智能路灯节能系统的设计方案主要实现以下五个方面的功能:〔1〕显示损坏路灯编号功能:当路灯出现故障不亮时,系统会向维护终端发出信号,显示有故障灯的地址号码。〔2〕时钟功能及定时开关灯。〔3〕根据环境光照变化自动开关灯,相对于固定开启时间设置更具人性化,例如在阴雨的白天也会自动开启。〔4〕根据路况自动开关灯:当汽车行近路灯时,路灯自动点亮;当汽车远离时,路灯自动熄灭。〔5〕是根据绿色节能照明要求,采用恒流源驱动LED路灯发亮且能调光,路灯电源功率能在百分之二十到全额输出范围调节和设置,误差小于等于百分之二。以上功能的实现,都是基于单片机技术,在单片机实现的输入输出和显示功能的根底上,由单片机的内置逻辑和运算功能,加上假设干的功能性电路来到达设计的需求。针对以上的五个方面,使用模块化的设计,以下逐一表达之。2.2方案论证与确立〔1〕时钟功能及定时开关机方案一:采用专用时钟芯片目前常用的串行时钟电路有常见的DS1307、PCF8485、DS1302.其优势是可以单独使用,直接连接到单片机外围,有自己独立的时钟晶振,精度较高。单片机通过串行接口能够实现读取和写入时钟值,时钟芯片的运行受单片机死机的影响少。其缺点一是消耗了单片机IO口资源。二是在编程时需要增加读写串行口的内容,消耗了单片机的运行时间。三是增加了本钱。增加了时钟芯片及其外围电路的开支。方案二:采用单片机内置时钟本方案直接通过单片机内置定时器的中断和运算实现时钟功能。例如:单片机,在4M时钟时,单个指令的运行时间是1微秒,设置定时器1每125个指令周期产生一个中断,即125微秒,8个中断后,时间平台是1毫秒,设置以下时间计数变量分别为:ucharTo1mS=0x00;//当该变量增加到某个数值时,表示经过了1毫秒ucharTo2mS=0x00;//当该变量增加到某个数值时,表示经过了2毫秒ucharIs2mS=0;//到达2毫秒时刻ucharTo20mS=0x00;//当该变量增加到某个数值时,表示经过了20毫秒ucharIs20mS=0;//到达20毫秒时刻ucharTo1S=0x00;//当该变量增加到某个数值时,表示经过了1秒ucharIs1S=0;//到达1秒时刻在秒时间平台,用ToMIN变量,计数60秒后进入分钟平台,计数60分钟后,进入小时平台。方案二没有增加外置电路,充分利用了单片机的定时器功能,实施简洁方便,主要的缺点是当控制系统断电或死机以后,需要人工重新定时。因此本系统的时钟功能实现采用方案二。〔2〕根据环境光照度变化,自动控制灯的开关。方案一:使用比拟器。光敏电阻与固定电阻串联加一级电压跟随器后输入比拟器,与比拟器负输入端的电压值进行比拟得到一个高电平或低电平输出,进入单片机的IO口。优点是电路比拟直观,操作比拟方便,可直接通过电位器调节路灯的开启亮度。对维护人员的要求不高。缺点是不方便进行数码控制。方案二:采用AD变换。光敏电阻与固定电阻串联,由单片机内置的AD变换接口读入当前的电压值,然后根据读取的电压值判断当前的环境亮度。路灯开启电压由内部变量控制。方案二的优点在于能方便的对路灯开启电平的数码控制和远程控制。本系统采用方案二。〔3〕根据路况自动调控LED灯的开关。当车辆行近LED灯时,LED灯能自动发光;当汽车远离时,路灯自动熄灭。方案一:使用工业级的光电传感器,这种光电传感器普遍运用于电梯、生产线等工业场所。优点是使用方便,型号很多,输出量是开关量,不需调理电路。缺点是价格较贵。方案二:使用廉价的红外对射传感器。红外对射传感器的特点是传输距离较远且信号集中,当没车辆遮挡时,红外光直射到红外探头上,红外接收管连续输出低电压到单片机,当有车辆经过时,红外光被遮住,此时红外探头输出高电压到单片机。由于红外光的发射有一定的偏角,本设计利用了黑色套管遮挡红外发射灯头,以减少红外光的散失。综合考虑,本系统采用方案二。〔4〕故障报警功能用光敏电阻检测路灯的亮度,同时能防止环境的干扰。利用单片机的AD口,读入光敏电阻上检测到的路灯亮度值。〔5〕恒流源驱动LED及20%到100%范围内可调亮度。方案一:采用恒流源驱动芯片,目前市场上成品的恒流源驱动芯片比拟多,一般采用使用取样电阻调节输出电流的方式。这些芯片使用方便,性能较好,但价格较贵。方案二:采用PWM方式驱动功率三极管输出驱动电流,用电流取样电阻串入LED供电回路,用AD口读取当前的电流值,实现闭环控制。此方案利用AT89S52的AD变换,并且使用PWM的形式,能使路灯工作在间歇状态,可以延长路灯的使用时限。因此本系统采用方案二。〔6〕显示模块方案一:数码管显示,由于此题要求实时显示系统时间、状态、和故障LED灯编号等,而数码管不能显示字符。方案二:LED点阵显示,LED点阵显示虽然能显示字符和数字,但显示效果不好,且不易编程。方案三:LCD液晶显示,LCD液晶不但能显示字符和数字,而且显示效果较好,容易编程实现。因此采用方案三。〔7〕按键控制模块 方案:均采用轻触按键。第三章系统硬件设计3.1时钟模块设计时钟模块的功能是设置时间,它由DS1302芯片实现,时钟模块过串行方式与单片机连接,实现数据的传送,它能向单片机提供详细的时间信息,并可对月末日期、闰年日期进行自动调整;它还拥有用于主电源和备份电源的双电源引脚,在主电源断电的状况下,仍能使时钟继续工作。另外,它还能提供31字节的用于高速数据暂存的RAM.介于上述特点,DS1302已在许多单片机系统中得到应用,为系统提供所需的实时时钟信息。1.DS1302芯片概述DS1302慢速充电时钟芯片包括实时时钟/日历和31字节的静态RAM,它经过一个简单的串行接口与微处理器通信,实时时钟/日历提供秒、分、时、日、周、月和年等信息,对于小于31天的月,月末的日期自动进行调整,还包括了闰年校正的功能。时钟的运行可以采用24小时或带AM〔上午〕/PM〔下午〕的12小时格式。使用同步串行通信,简化了DS1302与微处理器的通信。与时钟/RAM通信仅需三根线:〔1〕(复位)、〔2〕I/O〔数据线〕、和〔3〕SCLK〔串行时钟〕。数据可以以每次一个字节或多达31字节的多字节形式传送至时钟/RAM或从其中送出。DS1302设计成为能在非常低的功耗下工作,消耗小于1微瓦的功率便能保存数据和时钟信息。DS1302是DS1202的升级产品,除了DS1202根本的慢速充电功能外,DS1302具有的其它特点包括:用于主电源和备份电源的双电源的双电源引脚,可编程的VCC1慢速充电器以及7个附加字节的高速暂存存储器。2.DS1302工作原理串行时钟芯片的主要组成局部:移位存放器、控制逻辑、振荡器、实时时钟以及RAM。为了初始化任何的数据传送,把置为高电平且把提供地址和命令的8位装入到移位存放器,数据在SCLK的上升沿串行输入,无论是读周期还是写周期发生,也无论传送方式是单字节传送还是多字节传送,开始8位指定40个字节中的哪个将被访问。在开始8个时钟周期把命令字装入移位存放器之后,另外的时钟在读操作时输出数据,在写操作时输入数据。时钟脉冲的个数在单字节方式下为8加8,在多字节方式下为8加最大可达248的数。如图2-2,引脚排列:图2-2DS1302引脚排列引脚说明:X1,X2:32,768kHz晶振引脚;GND:接地;:复位;I/O数据输入输出;SCLK:串行时钟;VCC1,VCC2:电源引脚。3.2主控制模块设计2.2.4单片机AT89S52芯片介绍AT89S52为ATMEL所生产的一种低功耗,高性能CMOS8位微控制器,具有8K在系统可编程Flsah存储器。AT89S52主要功能列举如下:1.拥有灵巧的8位CPU和在系统可编程Flash;2.芯片内部具时钟振荡器〔传统最高工作频率可至12MHz〕;3.内部程序存储器〔ROM〕为8KB;4.内部数据存储器〔RAM〕为256字节;5.32个可编程I/O口线;6.5个中断向量源;7.两个16位定时器/计数器;8.三级加密程序存储器;9.全双工UART串行通道;AT89S52各引脚功能介绍:VCC:AT89S52电源正端输入,接+5V;VSS:电源地端;XTAL1:单芯片系统时钟的反相放大器输入端;XTAL2:系统时钟的反相放大器输出端,一般在设计上只要在XTAL1和XTAL2上接上一只石英振荡晶体系统就可以动作了,此外可以在两引脚与地之间参加一20PF的小电容,可以使系统更稳定,防止噪声干扰而死机。RESET:AT89S52的重置引脚,高电平动作,当要对芯片重置时,只要对此引脚电平提升至高电平并保持两个机器周期以上的时间,AT89S52便能完成系统重置的各项动作,使得内部特殊功能存放器之内容均被设成状态,并且至地址0000H处开始读入程序代码而执行程序。EA/Vpp:EA〔ExternalAccessEnable〕为该引脚的第一功能,即外部程序存储器访问允许控制端。当EA接高电平时,在PC值不超出0FFFH时,单片机读片内程序存储器中的程序;当PC值超出0FFFH时,当自动转向读取片外60KB程序存储器空间中的程序。当EA接低电平时只读取外部程序存储器中的内容,片内程序存储器不起作用。Vpp为该引脚的第二功能,即在对片内Flash进行编程时,接入编程电压。ALE/PROG:ALE是英文"AddressLatchEnable"的缩写,表示地址锁存器启用信号。AT89S52可以利用这支引脚来触发外部的8位锁存器〔如74LS373〕,将端口0的地址总线〔A0~A7〕锁进锁存器中,因为AT89S52是以多工的方式送出地址及数据。平时在程序执行时ALE引脚的输出频率约是系统工作频率的1/6,因此可以用来驱动其他周边晶片的时基输入。此外在烧录8751程序代码时,此引脚会被当成程序规划的特殊功能来使用。当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。PSEN:此为"ProgramStoreEnable"的缩写,其意为程序储存启用,当AT89S52设成为读取外部程序代码工作模式时〔EA=0〕,会送出此信号以便取得程序代码,通常这支脚是接到EPROM的OE脚。AT89S52可以利用PSEN及RD引脚分别启用存在外部的RAM与EPROM,使得数据存储器与程序存储器可以合并在一起而共用64K的定址范围。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。PORT0〔P0.0~P0.7〕:端口0是一个8位宽的开路汲极〔OpenDrain〕双向输出入端口,共有8个位,P0.0表示位0,P0.1表示位1,依此类推。其他三个I/O端口〔P1、P2、P3〕那么不具有此电路组态,而是内部有一提升电路,P0在当做I/O用时可以推动8个LS的TTL负载。如果当EA引脚为低电平时〔即取用外部程序代码或数据存储器〕,P0就以多工方式提供地址总线〔A0~A7〕及数据总线〔D0~D7〕。设计者必须外加一锁存器将端口0送出的地址栓锁住成为A0~A7,再配合端口2所送出的A8~A15合成一完整的16位地址总线,而定址到64K的外部存储器空间。PORT1〔P1.0~P1.7〕:端口1也是具有内部提升电路的双向I/O端口,其输出缓冲器可以推动4个LSTTL负载,同样地假设将端口1的输出设为高电平,便是由此端口来输入数据。如果是使用8052或是8032的话,P1.0又当做定时器2的外部脉冲输入脚,而P1.1可以有T2EX功能,可以做外部中断输入的触发脚位。PORT2〔P2.0~P2.7〕:端口2是具有内部提升电路的双向I/O端口,每一个引脚可以推动4个LS的TTL负载,假设将端口2的输出设为高电平时,此端口便能当成输入端口来使用。P2除了当做一般I/O端口使用外,假设是在AT89S52扩充外接程序存储器或数据存储器时,也提供地址总线的高字节A8~A15,这个时候P2便不能当做I/O来使用了。PORT3〔P3.0~P3.7〕:端口3也具有内部提升电路的双向I/O端口,其输出缓冲器可以推动4个TTL负载,同时还多工具有其他的额外特殊功能,包括串行通信、外部中断控制、计时计数控制及外部数据存储器内容的读取或写入控制等功能。其引脚分配如下: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:外部数据存储器的写入信号。P3.7:RD,外部数据存储器的读取信号。3.3显示模块设计1.1602液晶概述 液晶是一种高分子材料,因为其特殊的物理、化学、光学特性,被广泛应用于轻薄显示器上。本系统显示模块采用了LCD1602液晶显示器每行能够显示16个字符,可以显示两行。主要实现系统时间设定,灯的开关时间的功能,系统状态显示。2.1602各引脚简介:1062采用标准的16脚接口,其中:第1脚:VSS为电源地第2脚:VCC接5V电源正极第3脚:V0为液晶显示器比照度调整端,接地正电源时比照度最弱,接地电源是比照度最高〔比照度过高时会产生“鬼影〞,使用时可以通过一个10K的电位器调整比照度〕。第4脚:RS为存放器选择,高电平1时选择数据存放器、低电平0时选择指令存放器。第5脚:RW为读写信号线,高电平〔1〕时进行读操作,低电平〔0〕时进行写操作。第6脚:E〔或EN〕端为使能〔enable〕端。第7~14脚:D0~D7为8位双向数据端。第15~16脚:空脚或背灯源。15脚背光正极,16脚背光负极3.1602LCD的特性3V或5V工作电压,比照度可调内含复位电路提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能有80字节显示数据存储器DDRAM内建有192个5X7点阵的字型的字符发生器CGROM.8个可由用户自定义的5X7的字符发生器CGRAM。4.1602LCD特征微功耗、体积小、显示内容丰富、超薄轻巧,常用在袖珍式仪表和低功耗应用系统中。5.与单片机连接见图2-5所示:图2-53.4系统各模块的最终方案键盘键盘单片机时间显示明暗环境交通环境节能控制LED灯报警3.5路灯的工作模式本模拟路灯控制系统具备5种工作模式,分别是自动群控模式、自动分控模式、根据照度自动控制模式、根据交通情况自动控制模式、手动控制模式,下面对每种工作模式简单介绍如下:〔1〕自动群控模式在该模式下,支路控制器根据设定好的定时信息,自动地同时翻开或者关闭两盏路灯。系统启动后默认进入该模式。〔2〕自动分控模式在该模式下,支路控制器根据设定好的定时信息,分别控制两盏路灯的开关,例如,当系统的时间和路灯1开灯的时间相等时,开启路灯1;当系统的时间和路灯2关灯的时间相等时开启路灯2。〔3〕根据照度自动控制模式在该模式下,当环境照度低于一定的值时开启两盏路灯,当环境照度高于一定的值时关闭两盏路灯。〔4〕根据交通情况自动控制模式在该模式下,当可移动物体M由左到右到达S点时〔见图××〕,灯1亮;当物体M到达B点时,灯1灭,灯2亮;假设物体M由右到左移动时,那么亮灯的次序与上相反。〔5〕手动控制模式在手动模式时,两盏路灯只能由支路控制器用增加和减少键手动的调整亮度,路灯的亮度可以在0%~100%自由的上下调整,步进为10%。〔1〕~〔4〕等四种工作模式是互斥的,即在某一时刻只能具有其中的一种功能,不过各种模式可以手动的切换,手动调整路灯亮度的功能在这四种模式中都是有效的。另外,该路灯控制系统还具备故障检测功能,当路灯出现无法正常工作的状况时,该控制系统能够判定是哪一环节出现问题,并将故障通过声音警报及数码管显示告知用户。3.6按键操作说明支路控制器具备5个按键,分别为时间调整键、模式选择键、增加键、减少键、确认键。〔1〕时间调整键:按时间调整键时,可以循环地选择系统时间、路灯1和2共同的开关灯时间、路灯1的开关灯时间和路灯2的开关灯时间。〔2〕模式选择键:按模式选择键可以进行系统工作模式的切换,顺序为自动群控模式;自动分控模式;根据照度自动控制模式;根据交通情况自动控制模式;手动控制模式。〔3〕增加、减少键:按这两个键可以对时间或者亮度进行增减,长按时时间或者亮度可以连续变换。〔4〕确认键:确认键只在时间调整时有效,分别确认小时、分钟、秒的输入。3.7输入模块按键输出采用AD变换,节省了IO口资源。通过不同大小的电阻进行分压,按下不同的按键就会向单片机发送不同的电压值。如:按下s1是0V;按下s2,电压=2K/〔2K+10K〕*5V=0.83V。经过单片机AD变换之后,就可以判断是哪个按键按下去,从而执行相应的功能。按键输入如图下所示2.3。3.8电流驱动源电流源驱动电路,是为驱动1W大功率LED灯而设计的。LED灯属于电流源驱动,根据计算,每个1W的LED灯至少需要200mA的驱动电流才能点亮,而单片机的IO输出电流实际只有20mA到30mA,所以必须经过电流放大才能使其工作。因此在该电路中采用了一个9013对电流进行放大。电流驱动源电路如图2.72.8硬件电路图第四章软件设计3.1.0系统主程序流程图3.1.1系统流程图图3.1系统流程图3.2.0定时器溢出中断处理函数流程图图3.2定时器溢出中断处理函数流程图3.3.0按键扫描流程图图3.3按键扫描流程图总结该系统调试最终结果,符合本次设计的全部要求。经过功率扩大、电网通讯等方面的改进,就能用于实际路灯控制。以其超低本钱,高可靠性的特点,与其他现有成品相比,具有一定的竞争优势。该控制系统在调试过程中,遇到过一些与理论相差很大的实际问题。比方红外对射传感器的对焦问题,因为红外线是不可见光,对焦比拟麻烦,但是借用其他辅助工具就会简单很多。最简便的方法是利用带摄像头的来获取红外光,从而能顺利完成对红外对射传感器的对焦。红外对射的接收局部,因受频率限制,只能接收频率在38KHz的红外信号,所以在调试过程中有一定的难度。经方案论证,采用PWM脉宽调制输出,是切实可行的最有效方案致谢本文的研究工作是在老师的精心指导和悉心关心下完成的,在我的设计题目的选择、实物的调试和论文的研究工作中无不倾注着指导老师辛勤的汗水和心血。同时也要感谢帮助过我们的同学,给我们提供了珍贵的建议。指导老师的严谨治学态度、无私的奉献精神使我深受的启迪。从尊敬的指导老师身上,我不仅学到了扎实、宽广的专业知识,也学到了做人的道理,在此我要向我的指导老师致以最衷心的感谢和深深的敬意。在多年的学习生活中,还得到了许多领导和老师的热情关心和帮助,在此,向所有关心和帮助过我的领导、老师、同学和朋友表示由衷的谢意!参考文献[1]于殿泓,王新年.单片机原理与程序设计实验教程[M].西安:西安电子科技大学出版社,2007,8.[2]赵文博,刘文涛.单片机语言C51程序设计[M].北京:人民邮电出版社,2005,10.[3]李爱秋.红外线遥控12位电子密码锁的设计[J].温州职业技术学院学报第8卷第一期,2023.[4]陈杰,黄鸿.传感器与检测技术[M].北京:高等教育出版社,2023,8.[5]周航慈.单片机应用程序设计技术[M].北京:北京航空航天大学出版社,2023,2.[6]李朝青.单片机原理及接口技术[M].北京:北京航空航天大学出版社,2005,10.[7]孙育才.MCS-51系列单片微型计算机及其应用[M].东南大学出版社,2004,6.[8]沈红卫.单片机应用系统设计实力与分析[M].北京:北京航空航天大学出版社,2003.[9]徐爱钧,彭秀华.单片机高级语言C51应用程序设计[M].北京航空航天大学出版社,2006.[10]曾一江.单片微机原理与接口技术[M].北京:科技出版社,2023,12.[11]康华光.电子技术根底〔模拟局部〕[M].北京:高等教育出版社,2004,4.附录:程序#include<reg52.h>//52单片机头文件,规定了52单片机的存放器和IO口等#include<intrins.h>//_nop_空指令及左右循环移位子函数库#defineucharunsignedchar//宏定义#defineuintunsignedint//宏定义sbitlcden=P1^2;//定义下面通过lcden来操作P2^7口,1602液晶使能控制端sbitlcdwr=P1^1;//定义下面通过lcdrw来操作P2^5口,1602读写选择端sbitlcdrs=P1^0;//定义选数据存放器选指令存放器控制端sbitsda=P2^1;//定义DS1302数据总线sbitrst=P2^3;//DS1320复位sbitsck=P2^2;//定义时钟总线sbits1=P1^3;//定义设置按钮sbits2=P1^4;//定义调时按钮sbits3=P1^5;//定义确定按钮sbits4=P1^6;sbitACC0=ACC^0;sbitACC7=ACC^7;sbitBELL=P1^5;sbitGuang=P3^2;sbitL=P2^3;sbitD1=P2^4;sbitD2=P2^5;sbitD3=P2^6;sbitD4=P2^7;sbitH1=P3^0;sbitH2=P3^1;charfen,shi,miao,ri,yue,nian,zhou,s1num,s2num,s4num,flag1,flag2,lshi,lfen;ucharcodetable[]={"2023--"};//要写入1602液晶的数据ucharcodetable1[]={":::"};//字库中的字可直接以外加""号的形式直接写入ucharcodetable2[]={"WelcomeToLcd!"};//欢送界面ucharcodetable3[]={"HappyEveryDay!"}; //欢送界面/*******************************************************************************时函数,z的取值为这个函数的延时ms数,delay(200);大约延时200ms.delay(500);大约延时500ms*******************************************************************************/voiddelay(uintz){ uintx,y; for(x=z;x>0;x--) for(y=110;y>0;y--);}/*********************蜂鸣器函数************************************************/voiddidi(){ uchari;for(i=0;i<60;i++){BELL=0; delay(1); BELL=1; delay(1);}}/*******************向1602液晶中写一个指令**************************************/voidwrite_com(ucharcom){ lcdwr=0; //lcdwr为读写控制端,lcdwr=0,这里可不写 lcdrs=0;//液晶rs接口为0时,写指令,rs为1时写数据 P0=com;//将要写的指令赋给P0口, delay(5);//由1602读写操作时序图,先将指令赋给P0口,延时后将使能 lcden=1;//端lcden置高,再延时一段时间,然后将lcden置低,这样指令 delay(5); //就写入到LCD了 lcden=0;}/****************************向液晶写数据***************************************/voidwrite_data(uchardate)//与写指令类似,这里lcdrs设为1{ lcdrs=1; P0=date; delay(5); lcden=1; delay(5); lcden=0;}/*****************************初使化1602液晶************************************/voidinit_1602(){ lcdwr=0; lcden=0; write_com(0x38);//设置LCD为16*2显示、5*7点阵、8位数据接口模式 write_com(0x0c);//开显示、不显示光标 write_com(0x06);//写一个字符后,地址指针加1 write_com(0x01);//显示清0}/*******************************************************************************/voidgudingtime_1602(){ucharnum; write_com(0x80);//将指针指向初始位置 for(num=0;num<16;num++)//循环函数,用于将"2023--"写入液晶 write_data(table[num]); write_com(0x80+0x40);//将指针指向1602液晶的第二行 for(num=0;num<16;num++)//功能与上同,用于将":::"写入 write_data(table1[num]);}/**************************显示欢送界面函数*************************************/voiddisplaystar(void){ uchari; write_com(0x80); for(i=0;i<16;i++) write_data(table2[i]); write_com(0x80+0x40); for(i=0;i<16;i++) write_data(table3[i]);}/***************************显示时间、日期子函数*********************************/voidwrite_sfm(ucharadd,uchartime)//用于在1602上显示年、月、日、时、分、秒。Add为显示位置,time为要显示的内容{ ucharshiwei,gewei; shiwei=time/16;//将从DS1302中读取的BCD码数据转化成10进制个位和10 gewei=time%16;//进制十位 write_com(add+0x80);//定义显示在液晶的什么位置 write_data(0x30+shiwei);//由1602液晶字库可知,0~9的数据码分别对应0x30~0x39 write_data(0x30+gewei); //初使化中设定了写一个字符后,地址指针加1,因此这里}//不用重新光标写位/**************************显示周子函数*****************************************/voidwrite_zhou(uchartime1)//用于在1602上显示周信息,与显示{//时间日期子函数类似 uchargewei; gewei=time1%16;//一周七天,因此只需个位 write_com(0x80+13); write_data(0x30+gewei);}/***************************写数据字节子函数************************************/voidInput_1byte(ucharTD)//写一字节数据{uchari;ACC=TD;for(i=8;i>0;i--){sda=ACC0;sck=1;sck=0;ACC=ACC>>1;}}/*************************读数据字节子函数**************************************/ucharOutput_1byte(void)//读一字节数据{uchari;for(i=8;i>0;i--){ACC=ACC>>1;ACC7=sda;sck=1;sck=0;}return(ACC);}/***************************写DS1302数据函数***********************************/voidwrite_1302(ucharDS_ADD,ucharDS_DAT)//写操作{ rst=0; sck=0; rst=1; Input_1byte(DS_ADD); Input_1byte(DS_DAT); sck=1; rst=0;}/***************************读DS1302数据函数***********************************/ucharread_1302(ucharDS_ADD)//读操作{ ucharDS_INF; rst=0; sck=0; rst=1; Input_1byte(DS_ADD); DS_INF=Output_1byte(); sck=1; rst=0; return(DS_INF);}/*************************初始化DS1302子函数***********************************/voidinital_1302(){write_1302(0x8e,0x00);//禁止写保护write_1302(0x90,0xaa);//定义充电 write_1302(0x80,0x53);//秒write_1302(0x84,0x13);//时 write_1302(0x82,0x43);//分 write_1302(0x8c,0x12);//年 write_1302(0x88,0x06);//月 write_1302(0x86,0x03);//日 write_1302(0x8a,0x06);//星期write_1302(0xc0,0x08);//闹钟小时初始化 write_1302(0xfc,0x00);//闹钟分钟初始化 write_1302(0x8e,0x80);//开保护}/********************************************************************************扫描函数********************************************************************************/voidkeyscan(){ if(s1==0&&s4num==0) //按键1按下且s4再次之前未曾按过 { delay(5); if(s1==0&&s4num==0) {flag1=1; s1num++; while(!s1);didi(); if(s1num==1) { write_com(0x80+0x40+8);//光标移动到**位置 write_com(0x0f);//显示光标 } if(s1num==2) { write_1302(0x8e,0x00);//禁止写保护 write_1302(0x80,miao);//写入秒信息 write_1302(0x8e,0x80);//开写保护 write_com(0x80+0x40+5); } if(s1num==3) { write_1302(0x8e,0x00); write_1302(0x82,fen); write_1302(0x8e,0x80); write_com(0x80+0x40+2); } if(s1num==4) { write_1302(0x8e,0x00); write_1302(0x88,yue); write_1302(0x8e,0x80); write_com(0x80+13); } if(s1num==5) { write_1302(0x8e,0x00); write_1302(0x84,shi); write_1302(0x8e,0x80); write_com(0x80+10); } if(s1num==6) { write_1302(0x8e,0x00); write_1302(0x86,ri); write_1302(0x8e,0x80); write_com(0x80+7); } if(s1num==7) { write_1302(0x8e,0x00); write_1302(0x8c,nian); write_1302(0x8e,0x80); write_com(0x80+4); }if(s1num==8) { flag1=0; s1num=0; write_1302(0x8e,0x00); write_1302(0x8a,zhou); write_1302(0x8e,0x80); write_com(0x0c);//不显示光标 } } } /*******************************************************************************/ if(s1num!=0&&s4num==0)//按键1按下*次且s4再次之前未曾按过 { if(s2==0) { delay(5); if(s2==0) { while(!s2);didi(); if(s1num==1) { intx1,x2; x1=miao%16; x2=miao/16; x1++; if(x1==10) { x1=0; x2++; if(x2>=6) x2=0; } miao=x1+x2*16; write_sfm(7+0x40,miao);//将修改的数送到1602显示 write_com(0x80+0x40+8);//挪回光标 } if(s1num==2) { intx3,x4; x3=fen%16; x4=fen/16; x3++; if(x3==10) { x3=0; x4++; if(x4>=6) x4=0; } fen=x3+x4*16; write_sfm(4+0x40,fen); write_com(0x80+0x40+5); } if(s1num==3) { intx5,x6; x5=shi%16; x6=shi/16; x5++; if(x6>=2&&x5>=4) { x5=0; x6=0; } if(x5==10) { x5=0; x6++; } shi=x5+x6*16; write_sfm(1+0x40,shi); write_com(0x80+0x40+2); } if(s1num==4) { zhou++; if(zhou==8) zhou=1; write_zhou(zhou); write_com(0x80+13); } if(s1num==5) { intx5,x6; x5=ri%16; x6=ri/16; x5++; if(x6>=3&&x5>=1) { x5=1; x6=0; } if(x5==10) { x5=0; x6++; } ri=x5+x6*16; write_sfm(9,ri); write_com(0x80+10); } if(s1num==6) { intx5,x6; x5=yue%16; x6=yue/16; x5++; if(x6>=1&&x5>=3) { x5=1; x6=0; } if(x5==10) { x5=0; x6++; } yue=x5+x6*16; write_sfm(6,yue); write_com(0x80+7); } if(s1num==7) { intx5,x6; x5=nian%16; x6=nian/16; x5++; if(x6>=2&&x5>=1) { x5=1; x6=0; } if(x5==10) { x5=0; x6++; } nian=x5+x6*16; write_sfm(3,nian); write_com(0x80+4); } } } }/*******************************************************************************/ if(s1num!=0||s4num!=0)//在调整模式下 { if(s3==0)//如果确定键按下 { delay(5); if(s3==0)//延时并重新检测S3是否按下,用于差小误差 { if(s1num!=0) { while(!s3);didi();//在松手时将调整后的时间、日期及周信息写入DS1302,退出调整模式并隐藏光标,按键次数清0 write_1302(0x8e,0x00); write_1302(0x80,miao); write_1302(0x84,shi); write_1302(0x82,fen); write_1302(0x8a,zhou); write_1302(0x8c,nian);//年 write_1302(0x88,yue);//月 write_1302(0x86,ri); write_1302(0x8e,0x80); flag1=0; write_com(0x0c); s1num=0;} if(s4num!=0) { while(!s3);didi();//在松手时将调整后的时间、日期及周信息写入DS1302,退出调整模式并隐藏光标,按键次数清0write_1302(0x8e,0x00); write_1302(0xc0,lshi);write_1302(0xfc,lfen); write_1302(0x8e,0x80); flag2=0; s4num=0; write_com(0x0c);} } } }if(s4==0&&s1num==0)//按键4按下*次且s1再次之前未曾按过{delay(5); if(s4==0&&s1num==0) { s4num++; flag2=1;while(!s4);didi(); if(s4num==1) { write_com(0x80+0x40+14); write_com(0x0f); } if(s4num==2) { write_1302(0x8e,0x00);//禁止写保护 write_1302(0xfc,lfen);//闹钟初始化 write_1302(0x8e,0x80);//开写保护 write_com(0x80+0x40+11);

温馨提示

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

评论

0/150

提交评论