基于STC89C52单片机的智能路灯控制系统设
计与实现
Design and Implementation of Intelligent Street Lamp Control System Based on STC89C52 Microcontroller
摘 要
传统路灯有很多缺点,例如严重的电力和能源浪费,简化的管理方法,信息管理水平低,对于常见故障缺乏积极的警报系统以及无法检测故障位置指示灯。透明和奢侈浪费社会资源。近年来,中国许多大城市才刚刚开始选择智能路灯技术,并对传统路灯进行改造和改造。选择基于3G和物联网的公共管理系统,结合LED等高科技技术,并科学研究智能路灯,以不断创新许多路灯的缺点。普通路灯智能照明系统改造后,可以大大降低路灯的能耗,可以合理提高环保和节能率。
针对于此,本文基于51单片机+光敏传感器+声音传感器,实现路灯的自动开关的实时控制。与此同时,并通过照明检测进行故障位置的测试发,来确定路灯故障和定位。经过电路设计和软件编程之后,首先在仿真软件上进行功能仿真,当优化改进至错误时,在万用板上进行实物模型的制作和功能测试,完成原设定功能和目标的测试。经过试验发现该系统具有良好的发展前景和应用市场。
关键词:智能路灯,感光控制,声音控制
I
)
ABSTRACT
Traditional street lamps have many disadvantages, such as serious waste of energy, single management means, low level of information, lack of active fault alarm mechanism, and the location of fault lamps is difficult to find, such as the streets are empty but bright, which wastes social resources greatly. In recent years, many cities in China have begun to use intelligent street lamp technology to transform the traditional street lamp. Using the public management platform based on 4G and Internet of things technology, combined with LED and other high-tech, the intelligent street lamp is developed to change the disadvantages of traditional street lamp. After the intelligent lighting transformation of ordinary street lamps, the power consumption of street lamps can be greatly reduced and the energy saving rate can be effectively improved.
In view of this, based on 51 single chip microcomputer + photosensitive sensor + sound sensor, this paper realizes the real-time control of the automatic switch of street lamp. At the same time, through the lighting detection to test the fault location, to determine the fault and location of street lights. After circuit design and software programming, functional simulation is carried out on the simulation software first. When the optimization is improved to error, the production and functional test of the physical model are carried out on the universal board to complete the test of the original set function and target. It is found that the system has a good development prospect and application market.
Key words: intelligent street lamp, sensitive control, sound control
II
)
目 录
摘 要 .................................................................................................. I ABSTRACT ...................................................................................................... II 目 录 ................................................................................................................ III 第1章 绪论 ..................................................................................................... 1
1.1研究背景 .............................................................................................. 1 1.2研究意义 ............................................................................... 1 1.3国内外研究现状 ................................................................... 2
1.3.1技术发展与应用现状 .................................................. 2 1.3.2发展前景和趋势 .......................................................... 2 1.3.3文献综述 ...................................................................... 2 1.4研究方向和内容 ................................................................................ 5 第2章 系统整体设计方案 ......................................................................... 6
2.1设计要求 .............................................................................................. 6
2.1.1基本要求 ...................................................................... 6 2.1.2详细说明 ...................................................................... 6 2.2设计思路 ............................................................................... 7 2.3系统搭建方案 ....................................................................... 7 第3章 系统硬件电路设计 ......................................................................... 9
3.1 单片机最小系统电路设计 .................................................. 9 3.2 时钟电路设计 ...................................................................... 9 3.3 复位电路设计 .................................................................... 10 3.4 电源电路设计 .................................................................... 10 3.5 DS1302时钟电路设计 ....................................................... 11 3.6 显示电路设计 .................................................................... 12 3.7 光控和声控电路设计 ........................................................ 12 3.8 故障检测电路设计 ............................................................ 13
III
)
3.10 故障报警电路设计 .......................................................... 13 3.11 按键电路设计 ................................................................... 14 第4章 系统软件设计 ................................................................................ 15
4.1 软件设计思路 ................................................................................. 15 4.2 主程序设计 ........................................................................ 15 4.3 子程序设计 ........................................................................ 15
4.3.1按键输入程序设计 .................................................... 15 4.3.2信号采集程序设计 .................................................... 16 4.3.3中断服务程序设计 .................................................... 16 4.3.4时钟程序设计 ............................................................ 17
第5章 系统仿真和实物测试 .................................................................. 19
5.1系统仿真调试与结果分析 ................................................. 19 5.2系统实物测试与结果分析 ................................................. 21 第6章 总结 ..................................................................................................... 25 致 谢 ................................................................................... 错误!未定义书签。 参考文献 ............................................................................................................ 26 附 录 ................................................................................................................. 27
系统程序 .................................................................................... 27 PCB图 ....................................................................................... 54 系统电路总图 ............................................................................ 55
IV
)
第1章 绪论
1.1研究背景
随着中国大城市的发展趋势,经济发展的繁荣,社会发展的进步以及为群众门生活必要的改善衣物,食品,住房,交通和生态环境,市政道路照明设备和夜景照明的水平的规定在大城市中早已转变为具体的规划和基本建设和管理工作中一项重点工作的方法。市政道路照明设备是便利城市居民必需的设备,而大城市的夜间城市照明对于清洁和重塑城市文化,鼓舞人心和优化精神面貌都是十分重要的一部分。随着城市的发展,目前路灯和夜灯已经逐渐引起了大大小小各个城市的领导班子们的关注。城市的照明系统在很大程度上能够反映出城市的文化和面貌,因此它们深受政府部门的关注,许多城市已经投注了大量的成本,进行城市照明工程的修建和更新。这使人们在大城市的夜晚变得越来越明亮多姿。它也接连不断地出现,能源消耗逐渐飙升,所引起的一些问题也逐渐显现出来。例如,大城市的路灯维修范围扩大,导致人力不足;维修费增加,社会发展成本过高,水电费太多,经济负担相对困难;环境污染形势更加严峻。这些问题带来的负面效应急剧增多,且难以解决,给相关部门带来了巨大的压力。特别是在当今自然环境标准急剧下降的情况下,低碳环保,环保节能,环保越来越受到大家的关注。传统的自动控制系统缺点明显,不仅消耗功率大,还不能充分使用公共资源网络,使得传统的自动控制系统效率十分的低。近年来,随着科技的发展,电子科技和单片机的普及应用,使得传统得自动控制系统逐渐被取代。新型城市的路灯使用由单片机作为核心的智能控制系统,一改传统自动控制系统的低下效率,以更加智能化更加低的成本,为城市的照明工程带来了改头换面的效果。所以,推广以单片机作为核心的智能路灯,不仅仅可以提高能源的利用率降低成本,还是对城市形象的一次大升级。
发达国家在上世纪九十年代初就已经启动智能照明控制系统的推广工作,通过它大大的降低了路灯的成本消耗。而我国相关部门也于本世纪初出台了一系列关于照明控制系统的政策,力争提高效率,节能减排,使城市照明工程绿色化。新型的智能路灯优点众多,其具备节能高效,稳定性以及自动化。每个城市都可以根据实际的情况,为路灯设定相关的参数,例如光照程度或是开关时间。智能的照明控制系统使得城市的照明系统真正实现了自动化智能化,实现了高效与稳定的结合,省去了大量的人力和物理。不仅如此,在如今人人提倡环保的时代,智能照明系统减少了能源消耗,意味着发电源头污染的减少,减少排放,优化大气,适应了绿色生活的发展趋势。
1
)
1.2研究意义
智能路灯系统的优势是多个层面上的,它为社会带来了巨大的环保收益和经济收益:第一:智能路灯系统相比传统路灯系统更加的节能,一个城市每天每个路灯省下的电的总和都是一个巨大的数字,节约的电不仅减少了成本,还减少了能源消耗。第二:智能路灯系统有智能的维护和警报功能,其寿命比传统路灯系统长的多,且有故障会自动警报,不仅减少了更换部件的成本,还降低了人们排查故障所需的时间。第三:部分智能路灯系统采取新能源的利用例如太阳能,减少用电的同时,实际上减少了煤炭的发电消耗,是绿色城市的不二之选。总的来说,智能路灯系统不仅是高新技术的体现,更是符合国家可持续政策的先行者。如果智能路灯系统在未来能做到真正的普及,那么其带来的环保效益和经济收益,将远远超过人们的想象,
1.3国内外研究现状
1.3.1技术发展与应用现状
对于目前的路灯控制系统,多是采用定时方式进行开启,需要进行合理的时间设定,无法根据周围环境的情况,进行合理的自动调整。在国外该领域的研究处于世界前流,早于国内多年,已取得诸多丰富成果。在国内该领域发展较晚但是国内的诸多专家和学者的研究,在该领域也取得一些不菲的成果。其中不乏采用PLC集成控制技术、电脑网络控制技术和微电子控制技术等。
1.3.2发展前景和趋势
老式的路灯系统缺点明显,其毫无智能化可言,稳定性低,使用效率也低,不仅如此。由于缺乏自动报修的功能,常有路灯损坏却无人管理的情况出现。其亮度和时间的模式化,也导致了路灯透亮的照在空荡的街上的情况经常发生,这是对资源的巨大浪费。从上个世纪末开始,智能路灯系统在国外发达国家首先推广,最近几年,我国许多城市也开始慢慢普及了智能路灯系统。智能路灯系统,是由先进的互联网技术联合4G和5G信号打造了信息处理平台,在此基础上,利用LED等高新的材质,进行路灯的建造。智能路灯系统的出现,有效缓解了传统路灯的缺陷,降低了传统路灯带来的不必要资源浪费,还降低了使用功率提高了能源利用率,更加的环保高效。中国科学院软件应用技术研究所对智能路灯系统进行了大量详细的研究,其中南沙市益惠路改造工程以18个路灯作为研究对象。首先,他们利用更环保,效率更高的LED材料,作为路灯的主要原料,其次他们引入了路灯对路面情况的自动监测,智能的控制亮度与时间。实验为期一年,经过一年的数据记录,路灯节能率可以达到78.73%,一年节约的成本更是高达六千元。相当于年均节约9.93吨标准煤,年均二氧化碳排放量减少了24.75吨。
2
)
综上所述,针对上述技术进行总结,设计一个基于单片机可以实现根据光照信号和声音信号的智能路灯控制系统设计。
1.3.3文献综述
阳明[1]以单片机作为核心制作了光伏路灯系统。其主要组成部分为;1.LED材质的路灯2.太阳能版3.系统控制中心4.电源部分。系统的控制中心使用了最新的科技高级单芯片微处理器。主控芯片可以保证对路灯的有效智能控制。它具有许多优势,例如特别好的稳定性和很高的智能水平。
王才峰等[2]提出了一种以ATmega128微控制器为主要控制器的太阳能LED路灯智能照明系统。这个系统的优势在于1.电池寿命长,有自动的电池监控防止电池过度使用2.LED实现了开关的自动化3.性能稳定,绿色环保,节能高效。系统的工作原理的1.使用单片机和模数转换器作为数据的收集装置,通过对电池使用数据的分析和监控,实现对电池的保护。2.利用光敏电阻作为接收装置,将所检测的环境亮度作为信息传递,控制了LED灯的开关。该系统使用了清洁的太阳能,实现了路灯远程操控,是路灯又前进一步的标志。
王萌等[3] 使用C51单片机作为核心设计了新型路灯控制系统。其组要组成部分有1. C51微控制器平台2.红外传感器3光敏传感器4.控制面板5.灯板。其主要功能为1.通过RS485的控制实现智能路灯控制的自动化,无需人工。2.能够准确定时,控制路灯的开启时间。3能够进行远程的控制。其工作原理为:1.利用红外传感器和光传感器检测路面情况,作为信息反馈控制中心,进行路灯的亮度调整。2.利用DS1302的时钟芯片进行时间的测算。3.使用OLED屏幕,是人们对路灯有实时监控的功能,完成对路灯的远程遥控。
吴元等[4] 发明了新型的节能装置,应用于路灯。其主要组成部分为1.单片机控制中心2. LED驱动器3. 热电光模块。其主要功能为:1.使用太阳能作为能量来源,节约了电能2.自动检测是白天还是黑夜,从而进行开关的控制。3.自动检测是否有人经过路面。其工作原理是:1.利用太阳能板,在晴天进行电能的储存,如遇上阴天则会消耗储存的电能。2.利用光感系统判断光线,以自动打开路灯。3.热电模块能够传递路面是否有人的信息。4.LED驱动器负责照明。该系统使得路灯更加环保绿色。
张伟等[5]将STC89C51单片机作为核心控制芯片,设计了一种智能路灯系统。其主要组成部分为1.单片机控制系统2.LED灯3.自动警报系统4.光敏电阻。其主要功能有:1.当路灯出现故障时,系统自动向负责人发出警报。2.根据环境光的强度,自动控制路灯的照明强度。其工作原理为1.利用控制系统检测路灯,当路灯有故障,系统将其转化为信号,通过声光报警系统,对负责人进行警报,并发送位置。2.利用光敏电阻检测环境光强,并将其转化为信号发送至单片机,通
3
)
过单片机的信息分析,控制路灯的暗亮程度。该系统经过了一系列测试,并且有良好表现,达到了智能化管理和节能的目的。
陈锡祥等[6]利用MSP430F149单片机作为核心,设计出了一种智能路灯系统。该系统的功能有:1.根据周围环境自动控制路灯2.实时警报路灯的故障3.自动调节路灯的亮度4.以OLED显示屏实现人机交互的功能。该系统经过一系列测试,有着稳定的表现,其使用便捷,绿色环保。
牛晨宇等[7] 以节能减排为主要设计理念,设计了一款智能路灯系统。随着时代的发展科技的进步,人们对于能源的需求越来越大,但地球的本身的物质能源是不变的。此时就需要引入新的能源来缓解全球能源危机的压力。此外还需要进行节能减排的工作,让设备尽量的绿色化,能源利用率更高。目前,不同的国家中,能源情况不同,发展中国家的局势尤为严峻。其市场对于产品的高效性也更加的需要。基于这些环境,本系统应运而生。
李琼等[8] 以AVR单片机作为核心,发明了路灯的远程监控系统。其主要组成部分为1.路灯控制终端2.上位机软件。其主要优势是:1.支持路灯的远程控制2.比其他的智能路灯抗干扰性强3.建造周期短,布线难度低。其工作原理是:1.由单片机控制系统,根据传感器的数据,进行开关控制。2.采用独立的光传感器,取得的环境信息更加准确。3.主机软件开发环境为Visual C ++ 6.0编程环境,功能更加强大。
王晓红[9]设计了一种以太阳能和风能为主要能源的智能路灯系统,该系统的设计理念是绿色环保,能源利用最大化。该系统被广泛运用于风大的海边,多阳光少雨的地区。该系统是以STC89C51单片机作为核心的控制系统。以稳压和升压电路储存电能。以光传感器作为开关的控制。经过一系列测试,系统稳定性强,达到了利用绿色能源的目标。
吴振宇等[10]设计的智能路灯系统。其主要组成部分为1.光敏电阻传感器2.时间计时器3.控制中心4.显示模块。其主要功能为:在晚上有人路过检测路段时自动打开,没有人路过时自动关闭。其工作原理是,利用红外传感器检测是否有人经过路段,当检测到有人时,控制中心将路灯打开,当人走过去后,时间模块会延时将路灯在规定时间关闭。这个系统做到了能源的节约,还延长路灯使用寿命。
徐洪亮[11]设计了一款智能路灯系统。其主要功能为:1..有电池监控系统,保护了电池的使用,延长其寿命。2.有光敏电阻传感器,传递环境信息,控制路灯的开关。该系统具有绿色环保,高效节能的优点,其智能化也顺应了时代,具有良好的市场潜力。
为了应对日益严重的能源危机和生态文明建设,王启明等[12]设计了一种基
4
)
于单片机控制的太阳能路灯控制系统。该系统依靠阳光作为主要能源。白天,系统实现电池板的光电转换以将能量存储在电池中。电池负责在夜间为负载供电。该系统具有环保,节能,安全的特点。
1.4研究方向和内容
综上所述:智能路灯,也称为智能路灯和智能照明,应用电子技术和计算机技术。该技术可以全面升级城市公共照明管理系统,实现路灯的集中管理和控制,运维信息和智能照明。本课题的研究的意义在于用智能的LED节能路灯取代传统路灯,由于传统路灯存在各种缺点和不足,造成管理难,维修慢等各种问题。本系统将设计节能,操作简易,稳定性强的智能路灯系统,,本课题奖结合智能路灯的实际应用来研究论证智能灯的优势,来促进智能路灯的使用规模,促进智能路灯的推广使用。
了解智能路灯控制系统的组成,分析系统其功能原理的实现:通过收集、查阅、整理相关资料,熟悉并研究智能路灯系统的组成结构,熟悉传感器的类型及其应用。设计合适的硬件并编写相应的软件来确定系统的硬件和软件设计架构,合理选择设备,分别实现相应的模块的电路和程序控制。对系统进行测试,以提高系统的抗干扰能力和环境监测的敏感性。
5
)
第2章 系统整体设计方案
2.1设计要求
2.1.1基本要求
基于STC89C52单片机的智能路灯控制系统,主要完成如下:完成系统电路的焊制与接口连接;使装置能够检测光亮度,声音等。当光度小于限定值时开始亮灯,光度高于上限值时关灯。当声音大于限定值时,开始亮灯,否则不亮;故障检测反馈机制,及时报错;提高软件系统运行的稳定性,高效性,避免软件出现BUG;提高智能路灯系统的实用性和耐用性。
2.1.2详细说明
根据基本要求,本次项目设计了一款以单片机为核心的智能路灯控制系统。本智能路灯控制系统的功能为:1.通过传感器的探测系统,将经过的人进行定位,确定其位置后,根据其后续移动,进行路灯的自动开关,例如经过第三个路灯时,第一个路灯就会自动关闭,第五个路灯就会自动打开,保证路灯照明利用率最大化。2.具有时钟模块,掌控开关的时间。3.具有分支控制器,其作用是根据环境自动控制路灯的开关,以及单独对某一个路灯进行控制。该设计,也是针对了传统路灯只能批次开关的弊端。4.对每个路灯都有监视系统,当某个路灯遭遇故障,开关受阻,控制器会立马向相关人员发出警报,并显示故障路灯的地址号。如图2-1所示,是系统控制总线图。如图2-2所示,是系统布置示意图。
LED灯1输入、显示装置LED灯2单元控制器1单元控制器2支路控制器
图2-1 系统控制总线
LED灯240定位点404020MLED灯1S’4040ACBS图2-2 系统布置示意图
6
)
为了满足智能路灯系统功能的更加多元化,除了常见的升级以外,本次设计还增加了自制单元控制器中的LED灯恒流驱动电源。其具备自动调节光的强度的功能。路灯的原料使用一瓦的LED灯。LED灯恒流驱动电源的输出功率并不是恒定的,根据人为设定,其数值会随着时间逐渐减小。根据实验显示,其误差很小大约在百分之二,而调节范围很大大约是从百分之二十到百分之一百。电源输出端设立专门模块进行监测,例如电流电压的参数。
2.2设计思路
如图2-3所示,为基单片机智能路灯控制系统组成框图。该系统组成结构,包括:声音传感器、单片机控制器、光敏传感器、定时器和显示屏等。
该系统工作过程如下:该系统通过三种参数进行相互组合控制,其中主要是进行时间设定的时间内开启,在开启的时间段,根据环境的光照强度调节灯光的亮度和开启以及关闭,同时设定了光敏阈值,在阈值低于某一数值时,在其它条件不满足时路灯开启,控制系统执行中断操作,控制系统应急开启。
光敏检测模块 51单LED开启亮度实时控制 故声音检测模块显示控制 定时检测模块* 片机 故障定位 故障测试 按键模块 下位机检测 障检测 图2-3 路灯系统架构
2.3系统搭建方案
第一种方案:利用串行总线实现单片机和分支控制器以及单元控制器之间的信息传递。并且采用矩阵键盘输入的方式。通过时间,功率等的设定,将路灯参数和设置通过LED显示。利用光敏电阻传感器,感测周围环境的光强,并由超声波传感器监测路面是否由人经过,从而控制路灯进行开关调节。另外如有路灯故障,则由监测系统排查,由警报系统通知相关人员。
第二种方案:系统基于STC89C52单片机,并由分支控制器控制着两个单元电路。通过独立按键对当前所需功能进行操作。实时监控路灯的情况,包括其设
7
)
置时间,功率调节等等。利用光传感器,感测所处环境的光度,实现灯光亮度自动调节,并由红外线传感器监测路面是否由人经过,从而控制路灯进行开关调节。当有人经过设置的位置后,传感器将信息传递给控制器,再由控制中心下达指令,使路灯开启工作状态。
经过比较,第一种的优势在于节省I/O的数量,但电路会更加的复杂,而且矩阵键盘成本过高。而第二种方案,其组成简单成本低,性能也更加的稳定,因此经过比对,最终选择了第二种方案。如图2-4所示,是该方案的系统结构图。
环境明暗检测模块交通情况光电检测LED1电压、电流显示电压、电流显示LED2电源模块单元控制驱动模块1恒流控制稳压控制单元控制驱动模块2主控单元按键输入LCD显示图2-4 选择方案的系统结构示意图
8
)
第3章 系统硬件电路设计
3.1 单片机最小系统电路设计
如图3-1所示,是基于STC89C52单片机的最小系统电路,一个单片机如果要进行正常工作,其要具备最基本的工作电路:电源、晶振电路、复位电路等三部分。在这三部分的基础上添加合适的元件和电路设计并配合软件程序,实现有针对性的系统功能开发。
图3-1 基于STC89C52单片机系统最小电路
3.2 时钟电路设计
时钟电路的主要功能是为单片机提供准确时间,只要有关于时间的功能都需要用到时钟电路,例如智能垃圾桶盖子的延时关闭就需要设定时间通过时钟电路提供的时间进行关闭。时钟电路由晶震控制芯片,电容,晶体振荡器组成。本次电路的反向放大器使用了XTAL1的输入以及XTAL2的输出,同时它配置了内振片。时钟电路的计时方法是机器周期,一个机器周期等于六个状态周期等于十二个震荡周期。当外界的振荡器以12兆赫兹的频率振荡,时钟电路的的机器周期会是它的十二倍也就是1us。
9
)
图3-2 时钟电路
3.3 复位电路设计
在每次启动时,单片机必须要进行复位,其作用是使得包括CPU在内的各个系统模块恢复初始的工作状态。单片机进行复位一般有两种操作方式:手动按下复位按钮和上电复位。复位的原理是,当信号发出,其便从RST引脚输入到施密特触发器,直到振荡器稳定下来,当RST引脚上维持两个机器周期的高电平,这时CPU就可以接受复位的信号,让系统进行恢复初始工作状态。经过考虑,上电复位更适合这次的智能垃圾桶。复位电路的电路图,如图3-3。在系统工作时,当拔下电源,插上电源重启时,系统自动进行复位。
图3-3 复位电路
3.4 电源电路设计
如图3-4所示,是系统电源电路,该电路采用了两个电容进行电源信号滤波,为系统提供稳定的电压源,本电路还设计了一个LED灯,实现了电源是否正常工作的指示。
10
)
图3-4 电源电路
3.5 DS1302时钟电路设计
如图3-5所示,是DS1302时钟电路。系统作业时,该模块是实现精准的24小时制时间计时和定时时间设置的对比,主要功能是提供路灯开启和关闭时间的设定和全天候的计时。其中芯片的RST、SCK和IO引脚与单片机的P3.7、P3.6和P3.5进行连接。
图3-5 DS1302时钟电路
11
)
3.6 显示电路设计
如图3-6所示,是基于LCD1602的时钟电路。该电路主要是完成单片机与显示屏接口的通信,进行显示数据的通信传输。由图可知:显示模块的RS、RW和E引脚和单片劫P1.0、P1.1和P1.2进行连接,其中DB0-DB7与单片机的中间连接一个上拉电阻与P0.1-P0.7进行连接。
图3-6 LCD显示电路
3.7 光控和声控电路设计
如图3-7所示,是光控和声控电路设计。其中Voice和Light端和单片机的P3.2和P2.2进行连接,实现采样信号的输出传输。采用光敏电阻检测环境明暗变化,当光敏电阻感应到光线变化时,将信号传给控制单元进行处理,再由控制单元控制路灯的亮灭。利用声音信号传感器时间环境周围的声音检测,当声音超过设定阈值,灯光开启,低于阈值,灯光关闭。其中路灯1和2分别通过P2.7和P2.6进行控制。
12
)
图3-7 光控和声控电路
3.8 故障检测电路设计
如图3-8所示,是灯光是否正常开启的故障检测电路。其中采用传感器是光敏传感器,在触发照明后,检测照明亮度和状态是否达到正常,如果未达到正常,则进行故障报警与定位。其中其采用的也是LM393芯片,其信号输出引脚与单片机的P2.3脚连接。
图3-8 故障检测电路
3.10 故障报警电路设计
报警电路主要是实现检测到是否有火灾灾情发生,第一时间控制蜂鸣器鸣叫,给用户预警提示。本设计采用的是有源蜂鸣器,使用单片机的直流信号可以直接驱动。如图3-9所示,是报警电路,该电路由一个有源蜂鸣器、一个三极管和1K按照信号出发原则设计连接到单片机的P2.0口。
13
)
图3-9 故障报警电路
3.11 按键电路设计
按键电路实现参数的设置、选择功能和确认功能。如图3-10所示,是按键电路图。针对上文所述,使用独立按键比较合理,因此该电路采用独立按键模式进行设计。其中S2-S5分别与单片机的P1.3-P1.6连接,直接进行控制。
图3-10 独立按键电路
14
)
第4章 系统软件设计
4.1 软件设计思路
整个系统的功能由硬件电路和软件共同实现。在硬件电路被粗略地形成之后,基本上确定了软件的相应子例程模块。从软件的不同功能来看,它可以分为两类:一类是主程序监视软件,它是整个控制系统的主要部分,专门用于安排执行模块的分布和接触运营商。第二个是执行软件(子例程),该软件用于完成各种系统所需的功能,例如:测量,计算,显示,通讯等。单个软件子例程也可以理解为单个部分函数执行模块。
4.2 主程序设计
如图4-1所示,是该系统主程序设计思路流程。从图中可以看出:工作模式检测分为时钟控制、交通控制、光照检测和自动调光模式4种进行不同方式的工作;系统另一个关键是参数设定,主要是实现时间的设定等操作。
图4-1 主程序设计流程
4.3 子程序设计
系统的子程序设计主要是针对具体的操作功能进行模块化编程,下面将详细介绍按键输入程序、信号采集处理程序、防盗报警程序和中断服务程序的设计熟路。
4.3.1按键输入程序设计
如图4-2所示,是按键输入程序设计流程。该程序主要是对按键接口触发功能进行设计。
15
)
图4-2 按键输入程序设计流程图
4.3.2信号采集程序设计
如图4-3所示,是信号采集程序设计流程。该部分程序主要是进行光敏信号采集和声音信号采集,判断是否达到设定阈值。
开始 检测程序执行 传感器检测声音+光照 信号转换 传递至IO口 解析计算数值,执行控制 结束 图4-3 信号采集程序设计流程图
4.3.3中断服务程序设计
如图4-4所示,是中断服务程序设计流程。该部分程序实现当CPU检测到外部烟雾传感器送来的脉冲信号后,定义为有火灾灾情周围告警区域,从而经过
16
)
CPU烧写的程序处理后,使得报警电路开始告警直至无报警信号出发,同时可以用手工按键报警的作用。
串口初始化开启总中断开启串口中断启动定时器设置串口工作方式定时器设置初值图4-4 中断服务程序设计流程图
4.3.4时钟程序设计
如图4-5所示,是系统时钟程序设计流程,该部分程序是实现基于DS1302的计时和时钟设定等。主要就是初始化时钟芯片引脚电平,最后是单片机定时器的初始化,主要是实现秒表计时的功能。然后就进入循环处理的过程,包括先读取时钟芯片的日期时间数据,然后在1602液晶上面显示出来,接着判断读取到的时间是否需要启动灯光开启或者关闭。
17
)
图4-5 时钟程序设计流程图
18
)
第5章 系统仿真和实物测试
5.1系统仿真调试与结果分析
仿真调试是在Protues软件中建立仿真电路,将控制程序导入进行功能仿真的模拟和验证,根据结果进行调试优化。
如图5-1所示,是系统的仿真电路。如图5-2所示,实现的时间设定仿真。有测试可知,可以通过原先设计的按键功能进行时间参数的设置和确定。如图5-3所示,是系统路灯时间控制仿真。在达到定时时间后,路灯被开启。如图5-4所示,是系统故障检测功能仿真。如图5-5所示,是系统光控仿真。如图5-6所示,是系统的声控仿真。
图5-1 系统仿真电路
图5-2 时间设置仿真电路
19
)
图5-3 系统路灯故障控制仿真
图5-4 系统路灯光控仿真
图5-5 系统路灯光控仿真
20
)
图5-6 系统路灯声控仿真
5.2系统实物测试与结果分析
将实物按设计原理图在万用板上,焊接好,并通过万用电表检测无短路和接触不良或接口焊接错误,如有错误及时进行改正。校验完毕后,烧写程序进行调试。独立按钮用于调整和设置系统时间以及开关灯,并通过LCD屏幕实时显示。测试过程如下:(1)将系统的当前时间设置为01:10,秒表测试完成后,LCD屏幕在120秒后显示01:12的当前时间。 (2)系统的当前时间是00:05,已设置LED1灯在00:06点亮,在00:07熄灭。秒表测试后,LED1指示灯在60秒后点亮,然后在60秒后熄灭。 LCD显示正确;分支机构控制器可以独立控制每个路灯的照明。打开和关闭时间。在定时功能稳定的前提下,把光传感器与主控制器连接并暴露在通明的自然环境中,LED灯自动关闭,将光传感器用东西覆盖住时,周围的光变暗,当卸下护盖时,LED点亮并熄灭。用黑布盖住光传感器时,灯会由控制中心控制后再次打开,当黑布拿走,灯又会中再次关闭。在电路等模块都正常工作时,系统监测到路灯在接受指令时,无法进行正确工作时,监测系统认定其为故障,
通过光敏电阻接收的光来判断故障检测。发生故障时,将发出声音和视觉警报,并且LCD会显示故障位置。在此测试中,当所有外部条件均正常时,两个灯同时发光。当任何光敏电阻的光被物体挡住时,即当路灯发生故障时,该电路可以正常发出声音和光警报,并且是正常的。显示故障的位置。该故障检测系统正常。
21
)
如图5-7所示,是搭建的实物系统图。如图5-8、5-9、5-10和5-11所示,分别是系统时间设定、光控、声控和故障检测功能测试。根据以下试验结果可知,系统基本完成了如仿真验证的功能设计,并取得不错效果,控制效果良好,不存在延迟和误差。
图5-7 系统焊接实物图
图5-8 时间设定功能测试
22
)
图5-9光控功能测试
图5-10声控功能测试
23
)
图5-11故障检测功能测试
24
)
第6章 总结
本文将通过互联网和图书馆学习智能路灯系统的相关知识,并掌握相应的技术。通过系统的工作原理,设计出优良的系统结构。采取各种计划,找到适合街道照明系统的各种生产材料。使用学到的知识和选择的材料来设计实用的智能路灯系统,然后对其进行测试和改进。
第一章:主要从设计的研究背景及意义、国内外的技术应用现状和研究现状、发展前景和趋势、设计的主要研究内容和研究采用的方法进行阐述,主要分析了选题的依据和交待了设计的主要内容。第二章:主要进行系统的整体设计方案阐述,首先,介绍了设计思路,随后确定设计方案。最后针对确定的设计方案,进行控制芯片、传感器和短信模块等的选择论证。第三章:主要阐述系统的硬件电路设计,从单片机最小系统设计逐渐延伸到应用电路设计,其中包括:复位电路、时钟电路、显示电路和报警电路等。第四章:主要进行系统软件程序的设计阐述,首先说明了软件程序的设计思路,随后分别对主程序和子程序设计进行介绍,其中子程序主要进行按键输入程序、信号采集处理程序和中断服务程序等进行介绍。第五章:本章前3章的硬件选型和软硬开的基础上,进行实物制作。首先,进根据设计要求进行预计功能的测试;随后进行实物焊接和测试,根据测试结果可知,该系统完成了设计目标的功能要求,并且系统工作稳定无延迟。
此设计实现了该主题的所有基本要求;该设计中使用的控制器资源是有限的。如果您使用高级控制芯片,我们将实现更多控制功能并使系统更完整。考虑到工作的成本效益,设计的设计中仍然存在缺陷,应进一步加以改进以使其更合理,更美观。此外,此设计增加的功能的创新部分如下:单元控制器的驱动部分可用于恒压驱动和恒流驱动两种电源模式。易于选择且控制稳定。 51系列单片机和LCD屏幕用于实现主菜单和多级子菜单的选择,参数设置,操作和实时监控等功能,实现对路灯模拟控制的综合控制系统。增加输出电压和电流表头指示,使输出结果和测试更加直观和简单。该设计使用廉价的硬件,并且硬件功能通过软件实现。元件数量少,可靠性高,成本低,性价比高,功能满足设计要求。
25
)
参考文献
[1] 石文轩,宋薇.基于单片机MCS-51的智能密码锁设计[M].武汉工程职业技术学院学报,2004,(01).
[2] 祖龙起,刘仁杰.一种新型可编程密码锁[J].大连轻工业学院学报,2002,(01). [3] 叶启明.单片机制作的新型安全密码锁[J].家庭电子,2005,(10). [4] 李明喜.新型存储柜锁的设计[J].机电产品开发与创新,2004,(03). [5] 董继成.一种新型安全的单片机密码锁[J].电子技术,2004,(03). [6] 杨茂涛.一种存储柜锁的实现[J].福建电脑,2004,(08). [7] 瞿贵荣.实用存储柜锁[J].家庭电子,2000,(07). [8] ATmega.ATmega8L-8AC,2006,(01).
[9] Wireless World,1998,vol、84,No、1509,p69.
[10] 王千.实用电子电路大全[M],电子工业出版社,2001,p101. [11] 何立民.单片机应用技术选编[M],北京:北京航空大学出版社,1998. [12] 李华.MCS-51系列单片机使用接口技术[M],北京航空航天大学出版社,1993. [13] 彭为.单片机典型系统设计实例精讲[M],北京:电子工业出版社,2006. [14] 潘永雄.新编单片机原理与应用[M],西安:西安电子科技大学出版社,2003. [15] 童诗白,华成英,模拟电子技术基础[M],北京:高等教育出版社,2000. [16] 阎石主.数字电子技术基础[M],北京:高等教育出版社,1998. [27] 樊昌信,曹丽娜.通信原理[M],北京:国防工业出版社,2007. [28] 李瀚荪.电路分析基础[M],北京:高等教育出版社1991.
[19] 郭海英.基于单片机的电子安全密码锁的设计[M].现代电子技术,2005,(13). [20] 何希才,杜煜.实用电子电路设计[M].北京:电子工业出版社,1998. [21] 康华光.电子技术基础(第四版)[M].北京:高等教育出版社,1998. [22] 俞睆卿.智能家居终端的研究与设计[D ]上海交通大学2008.
[23] 林旭东.智能家居系统相关技术及发展趋势[J].创新科技导报.2008.6.5-6. [24] 李方.浅谈几种智能家居系统网络技术[J].计算机与网络.2006年.5(2).98-101. [25] 陈文智.嵌入式系统开发原理与实践.清华大学出版社.2005. [26] 贾宗璞,许合利.C语言程序设计.中国矿业大学出版社,2007. [27] 谭浩强. C程序设计.清华大学出版社,2005.
[28] 余发山,王福忠.单片机原理及应用技术.中国矿业大学出版社,2008. [29] 沈星星,丛露微.基于ZigBee的智能家具控制系统,论文选粹,2011第3期 [30] 冯培昌,周晓云,陈孝伟.无线传感器网络探讨[J].电气自动化.2005年.27(5).73- 26
)
75.
[31] 周健明,江玲.ZigBee网络层关键技术研究与实现.黄石理工学院学报.2009.25.
附 录
系统程序
#include //头文件 //宏定义 //头文件 //宏定义 //时钟芯片 #define uchar unsigned char #define uint unsigned int uchar time_data[7]; 数据存储 uchar write_add[7]={0x8c,0x8a,0x88,0x86,0x84,0x82,0x80}; //时钟芯片数据的地址 uchar read_add[7]={0x8d,0x8b,0x89,0x87,0x85,0x83,0x81}; 芯片数据的地址 uchar code table1[]=\" 2000/00/00 \"; uchar code table2[]=\" 00:00:00 00\"; uchar code table3[]=\" \"; uchar code table4[]=\" Set Real Time \"; uchar code table5[]=\" Set Open Time \"; uchar code table6[]=\" Start Time: \"; uchar code table7[]=\" 00:00:00 \"; uchar code table8[]=\" End Time: \"; bit Adjust; 显示模式 bit Timer; 光线开启模式 bit flag; //延时10s标志位 //LCD1602端口 //LCD1602端口 27 //时钟 //清屏内容 //调节标志位,=1表示进入按键调节模式,=0是正常 //定时模式标志位,=1表示进入定时开启模式,=0是 sbit rs=P1^0; sbit rw=P1^1; ) sbit e=P1^2; sbit io=P3^6; //LCD1602端口 //时钟端口 //时钟端口 //时钟端口 //选择键端口 sbit sck=P3^5; sbit rst=P3^7; sbit SELT =P1^3; sbit ENTER=P1^4; //确认键端口 sbit UP =P1^5; //加键端口 sbit DOWN =P1^6; //减键端口 sbit LAMP1=P2^7; //路灯接口 sbit LAMP2=P2^6; //路灯接口 sbit BEEP =P2^0; //蜂鸣器接口 sbit LIGHT=P2^2; //光线检测端口 sbit CHECK=P2^3; //检查路灯故障光明电阻接口 uchar Select_num; //选择按键按下次数 uchar Enter_num; //确认按键按下次数 //时间设置值 //设置开始时间 //设置结束时间 //T0中断次数 //延时时间10s float Year,Month,Day,Hour,Minute,Second,Week; float Hour_H,Minute_H,Second_H; float Hour_L,Minute_L,Second_L; int Count; uchar Miao; /**************************************LCD1602**********/ void delay1(uint z) { } void write_com(uchar com) //写指令函数 28 void read_rtc(); //函数声明 显 示 ********************************************************************* //延时函数 uint x,y; for(x=z;x>0;x--) for(y=10;y>0;y--); { rw=0; delay1(5); rs=0; delay1(5); e=1; delay1(5); P0=com; delay1(5); e=0; delay1(5); } void write_date(uchar date){ rw=0; delay1(5); rs=1; delay1(5); e=1; delay1(5); P0=date; delay1(5); e=0; delay1(5); } void init() { uchar num; Year=17; Month=1; Day=1; Hour=15; ) //写数据函数 //初始化函数29 ) 接口 } Minute=30; Second=50; Week=1; Hour_H=23; Minute_H=59; Second_H=59; Hour_L=18; e=0; // 时序表e初始为0 write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01); write_com(0x80); { } write_com(0x80+0x40); for(num=0;num<16;num++) { } write_date(table2[num]); delay1(5); write_date(table1[num]); delay1(5); //设置16*2显示,5*7点阵,8位数据 //设置光标 //光标自动加1,光标输入方式 //清屏 //设置初始显示位置 for(num=0;num<16;num++) void SetTime_dispaly(uchar add,uchar dat) 参数的内容 { uchar shi,ge; shi=dat/10; ge=dat%10; 30 //第一个:参数的地址,第二个: //把数据的十位提取出来 //把数据的个位提取出来 //要写的地址 write_com(add); ) } write_date(0x30+shi); write_date(0x30+ge); //十位的内容 1602字符库 //个位的内容 1602字符库 void Date_dispaly(uchar add,uchar dat) 数的内容 { } uchar shi,ge; shi=dat/16; ge=dat%16; //第一个:参数的地址,第二个:参 //把数据的十位提取出来 //把数据的个位提取出来 //要写的地址 //十位的内容 1602字符库 write_com(add); write_date(0x30+shi); write_date(0x30+ge); //个位的内容 1602字符库 void LCD_Display_String(unsigned char line,unsigned char *string) { //液晶屏显示内容,把要显示的内容 写到对应的位置 unsigned char i; unsigned char address=0; if(line==1) { } else if(line==2) { } for(i=0;i<16;i++) { 31 address=0x80; //0X80是第1行的第1个位 置 ,0x81第2位 address=0x80+0x40; //0X80+0x40是第2行的第1个位 置 ,0X80+0x40+1是第2行第2位 ) } } write_com(address); write_date(string[i]); address++; void Time_Display(void) { } /*************************************DS1302**********/ void write_ds1302_byte(uchar dat) { uchar i; for(i=0;i<8;i++) 32 read_rtc(); Date_dispaly(0x80+0x40+9,time_data[6]); //显示秒 Date_dispaly(0x80+0x40+6,time_data[5]); //显示分 Date_dispaly(0x80+0x40+3,time_data[4]); //显示时 Date_dispaly(0x80+11,time_data[3]); Date_dispaly(0x80+8,time_data[2]); Date_dispaly(0x80+5,time_data[0]); // //显示日 //显示月 //显示年 Date_dispaly(0x80+0x40+14,time_data[1]); //显示周 Year/10*16+Year%10 Year=time_data[0]/16*10+time_data[0]%16; Week=time_data[1]/16*10+time_data[1]%16; Month=time_data[2]/16*10+time_data[2]%16; Day=time_data[3]/16*10+time_data[3]%16; Hour=time_data[4]/16*10+time_data[4]%16; Minute=time_data[5]/16*10+time_data[5]%16; Second=time_data[6]/16*10+time_data[6]%16; 时钟 ********************************************************************* ) } { } sck=0; io=dat&0x01; dat=dat>>1; sck=1; //准备数据,从最低位开始 void write_ds1302(uchar add,uchar dat) { } uchar read_ds1302(uchar add) { uchar i,value; rst=0; _nop_(); //CPU原地踏步 sck=0; _nop_(); rst=1; _nop_(); write_ds1302_byte(add); 33 rst=0; _nop_(); sck=0; _nop_(); rst=1; _nop_(); write_ds1302_byte(add); write_ds1302_byte(dat); rst=0; _nop_(); io=1; sck=1; //释放 //传地址 //传数据 //不受其他影响 //CPU原地踏步 ) } for(i=0;i<8;i++) { } rst=0; _nop_(); sck=0; _nop_(); sck=1; io=1; return value; value=value>>1; sck=0; if(io) value=value|0x80; sck=1; void set_rtc() { } uchar i,j; //设置时间 for(i=0;i<7;i++) { } //转换BCD码 j=time_data[i]/10; time_data[i]=time_data[i]%10; time_data[i]=time_data[i]+j*16; //去除写保护 write_ds1302(0x8e,0x00); for(i=0;i<7;i++) { } write_ds1302(write_add[i],time_data[i]); write_ds1302(0x8e,0x80); //加写保护 34 ) void read_rtc() { uchar i; for(i=0;i<7;i++) { time_data[i]=read_ds1302(read_add[i]); //最终读出来的数 16进制 } } /*************************************************按****************************************************************/void Keyscan(void) { if(SELT==0) { delay1(2); if(SELT==0) { while(!SELT); Select_num++; //选择键按下一次 Adjust=1; //进入调节模式 } if(Select_num==1) { LCD_Display_String(1,table4); LCD_Display_String(2,table5); write_com(0x80+0); //写 >> write_date(0x3e); write_com(0x80+1); //写 >> write_date(0x3e); Enter_num=0; } if(Select_num==2) { 35 键 ) } } LCD_Display_String(1,table4); LCD_Display_String(2,table5); write_com(0x80+0x40+0); write_date(0x3e); write_com(0x80+0x40+1); write_date(0x3e); Enter_num=0; //写 >> //写 >> if(Select_num==3) { } write_com(0x0c); Enter_num=0; //光标不再闪烁 LCD_Display_String(1,table1); LCD_Display_String(2,table2); Select_num=0; Enter_num=0; Adjust=0; if(ENTER==0) { delay1(2); if(ENTER==0) { } if(Select_num==1) { if(Enter_num==1) { LCD_Display_String(1,table1); LCD_Display_String(2,table2); 36 while(!ENTER); Enter_num++; //设置实时时间 ) SetTime_dispaly(0x80+5,Year); SetTime_dispaly(0x80+8,Month); SetTime_dispaly(0x80+11,Day); SetTime_dispaly(0x80+0x40+3,Hour); SetTime_dispaly(0x80+0x40+6,Minute); SetTime_dispaly(0x80+0x40+9,Second); SetTime_dispaly(0x80+0x40+14,Week); 置上 置上 置上 的位置上 的位置上 write_com(0x80+5); write_com(0x0f); } if(Enter_num==2) { write_com(0x80+8); write_com(0x0f); } if(Enter_num==3) { write_com(0x80+11); write_com(0x0f); } if(Enter_num==4) { write_com(0x80+0x40+3); write_com(0x0f); } if(Enter_num==5) { write_com(0x80+0x40+6); write_com(0x0f); 37 //光标闪烁地址,停留在年的位 //光标闪烁 //光标闪烁地址,停留在月的位//光标闪烁 //光标闪烁地址,停留在日的位//光标闪烁 //光标闪烁地址,停留在时 //光标闪烁 //光标闪烁地址,停留在分 //光标闪烁 的位置上 位置上 ) } if(Enter_num==6) { write_com(0x80+0x40+9); //光标闪烁地址,停留在秒 write_com(0x0f); //光标闪烁 } if(Enter_num==7) { write_com(0x80+0x40+15); //光标闪烁地址,停留在星期的 write_com(0x0f); //光标闪烁 } if(Enter_num==8) { Enter_num=0; write_com(0x0c); //光标不再闪烁 LCD_Display_String(1,table1); LCD_Display_String(2,table2); time_data[0]=Year;///10*16+Year%10; time_data[1]=Week;///10*16+Week%10; time_data[2]=Month;///10*16+Month%10; time_data[3]=Day;///10*16+Day%10; time_data[4]=Hour;///10*16+Hour%10; time_data[5]=Minute;///10*16+Minute%10; time_data[6]=Second;///10*16+Second%10; set_rtc(); //设置时间 Select_num=0; Adjust=0; } } if(Select_num==2) //设置开关锁时间 { 38 ) if(Enter_num==1) { 的位置上 的位置上 置上 的位置上 LCD_Display_String(1,table6); LCD_Display_String(2,table7); SetTime_dispaly(0x80+0x40+4,Hour_L); SetTime_dispaly(0x80+0x40+7,Minute_L); SetTime_dispaly(0x80+0x40+10,Second_L); write_com(0x80+0x40+4); //光标闪烁地址,停留在时 write_com(0x0f); //光标闪烁 } if(Enter_num==2) { write_com(0x80+0x40+7); //光标闪烁地址,停留在分 write_com(0x0f); //光标闪烁 } if(Enter_num==3) { write_com(0x80+0x40+10); //光标闪烁地址,停留在秒的位 write_com(0x0f); //光标闪烁 } if(Enter_num==4) { write_com(0x0c); //光标不再闪烁 LCD_Display_String(1,table8); LCD_Display_String(2,table7); SetTime_dispaly(0x80+0x40+4,Hour_H); SetTime_dispaly(0x80+0x40+7,Minute_H); SetTime_dispaly(0x80+0x40+10,Second_H); write_com(0x80+0x40+4); //光标闪烁地址,停留在时 write_com(0x0f); //光标闪烁 39 ) 置上 } } } if(Enter_num==5) { } if(Enter_num==6) { } { } Enter_num=0; write_com(0x0c); //光标不再闪烁 LCD_Display_String(1,table1); LCD_Display_String(2,table2); Select_num=0; Adjust=0; write_com(0x80+0x40+10); //光标闪烁地址,停留在秒的位 //光标闪烁 write_com(0x0f); write_com(0x80+0x40+7); //光标闪烁 write_com(0x0f); //光标闪烁地址,停留在分 的位置上 if(Enter_num==7) if(UP==0) { delay1(2); if(UP==0) { while(!UP); if(Select_num==1) { if(Enter_num==1) 40 ) { } if(Enter_num==2) { } if(Enter_num==3) { } if(Enter_num==4) { Hour++; if(Hour>23) Hour=0; SetTime_dispaly(0x80+0x40+3,Hour); write_com(0x80+0x40+3); Day++; if(Day>31) Day=1; SetTime_dispaly(0x80+11,Day); write_com(0x80+11); write_com(0x0f); Month++; if(Month>12) Month=1; SetTime_dispaly(0x80+8,Month); write_com(0x80+8); write_com(0x0f); Year++; if(Year>99) Year=0; SetTime_dispaly(0x80+5,Year); write_com(0x80+5); write_com(0x0f); 41 ) } } write_com(0x0f); if(Enter_num==5) { } if(Enter_num==6) { } if(Enter_num==7) { } Week++; if(Week>7) Week=1; SetTime_dispaly(0x80+0x40+14,Week); write_com(0x80+0x40+14); write_com(0x0f); Second++; if(Second>59) Second=0; SetTime_dispaly(0x80+0x40+9,Second); write_com(0x80+0x40+9); write_com(0x0f); Minute++; if(Minute>59) Minute=0; SetTime_dispaly(0x80+0x40+6,Minute); write_com(0x80+0x40+6); write_com(0x0f); if(Select_num==2) 42 ) { { } if(Enter_num==1) Hour_L++; if(Hour_L>23) Hour_L=0; SetTime_dispaly(0x80+0x40+4,Hour_L); write_com(0x80+0x40+4); write_com(0x0f); if(Enter_num==2) { } if(Enter_num==3) { } if(Enter_num==4) { 43 Minute_L++; if(Minute_L>59) Minute_L=0; SetTime_dispaly(0x80+0x40+7,Minute_L); write_com(0x80+0x40+7); write_com(0x0f); Second_L++; if(Second_L>59) Second_L=0; SetTime_dispaly(0x80+0x40+10,Second_L); write_com(0x80+0x40+10); write_com(0x0f); ) } } } } Hour_H++; if(Hour_H>23) Hour_H=0; SetTime_dispaly(0x80+0x40+4,Hour_H); write_com(0x80+0x40+4); write_com(0x0f); if(Enter_num==5) { } if(Enter_num==6) { } Second_H++; if(Second_H>59) Second_H=0; SetTime_dispaly(0x80+0x40+10,Second_H); write_com(0x80+0x40+10); write_com(0x0f); Minute_H++; if(Minute_H>59) Minute_H=0; SetTime_dispaly(0x80+0x40+7,Minute_H); write_com(0x80+0x40+7); write_com(0x0f); if(DOWN==0) { 44 ) delay1(2); if(DOWN==0) { while(!DOWN); if(Select_num==1) { if(Enter_num==1) { } if(Enter_num==2) { } if(Enter_num==3) { } if(Enter_num==4) 45 Year--; if(Year<0) Year=99; SetTime_dispaly(0x80+5,Year); write_com(0x80+5); write_com(0x0f); Month--; if(Month<1) Month=12; SetTime_dispaly(0x80+8,Month); write_com(0x80+8); write_com(0x0f); Day--; if(Day<1) Day=31; SetTime_dispaly(0x80+11,Day); write_com(0x80+11); write_com(0x0f); ) { } if(Enter_num==5) { } if(Enter_num==6) { } if(Enter_num==7) { Week--; if(Week<1) Week=7; 46 Hour--; if(Hour<0) Hour=23; SetTime_dispaly(0x80+0x40+3,Hour); write_com(0x80+0x40+3); write_com(0x0f); Minute--; if(Minute<0) Minute=59; SetTime_dispaly(0x80+0x40+6,Minute); write_com(0x80+0x40+6); write_com(0x0f); Second--; if(Second<0) Second=59; SetTime_dispaly(0x80+0x40+9,Second); write_com(0x80+0x40+9); write_com(0x0f); ) } } SetTime_dispaly(0x80+0x40+14,Week); write_com(0x80+0x40+14); write_com(0x0f); if(Select_num==2) { if(Enter_num==1) { } if(Enter_num==2) { } if(Enter_num==3) { Second_L--; if(Second_L<0) Second_L=59; 47 Hour_L--; if(Hour_L<0) Hour_L=23; SetTime_dispaly(0x80+0x40+4,Hour_L); write_com(0x80+0x40+4); write_com(0x0f); Minute_L--; if(Minute_L<0) Minute_L=59; SetTime_dispaly(0x80+0x40+7,Minute_L); write_com(0x80+0x40+7); write_com(0x0f); ) } SetTime_dispaly(0x80+0x40+10,Second_L); write_com(0x80+0x40+10); write_com(0x0f); if(Enter_num==4) { } if(Enter_num==5) { } if(Enter_num==6) { Second_H--; if(Second_H<0) Second_H=59; SetTime_dispaly(0x80+0x40+10,Second_H); write_com(0x80+0x40+10); Minute_H--; if(Minute_H<0) Minute_H=59; SetTime_dispaly(0x80+0x40+7,Minute_H); write_com(0x80+0x40+7); write_com(0x0f); Hour_H--; if(Hour_H<0) Hour_H=23; SetTime_dispaly(0x80+0x40+4,Hour_H); write_com(0x80+0x40+4); write_com(0x0f); 48 ) } } } } } write_com(0x0f); /************************************************/ void Open(void) { 内 { } if((Timer==0)&&(flag==0)) 49 开关灯控制 ********************************************************************* float Now; float Set_L,Set_H; Now=Hour+Minute/60+Second/3600; //把实时时间化成小 //把设置下限时间化 //把设置上限时 时为单位 Set_L=Hour_L+Minute_L/60+Second_L/3600; Set_H=Hour_H+Minute_H/60+Second_H/3600; if((Now>=Set_L)&(Now<=Set_H)) { } if((Now //实时时间不在范围 LAMP1=0; LAMP2=0; Timer=1; //进入定时模式 //开启路灯 成小时为单位 间化成小时为单位 //实时时间在上下限 时间范围内 Timer=0; //退出定时模式,根据光 线强度或声响进行亮灭灯 //没有定时并且不延时 ) 10s的情况下 { } if(flag==1) { } if((LAMP1==0)||(LAMP2==0)) //灯亮情况下 { } if((LAMP1==1)&&(LAMP2==1)) //灯灭情况下 { 50 if((Hour>=0)&&(Hour<6)) { } if(Hour>=6) { } //延迟10s //启动定时器 LAMP1=1; LAMP2=1; //关灯 //不在凌晨时间里 LAMP1=1; LAMP2=0; //一亮一灭 //在凌晨0点到6点 TR0=1; if(CHECK==0) { } else { } BEEP=0; delay1(20); if(CHECK==0) { } BEEP=1; //检测到灯暗,表示灯故障 启动蜂鸣器 //消抖 //启动蜂鸣器 //关闭蜂鸣器 ) } } BEEP=0; //关闭蜂鸣器 /******************************************主函数 外部中断 定时器中断*************************************************************/ void T0_init(void) { TMOD=0x11; TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; } void int0init(void) { EA=1; EX0=1; IT0=1; } void main() { BEEP=0; init(); T0_init(); int0init(); while(1) { if(Adjust==0) { Time_Display(); Open(); } Keyscan(); //设置定时器0为工作方式1 //定时50MS //开定时器T0的中断 总中断 //允许T0中断 //外部中断0初始化 //打开总中断 //中断允许位 //外部中断0触发方式为下降沿触发 //关蜂鸣器 //液晶初始化 //定时器初始化 //外部中断初始化 //非调节模式下显示时间和控制灯 //显示时间 //动作判断,根据光线和声响开关 //扫描按键 51 ) } } //有声响 void int0 () interrupt 0 { if(Timer==0) { if((Hour>=0)&&(Hour<6))//在凌晨0点到6点 { LAMP1=0; LAMP2=0; flag=1; Miao=0; } if(Hour>=6) { if(LIGHT==0) { LAMP1=0; LAMP2=0; flag=1; Miao=0; } } } } void Timer0() interrupt 1 倒计时10s { TH0=(65536-50000)/256; TL0=(65536-50000)%256; Count++; 20次,表示1s的时间到 if(Count>=20) { //两个都开启 //启动定时 //重新计时 //不在凌晨时间里 //在黑暗时 //两个都开启 //启动定时 //重新计时 //定时器T0中断服务子程序 定时 //赋初值=50ms //TH0=3C,TL0=B0 //每中断一次,Count加一,计数 //50ms*20次=1s 52 Miao++; if(Miao>=10) { TR0=0; flag=0; Miao=0; } Count=0; } } ) //定时时间10s到 //关闭定时器 //清除标志位 //清除计数 //清除计数 53 ) PCB图 54 ) 系统电路总图 55 因篇幅问题不能全部显示,请点此查看更多更全内容