城市智能路灯控制系统设计说明
发布时间:2020-10-13 13:13:36
发布时间:2020-10-13 13:13:36
学 生 毕 业 设计
课题名称 | 城市智能路灯控制系统设计 |
姓 名 | 欧敏辉 |
学 号 | 091250205 |
学 院 | 通信与电子工程学院 |
专 业 | 电子科学与技术 |
指导教师 | 胡赛纯 副教授 |
2013年06月12日
毕 业 设 计 任 务 书
课题名称 | 城市智能路灯控制系统设计 |
姓 名 | 欧敏辉 |
学 号 | 091250205 |
学 院 | 通信与电子工程学院 |
专 业 | 电子科学与技术 |
指导教师 | 胡赛纯 副教授 |
2013年01月22日
一、设计的教学目的
1、提高学生运用所学知识分析问题和解决问题的能力;
2、培养学生知识应用能力、动手能力、创新能力、文字表达能力等,为今后的学习和工作打下良好的基础;
3、培养学生认真负责的工作态度。
二、设计的主要容
1、总体方案确定。根据设计要求完成系统的总体设计方案;
2、系统硬件设计。系统硬件设计主要包括:按键输入电路、单片机数据输入输出电路、光敏和声敏控制电路、蜂鸣器报警电路、二极管路灯模拟电路,在此基础上完成原理图的绘制以及PCB图绘制和封装;
3、系统软件设计。本设计主要研究智能路灯控制系统,通过对时间的定时和光敏传感器的应用,达到对路灯的亮灭控制。对下半夜的路灯节能模式的开启和声敏系统的安全模式的跳转。对灯泡的亮灭进行采集,达到报警的程序描述;
4、制作实物。依据原理图列元器件清单,制作PCB板,购买元器件,进行电路板焊接,最后进行实物调试,完成实物的制作。
三、设计的基本要求
1、题目应恰当、准确地反映本课题的研究容。
2、中心突出,容充实,数据可靠,层次分明,图表清晰,结论正确。
3、所使用的度量单位一律采用国际标准单位。
4、字数不少于3000字。
四、进度安排
序号 | 设 计 各 阶 段 容 | 起止日期 |
1 | 确定选题,下达任务书 | 2013年01月22日 |
2 | 设计开题答辩 | 2013年03月23日 |
3 | 交初稿 | 2013年04月15日 |
4 | 交第二稿 | 2013年05月15日 |
5 | 交第三稿 | 2013年05月25日 |
6 | 交定稿 | 2013年06月01日 |
7 | 毕业设计答辩 | 2013年06月09日-06月15日 |
5、参考文献
[1] 蔡美琴, 为民. MCS-51系列单片机系统及其应用[M]. 高等教育, 2004: 13-45.
[2] 建清. 轻松玩转51单片机C语言[M]. 航空航天大学, 2011: 255-269.
[3] 康华光. 电子技术基础 模拟部分[M]. : 高等教育, 1998: 98-123.
[4] 余锡存. 单片机原理与接口技术[M]. : 电子科技大学, 2003: 35-62 .
[5] 杜军, 邱瑞学. PL2101在路灯控制系统中的应用[J]. 国外电子元器件. 2003. 9 :33-34.
[6] 熊涛, 丁辛芳, 德英. 一种新颖的照明控制电路[J]. 传感器技术, 1999, 18 (5): 50-53.
[7] 王海伦, 叶冬芬. 单片机控制的照明智能控制系统[J]. 电气时代, 2005, (1): 121-122.
[8] 谭浩强. C程序设计[M]. : 清华大学, 2007: 145-169.
[9] 严蔚敏, 吴伟明. 数据结构(C)语言版)[M]. : 清华大学, 2010: 256-287.
[10] V. Yu. Teplov, A.V.Anisimov. Thermostatting System Using a Single-Chip Microcomputer and Thermoelectric Modules Based on the Peltier Effect[J] , 2002, 27(6): 67-104.
学 生 毕 业 设 计
开 题 报 告 书
课题名称 | 城市智能路灯控制系统设计 |
姓 名 | 欧敏辉 |
学 号 | 091250205 |
学 院 | 通信与电子工程学院 |
专 业 | 电子科学与技术 |
指导教师 | 胡赛纯 副教授 |
2013年02月18日
设计题目 | 城市智能路灯控制系统设计 | ||||||||||
课题的根据:1)设计方案(设计用到的主要工具、预期实现的功能及参数要求、主要功能模块等)。 2)自己的见解(主要是对设计方案的制定、设计难点及解决办法、设计创新方面的思考)。 1. 设计方案 本次毕业设计主要采用MCS-51系列单片机原理和控制理论设计城市智能路灯控制系统,实现定时开关,光控开关,声控开关,故障报警等路灯电路模型与仿真及实物。以单片机STC89C52为核心控制器件,通过按键选择设置时间参数,在LCD1602显示相应设置值,并在串口通信协议下将参数值送到单片机中,实现对时间的定时,实现定时开关的作用。结合光控开关,和在下半夜的声控开关,共同实现路灯系统的智能化,节能和更好的实现故障报警和维护。 1.1 设计用到的主要工具 本次设计用到主要工具有:Proteus7.5,Keil uVision3,Altium Designer Summer 09,Multisim1.0。 1.2 预期实现的功能及参数要求 1、实现定时开关设置,通过按键电路在LCD1602上设置定时开路灯和定时关路灯,实现在不同四季可以更好的控制路灯开关时间,以达到最好的开关效果; 2、实现光控开关的功能,能随机应变的适应当白天光照强度低于15LUX的情况下,达到开启路灯系统,使交通更加安全可行; 3、下半夜通过关掉相间隔的路灯,以实现节能的功能,配合声控控制开关,可以及时全亮,给交通带来安全可靠照明系统; 4、通过检测电路,实现灯泡故障报警电路系统,便于维护人员的维护和及时排除交通的安全隐患问题。 1.3 主要功能模块 1、以STC89C52单片机作为本设计的控制核心处理器组成的单片机最小系统; 2、以按键配合LCD1602控制设置的定时开和定时关的电路设计; 3、光控电路设计,实现应急开路灯控制; 4、下半夜路灯节能模式的开启和声控开关的应急启动,节能和减少交通安全隐患问题; 5、二极管模拟路灯电路; 6、故障和报警电路,便于尽快维护交通安全问题。 2. 本人见解 2.1 方案制定 随着城市规模的不断扩大,现有的路灯管理的方式方法已远远不能满足城市路灯发展与管理的需要,必须依靠现代化的高科技管理手段。路灯管理工作需要一个以计算机为核心的、自动化的管理手段来替代普通的路灯监控系统。使整个城市照明监测,决策和管理工作建立在计算机信息网络平台之上。因而单片机在路灯系统中的应用应运而生。 由于单片机具有集成度高,处理能力强,可靠性高,系统结构简单,价格低廉的优点,因此在路灯照明工程中被广泛应用。单片机技术中的计时系统是单片机的一个典型的应用。通过计时系统来对时间进行有效的控制。在路灯设计的定时系统中将得到更好的应用. 路灯控制系统在城市中的用途很广泛,本路灯控制系统针对实际情况的需要进行优化设计的。在本设计中,输入是开关按键,进行时间控制,显示是通过LCD1602实现,通过对时间的调整,达到定时开和定时关的设置,达到控制的目的。 结合光控和声控以及固有的节能模式为一体,实现更加实用性和可行性的路灯控制系统。既可以实现节能化,也可以实现快速报警化,便于维修人员的维护和及时的减少因路灯原因引起的交通隐患,实现更加安全节能环保的路灯控制系统。 2.2 设计难点及解决办法 本设计的主要难点有对时间的设置,只利用单片机自带的定时器来实现定时开路灯和定时关路灯。还有就是要达到在下半夜之后才开启声控开关的应用功能,在白天或者上半夜不能处于应用状态。再次就是故障报警电路的灵敏度的控制和调试问题。采用12MHZ的晶振,便于对时间的精确控制,通过对一个时钟的设置基础上再来实现定时开关的功能。光敏和声敏开关采用灵敏度极高的光敏电阻和声敏电阻,以实现灵敏开关,减少系统的应用故障问题。采用LCD1602来显示,比数码管更加好的显示时间设置的值,以及可以显示故障问题,比普通的数码管更加实用。报警系统采用强蜂鸣器,来提醒工作人员故障问题,催促你及时维护路灯,带来交通的安全便捷。本设计集成了存储、编解码电路、传感器控制电路。为实现可靠的数据精度,本设计在硬件方面方面选择精度高的元器件,电路中设计了多重开路灯电路设计,更好的实现路灯的及时高效的应用问题。软件设计中,通过对单片机的I/O口的设置和应用,完成该设计所需的实现功能。需设计合理的硬件电路,而软件设计需流程清晰,合理编写模块化程序。 2.3 设计的创新思想 城市智能路灯控制系统,在常规的路灯开关设置基础上,实现更加节能,高效,更加方便切实可行的方法。AT89S52单片机具有集成度高、功能强、速度快、体积小、功耗低、价格低廉等特点,将它与传感器、LCD显示屏以及其他外围电路结合可设计出简单高效、精度可靠、易于运用和实用的路灯开关控制系统;本设计加入了特有的下半夜节能开关模式,在人和车流量少的时候,达到一种节能的方式,减少不必要的能源消耗。当有车辆或行人经过时,通过声控开关开启未亮的路灯,减少交通隐患。配合定时开关和光控开关的使用,实现双开关控制功能。以及那盏灯坏了可以通过LCD显示以及蜂鸣器报警,减少维护工作量和便于工作人员尽快解决问题; 本设计的精确方面就是集节能,高效,安全,维护于一体的智能控制系统。实现更加方便快捷的城市新型路灯控制系统。 | |||||||||||
设计的主要容: 1.总体方案确定。广泛查阅单片机定时方面的资料和I/O口的输入输出的控制资料以及其他的一些路灯控制模式和传感器开关的研究资料,根据设计要求进行项目方案选择与论证,完成系统的总体设计方案; 2.系统硬件设计。系统硬件设计主要包括:时钟电路、单片机的最小系统电路、按键设置和LCD显示电路、光/声控制电路、报警电路以及二极管路灯模拟电路。在此基础上完成原理图的绘制以及PCB图绘制,最后进行Proteus仿真; 3.系统软件设计。本设计主要研究开关的问题,定时开关和光控开关以及下半夜工作的声控开关的协调问题和开启问题,采用一定的时序和中断来实现这些功能的编写等; 4.制作实物。依据原理图列元器件清单,制作PCB板,购买元器件,进行电路板焊接,最后进行实物调试,完成实物的制作。 | |||||||||||
完成期限和采取的主要措施: 一、完成设计时间安排: 确定选题,下达任务书 2013年01月22日 设计开题答辩 2013年03月23日 交初稿 2013年04月15日 交第二稿 2013年05月15日 交第三稿 2013年05月25日 交定稿 2013年06月01日 毕业设计答辩 2013年06月09日-06月15日 二、采取的主要措施: 1.广泛查阅文献资料,阅读相关书籍,确定选题。 2.深入思考,提出方案,获得设计思想; 3.理清思路,明确围和框架、重点、难点技术攻关,抓创新点,疏通具体细节。 4.设计、制作实物,写作、修改、定稿,完成毕业设计。 | |||||||||||
主要参考资料: [1] 蔡美琴, 为民. MCS-51系列单片机系统及其应用[M]. 高等教育, 2004: 13-45. [2] 谭浩强. C程序设计[M]. : 清华大学, 2007: 145-169. [3] 康华光. 电子技术基础 模拟部分[M]. : 高等教育, 1998: 98-123. [4] 余锡存. 单片机原理与接口技术[M]. : 电子科技大学, 2003: 35-62 . [5] 杜军, 邱瑞学. PL2101在路灯控制系统中的应用[J]. 国外电子技术. 2003. (9) . [6] 熊涛, 丁辛芳, 德英. 一种新颖的照明控制电路[J]. 传感器技术, 1999, 18 (5): 50-53. [7] 王海伦, 叶冬芬. 单片机控制的照明智能控制系统[J]. 电气时代, 2005(1): 121-122. [8] 严蔚敏, 吴伟明. 数据结构(C)语言版)[M]. : 清华大学, 2010: 256-287. [9] V. Yu. Teplov, A.V.Anisimov. Thermostatting System Using a Single-Chip Microcomputer and Thermoelectric Modules Based on the Peltier Effect[J] , 2002, 27(6): 67-104. | |||||||||||
指导教师意见: 签名: 年 月 日 | |||||||||||
开 题 报 告 会 纪 要 | |||||||||||
时间 | 2013年03月23日 | 地点 | 科瑞特科技股份 | ||||||||
与 会 人 员 | 姓 名 | 职务(职称) | 姓 名 | 职务(职称) | 姓 名 | 职务(职称) | |||||
加升 | 教授 | ||||||||||
胡赛纯 | 副教授 | ||||||||||
邓保 | 讲师 | ||||||||||
会议纪要: 主持人: 记录人: 年 月 日 | |||||||||||
指 导 小 组 意 见 | 负责人签名: 年 月 日 | 学院 意 见 | 负责人签名: 年 月 日 | ||||||||
毕业设计答辩申请表
学 号 | 091250205 | 姓 名 | 欧敏辉 | 学 院 | 通信与电子工程学院 | ||||
专 业 | 电子科学与技术 | 指导教师 | 胡赛纯 | ||||||
设计课题名称 | 城市智能路灯控制系统设计 | ||||||||
设计要求及进程计划 | |||||||||
起 止 时 间 | 任 务 要 求 | 完成情况 | 指 导 教 师 签 名 | ||||||
2013年03月23日 | 设计开题答辩 | ||||||||
2013年04月15日 | 交初稿 | ||||||||
2013年05月15日 | 交第二稿 | ||||||||
2013年05月25日 | 交第三稿 | ||||||||
2013年06月01日 | 交定稿 | ||||||||
毕业设计特色简介: 本设计大约有八千字的篇幅,主要研究了如何用基于单片机设计城市智能路灯控制系统功能,本设计主要分为三个部分:(1)总体部分;(2) 硬件部分;(3) 软件部分。本设计除了实现了基本的路灯控制功能,还实现通过光控、声控和人工启动相结合;下半夜的节能模式;路灯坏了报警功能于一体。使该设计质量得到了很好地提升,同时也更高效节能,具有较好的实际意义与前景。 | |||||||||
是否同意参加答辩意见: 主指导教师(签名) 年 月 日 | |||||||||
学 生 毕 业 设 计
答 辩 评 审 表
课题名称 | 城市智能路灯控制系统设计 |
姓 名 | 欧敏辉 |
学 号 | 091250205 |
学 院 | 通信与电子工程学院 |
专 业 | 电子科学与技术 |
指导教师 | 胡赛纯 副教授 |
2013年06月01日
毕业设计成绩评定标准及评审表(理工科类)
专业:电子科学与技术 课题:城市智能路灯控制系统设计 学生:欧敏辉
分 块 | 等级及得分 项 目 (该项满分值) | 评 分 等 级 | 各 档 得 分 | 评分 | |||||||
A | B | C | D | A | B | C | D | ||||
指 导 教 师 40% | 完成任务的水平和质量50 | 1.资料搜集与整理论证情况(10) | 齐全 | 较完全 | 基本齐全 | 差 | 9-10 | 7-8 | 5-6 | ≤4 | |
2.基本概念和理论情况(10) | 清楚、正确 | 基本清楚 基本正确 | 尚清楚 尚正确 | 不清楚 不正确 | 9-10 | 7-8 | 5-6 | ≤4 | |||
3.计算方法和计算结果(15) | 正确、应用计算机较多 | 基本正确 少量应用 | 尚正确 尚应用 | 不正确 未应用 | 13-15 | 10-12 | 7-9 | ≤6 | |||
4.独立见解和应用价值(5) | 有、较大 | 有、一般 | 有、无或无、一般 | 无、无 | 5 | 4 | 3 | ≤2 | |||
5.说明书、图纸(10) | 层次分明、正确无误、认真工整、外文提要正确 | 基本正确、较认真、较明确 | 尚正确、尚认真、基本正确 | 错误很多、认真、不正确 | 9-10 | 7-8 | 5-6 | ≤4 | |||
独立工作能力30 | 6.方案制定、选用(10) | 独立完成 且正确 | 基本独立 完成正确 | 尚能独立完成基本正确 | 不能独立完成且错误很多 | 9-10 | 7-8 | 5-6 | ≤4 | ||
7.规和手册使用(8) | 熟练 | 基本熟练 | 尚可 | 基本不会 | 8 | 7 | 6 | ≤5 | |||
8.编程、上机结果的分析与处理、国外文献阅读(12) | 熟练主动查阅消化引用 | 基本熟练查阅、有引用 | 尚可尚能 查阅引用 | 基本不会 查阅引用 | 11-12 | 9-10 | 7-8 | ≤6 | |||
工作态度20 | 9.遵守纪律(10) | 好 | 较好 | 一般 | 差 | 9-10 | 7-8 | 5-6 | ≤4 | ||
10.爱护公物、保持良好环境(5) | 好 | 较好 | 一般 | 差 | 5 | 4 | 3 | ≤2 | |||
11.工作责任心、主动性(5) | 强 | 较好 | 一般 | 差 | 5 | 4 | 3 | ≤2 | |||
材 料 评 阅 人 30% | 1.任务完成情况(10) | 全部完成 | 基本完成 | 主要部分完成 | 未完成 | 9-10 | 7-8 | 5-6 | ≤4 | ||
2.基本概念和理论论证情况(20) | 清楚、正确 | 基本清楚 基本正确 | 尚清楚、尚正确 | 不正确、未应用 | 18-20 | 15-17 | 12-14 | ≤11 | |||
3.计算方法和计算结果(30) | 正确、应用计算机较多 | 基本正确 少量应用 | 尚正确、未应用 | 不正确、不应用 | 26-30 | 21-25 | 16-20 | ≤15 | |||
4.独立见解和应用价值(10) | 有、较大 | 有、一般 | 有、无或 无、一般 | 无、无 | 9-10 | 7-8 | 5-6 | ≤4 | |||
5.说明书、图纸(20) | 层次分明、正确无误、认真工整,外文提要正确 | 基本正确、较认真、较正确 | 尚正确、尚认真、基本正确 | 错误很多、不认真、不正确 | 18-20 | 15-17 | 12-14 | ≤11 | |||
6.题目难度大小、工作量(10) | 难、饱满 | 知中、较饱满 | 较易、尚饱满 | 易、不饱满 | 9-10 | 7-8 | 5-6 | ≤5 | |||
答 辩 委 员 30% | 1.报告情况(20) | 简明、清晰、重点突出 | 基本清晰 重点不够 | 尚清晰、有错 | 概念不清 错误较多 | 18-20 | 15-17 | 12-14 | ≤11 | ||
2.回答问题情况(50) | 正确、熟练 | 基本正确 | 尚正确、有错 | 基本不正确 | 43-50 | 35-42 | 27-34 | ≤26 | |||
3.说明书、图纸(20) | 总体印象认真、工整、正确 | 较认真 | 尚认真 | 不认真 | 18-20 | 15-17 | 12-14 | ≤11 | |||
4.独立见解和应用价值(10) | 有、较大 | 有、一般 | 有、无或无、一般 | 无、无 | 9-10 | 7-8 | 5-6 | ≤4 | |||
说明:1.本方案供学院部参考,评分方案和比例均可根据实际情况进行调整。
2.学生的答辩成绩取诸答辩委员会的平均成绩。
3.答辩委员会除给出答辩成绩外,还应汇总和审查指导教师、材料评阅人给出的成绩,然后分档(优
≥90;良80-89分;中70-79分;及格60-69分;不及格≤59分)给出学生毕业设计成绩。
指 导 教 师 评 审 意 见 | 评语:
评分(百分制)
指导教师(签名): 年 月 日 |
评 阅 教 师 评 审 意 见 | 评语:
评分(百分制) 评阅教师(签名): 年 月 日 |
答 辩 小 组 意 见 | 评语: 评分(百分制) 负责人(签名): 年 月 日 |
院 系 学 术 委 员 会 意 见 | 评语: 论文最终评分() 评定等级 负责人(签名): 院系(公章) 年 月 日 |
注:①评语包括设计(论文)优点、缺点、数据、材料、论证、结论是否正确,有无新的见解等。
②等级标准:优≥90;良≥80;中≥70;及格≥60;不及格<60;
答 辩 会 纪 要 | ||||||
时间 | 地点 | |||||
答 辩 小 组 成 员 | 姓 名 | 职 称 | 所 学 专 业 | 所 从 事 专 业 | ||
答辩中提出的主要问题及回答的简要情况记录:
会议主持人: 记 录 人: 年 月 日 | ||||||
学 生 毕 业 设计
课题名称 | 城市智能路灯控制系统设计 |
姓 名 | 欧敏辉 |
学 号 | 091250205 |
学 院 | 通信与电子工程学院 |
专 业 | 电子科学与技术 |
指导教师 | 胡赛纯 副教授 |
2013年06月01日
城市学院本科毕业设计诚信声明
本人重声明:所呈交的本科毕业设计,是本人在指导老师的指导下,独立进行,设计成果和制作的产品实物不存在知识产权争议。对本设计的研究做出重要贡献的个人和集体均已在文中以明确方式标明。本人完全意识到本声明的法律结果由本人承担。
本科毕业设计作者签名:
年 月 日
摘要................................................................................................................................1
关键词............................................................................................................................1
引言................................................................................................................................2
1总体设计 2
1.1 功能要求及技术指标 2
1.2总体设计方案 3
2 硬件设计 4
2.1 硬件电路总原理图 4
2.2 主要硬件模块原理图及相关说明 5
2.2.1 单片机最小系统和DS1302模块电路 5
2.2.2 光敏/声敏控制开关以及LED电路 7
2.2.3 串口通信电路和电源模块电路 8
2.3 硬件电路PCB图 9
3 软件设计 10
3.1 主程序流程及相关说明 10
3.2 各硬件模块驱动程序流程及相关说明 12
3.2.1 初始模式驱动程序 12
3.2.2 白天系统工作模式驱动程序............................................................13
3.2.3 上半夜系统工作模式驱动程序 13
3.2.4 下半夜系统工作模式驱动程序 14
4测试结果及分析 14
5 调试与使用说明 17
参考文献 21
致 21
附录 22
城市智能路灯控制系统设计
摘要:本文研究的城市智能路灯控制系统,是针对我国在城市照明上所存在的巨大的能源消耗,而开发的基于单片机的新型节能控制系统。集光敏控制、声敏控制、节能控制、报警控制于一体。智能路灯节能控制系统利用STC89C52为核心芯片,通过对时间的定时控制来控制路灯,通过光敏和声敏开关来控制突发情况,以及与下半夜进入节能模式相结合,利用LED作为模拟路灯,并且配合报警模块实现智能路灯控制系统。
关键词:STC89C52;LED路灯;光敏开关;声敏开关
引言
近年来,随着我国经济改革的深入发展和信息化时代的深入,路灯的发展给城市带来了明亮和方便。路灯是城市形象的代表,也是城市交通安全的保障,给人民的生活带来特别大的便利。但随着路灯的发展城市路灯的维护量增大,带来维护人员不足的问题,使得路灯故障时不能得到及时的修复以致造成人民生活的不便。维护费用也随之增加,社会成本过高,电费支出过多,财政承担相对困难,增加了政府的处理能力,滞后经济和社会的发展。因此迫切需要解决此问题,故针对这种情况本人设计并制作了这一节能智能型的模拟路灯控制系统,其主要价值在于能更好的节能与监测,在很多方面给人们带来了方便,给维护人员带来便利,希望此系统能在现实中发挥其潜在的价值。
在社会不断发展的今天,保证道路照明设备的有效性与安全性,得到了越来越多的重视。国际社会也对此做出了很多改进,对照明灯以及智能恒压控制方面做出了重大贡献。目前包括就近的中科恒源公司做的集太阳能和风能于一体的新能源节能路灯,新思维光电,做专业的LED户外照明,高杆灯和交通灯灯。这足以说明这片领域是有很大的社会价值和商业前景。城市亮化工程是城市现代化建设的重要容,为营造优美舒适的投资环境,提升城市形象,提高路灯系统的管理水平,在满足城市道路照明要求的同时,实现智能化的节能照明,在客观上有迫切要求,也是解决城市美化与能源紧最佳选择。
课题设计的主要研究容是针对目前路灯照明中存在的问题,结合国外各种路灯节能的研究成果,设计一种基于单片机控制的节能路灯系统。通过单片机的功能多样性实现本课题的基本要求。
当有工作人员人为控制路灯的开关时,路灯随即被打开和关闭。通过LCD1602显示屏显示当前时钟时间。通过设置,可以设定定时开路灯时间,和定时关路灯时间。当时间达到设定的开路灯时,则路灯自动开启。当时间达到路灯的关闭时间时,路灯则自动关闭。先通过光照计检测15LUX的光照,15LUX是一般规定的路灯最低开启光照强度,来设定的规定的开灯光照,当白天的光照低于15LUX的光照强度时,可以通过光敏控制开关感应到光线强度的变化,自动开启路灯,更好的实现对路灯的控制。当午夜12:00时,系统自动开启节能模式,采用路灯的间隔亮灭。不会给交通照明带来干扰,也可以节约一半的能源。当有车辆和行人经过的时候,通过声敏控制开关检测到声音。通过电压的变化来将节能模式下灭掉的灯重新点亮。可以方便车辆和行人通行。该毕业设计课题所用的电源电压为+5V,利用USB作为电源,通过LM7805将电流转换成+5V电压作为电压源。不管是在前半夜的正常开灯的模式下,还是在后半夜的节能模式下,当有灯泡坏了的时候。系统通过蜂鸣器会自动报警,并在LCD1602上面显“Lamp Bad ”。便于提醒工作人员及时维修,以免因耽误时间而造成不必要的损失。实现节能,高效相结合的现代城市智能路灯控制系统。
本系统主要由STC89C52单片机控制电路、时钟电路、按键输入电路、光控开关电路、声控开关电路、二极管模拟路灯显示电路、报警电路,液晶显示,串口输入电路、线性电源电路等组成。单片机控制电路主要负责对时钟的设定和控制、路灯的亮灭、光控开关和声控开关的开启和下半夜路灯的控制信息进行的处理。通过DS1302时间模块输出整个系统的时序,是整个系统实现的前提。LCD显示的主要是根据季节的变化设定的开时间和关时间,以及报警的提示“Lamp Bad”。按键电路主要包括人工开启和关闭路灯,当前时钟的设置,还有就是开灯时间的设置和关灯时间的设置。光控开关主要负责的是在白天光照强度低于15LUX时的情况下来开启路灯,用于实现无人控制的的突发事件。进入下半夜,系统通过对定时器时间做出判断,通过对I/O口的设定来开启节能模式。此时的声控开关才有作用,主要负责的是当有行人或者车辆经过的时候开启节能模式下灭掉的路灯。串口输入电路负责的是把源程序加载到单片机中,通过连接计算机和串口来用于加载程序和进行修改再加载。电源电路是用USB作为电源输出口,连接到所设计的系统,为系统的运行供电。报警器主要负责的是报警,提醒维护人员相关灯出现了故障,请及时维修,这样可以在第一时间减少维修,减少交通隐患。系统整体框图如图1.1所示。
系统运行后,LCD上面会显示相关的初始开关灯设置时间。通过对按键的输入,设置开启路灯时间和关闭路灯时间,再通过确认按键确认好输入的值。系统进行时序运行。白天如果没有突发黑暗的时候,就会通过这个定时设置在傍晚的时候开启路灯。在时钟运行到了十二点的时候,系统自动开启节能模式照明。此时因为人流量和车流量是很少的时候,全部开启路灯就造成了不必要的浪费了,采用间隔亮灭灯,也可以达到照明的效果。当有行人或者车辆经过的时候,系统通过声敏控制开关,来开启节能模式下灭掉的灯,这样可以避免因为光线暗而造成的交通事故,而且被点亮的灯可以延时5秒,当五秒过后没有车辆了,灯又会重新恢复节能模式,当仍有行人和车辆的时候,灯会继续亮的。继而这样运行下去,到了第二天早上,通过开始设定的关灯时间来关闭路灯,此时又恢复了普通状态,声控开关处于关闭状态。直至下一个傍晚再开启路灯,实现这样的循环。通过按键的输入,随着四季的关照程度不同,可以设定不同的开关灯时间,而不是固定式的时间,减少一些能源浪费。
图1.1 系统整体框图
系统硬件部分由MCU、DS1302与按键控制模块、LCD显示模块、按键控制模块、光敏/声敏控制模块、报警模块、LED模拟路灯模块、USB串口及USB接口电路模块,分各模块单独设计电路,硬件系统总电路图如图2.1所示。
图2.1 硬件总电路图
单片机最小系统为整个系统的核心,控制着整个系统的运行,让单片机稳定的运行是非常必须的,单片机最小系统原理图如图2.2所示。单片机最小系统控制部分主要由STC89C52、晶振电路、复位电路等电路组成,是每个用单片机系统实现的必须的外围电路[1]。主要通过一个按键控制单片机的复位,这样接可以更好的实现操作人员的复位。避免系统因为程序或者操作失误引起的进入死循环,或者卡机状态。电压接的是+5V,对于本设计,全部采用的电源都是+5V。晶振采用是是12MHZ频率的晶振,因为这个频率的晶振可以实现每条指令需要的时间是2us。便于对时间的计算和统计,特别适用于时序电路。
图2.2 MCU和DS18B20模块电路
DS1302 是DALLAS 公司推出的涓流充电时钟芯片,含有一个实时时钟/日历和31 字节静态RAM,通过简单的串行接口与单片机进行通信实时时钟/日历电路.提供秒分时日日期。月年的信息,每月的天数和闰年的天数可自动调整时钟操作可通过AM/PM 指示决定采用24 或12 小时格式.DS1302 与单片机之间能简单地采用同步串行的方式进行通信,仅需用到三个接口线:1 RES 复位,2 I/O 数据线,3 SCLK串行时钟。时钟/RAM 的读/写数据以一个字节或多达31 个字节的字符组方式通信。DS1302 工作时功耗很低,保持数据和时钟信息时功率小于1mW。DS1302 是由DS1202 改进而来[2],增加了以下的特性。双电源管脚用于主电源和备份电源供应Vcc1,为可编程涓流充电电源附加七个字节存储器。本设计课题为DS1302采用的时钟芯片是3.2768MHZ的晶振。
图2.3 DS1302封装
光敏开关采用了KC_IRS模块和声敏开关采用了冲击声效传感器。整个模块电路如图2.4所示。
图2.4光敏/声敏控制开关以及LED电路
KC_IRS模块是一种可编程的模拟传感器比较器检测模块[3],可直接代替传统的LM393等类似的比较所检测的模拟电压值。该模块软件设置可调精度、检测围、检测距离、预设检测环境等模式。采用TTL电平输出,低电平有效输出。预设值一经设定,KC_IRS模块永远记录预设值。这种模块的优点是红外类模拟传感器软件设置了滤波防干扰处理。DAT是信号输出引脚,而STG是设置信号输入引脚。通过程序实现在光照强度低于15LUX时,开启路灯。
非运算放大器处理检测环境噪声的冲击声效传感器,声效信号检测稳定。冲击声效传感器提供了一种手段,以添加到项目中的噪声控制和响应噪声,如一个鼓掌的双手。通过主板上的麦克风,该传感器检测到变化的分贝,这将触发一个高电平脉冲被发送通过该传感器的信号管脚。这种变化可以被任何微控制器的I/O引脚所读取。冲击声效传感器的最大探测距离为3米。但是如果你使用在此区域的传感器在当前环境因素里有触发错误的读数,可在该围调节板上电位器以缩短检测围。咪头前级带三极管放大,将放大后的信号送入处理器,进行比较和延时稳定滤波输出,当检测到环境下的冲击声效时,板上红色LED将点亮。若用示波器侦测SIG脚,可查看高脉冲信号。若检测人谈话声,需要调节电位器,可侦测到连续的方波脉冲,同时红色发光管将以当前的声效分贝值进行闪烁,输出信号是数字量,可用程序直接像检测按键一样或用外中断,脉冲计数处理即可。也是类似于光敏开关的作用来控制路灯的开启。
串口电路主要是组成是串口驱动芯片CH340T,本设计以USB作为供电电源。
图2.5串口通信和电源模块电路
CH340T是一个USB总线的转接芯片,实现USB转串口、USB转IrDA红外或者USB转打印口[4]。在串口方式下,CH340T提供常用的MODEM联络信号,用于计算机扩展异步串口,或者将普通的串口设备直接升级到USB总线。而电路所用的电源由USB提供,不需要通变压器把市电或者15V电源源通过LM7805转化为+5V的电压。很方便快捷的通过计算机串口进行调试。
2.6 核心模块PCB图
2.7 主模块PCB图
本系统的软件由集成开发工具KeiluVision专业版开发。软件主程序流程图如图3.1所示[5]。本系统的工作过程大致为:系统开机后,LCD显示屏显示当前时间,对于该系统调试,先设置好当前时间。根据时间设定,这作为开路灯和关路灯的时间参照。再设置开启路灯时间和关闭路灯时间,这些都可以直接在LCD1602上显示。LCD1602相当于一个电子表,总的程序就是围绕着这个时序运转的。在白天,是属于关灯的时间,但是当光照强度低于15LUX的时候,通过光敏开关感应到光强的变化,路灯就自动开启。方便白天川流不息的车辆和行人。也可以在白天人为开启路灯,当有路灯坏了的时候,蜂鸣器会报警而且会在LCD1602上面显示“Lamp Bad”。
在傍晚到了快要开灯的时间,根据之前设定的开灯时间,路灯自动开启路灯,这个时候处于正常照明时间。当晚上十二点的时候,系统自动开启节能模式,这个时候的人和车辆都是很少的,因为这个时候人们普遍都休息了,所以按照之前那样正常照明模式开启全部路灯,很浪费电也很没有必要。所以采用相间隔亮灭的方式来节能,能节约一半的能源。这样不会给道路照明带来大的问题,配合着声敏控制开关,当有行人和车辆经过的时候,声敏开关检测到分贝的变化,就开启因为节能灭掉的灯,这样如前半夜一样,给交通带来方便,当车辆已经过了的时候,灯又会恢复成节能模式。当夜晚有灯坏了的时候,也会如白天一样报警,如果此时有工作人员值班,也能及时的发现问题。可以尽早安排第二天早上去维修,及时排除故障。
此课程设计的创新之处就是白天当关照强度低于15LUX的时候,路灯会自动开启,方便车辆和行人通行[6]。十二点之后的节能模式也是创新点,这个可以节约特别多的能源,并且又不只是那样,通过声敏开关,有行人和车辆经过的时候,系统自动开启,所以完全不会对交通和照明有任何影响,这样做到了节能和方便快捷于一起,符合新型的路灯系统的要求。不足之处是虽然该系统能实现报警,并且可以在1602上面显示,但是只显示有灯泡坏了,没有考虑到城市的路灯那么多,单纯的报警和显示坏了,还是不能精确到哪一盏灯,这给维修和排查带来一些不便,自己将更加完善去实现。
图3.1 主程序流程图
对于每个系统都有其初始程序和模块,系统的初始模块是系统运行的前提。该系统采用的是串行传输数据,将源程序通过串行口下载到单片机中。系统上电后进行复位。随即在1602上面会显示初始设定时钟值,工作人员可以通过“SET”来设定当前时间,按一下是设置当前时间,按两下“SET”,是用来设定定时开路灯的时间,按下三下是设置定时关路灯时间。总共有四个按键,第三个是设置时按键,第四个是设置分按键。
图3.2 初始模式驱动程序流程图
初始化程序流程过程如图3.2 所示。将源程序在Keil中仿真生成HEX文件,把这个文件通过串口电路烧写到单片机中,本设计USB串口既是串口线路,也是电源电路,通过USB供电,以供整个系统运行。LCD1602是整个系统的显示模块,通过显示屏显示当前时间,并设置当前时间、开路灯时间、关路灯时间。
3.2.2 白天系统工作模式驱动程序
图3.3 白天系统工作模式驱动程序流程图
白天系统工作模式是整个系统的运行的有创意的一个点,就是光敏控制开关的那个模块。当清晨,单片机的检测时间到了定时关路灯时间,此时路灯全部关闭。在整个白天时钟运行中,除了工作人员检测是否有灯泡坏了,一般都不会亮灯。当光照强度低于15LUX的时候,通过光敏控制开关,检测到光线强度的变化,系统则自动开启路灯系统。当光照强度又恢复的时候,光敏检测到光照强度超过15LUX时,则关闭路灯。不会造成浪费也会给交通带来更安全的保障。
图3.4 上半夜系统工作模式驱动程序流程图
上半夜的模式就是现在很多城市的普通照明方式,这种方式在上半夜的时候很适用,那个时候的人流量和车流量特别的多。这个时候需要光照特别强,以便于交通安全,此时的交通安全是最重要的,当有路灯坏掉的时候,也会及时报警,这个时候一般情况下还有工作人员在值班,可以通过路况信息提醒广大的司机用户注意安全[8]。
下半夜模式是该设计最大的亮点,和传统的照明模式不同[6]。设计的更加节能化,传统的路灯系统,上半夜和下半夜都是一样的,下半夜的时候其实是人特别需要休息的时候,这个时候的车流量和人流量是很少的,如果仍全部开启路灯,造成了太多的能源浪费,我们现在一直都倡导的是低碳和节能的生活,所以传统的照明模式已经很难满足我们的要求了。所以采用的是在下半夜点亮相间隔的路灯,如点亮一三五七九,而关闭二四六八十,这样不但能节约一半的能源,而且也不会给照明带来大的影响。但是在节能的同时不能给交通带来安全隐患,安全问题是最重要的问题,所以在设计添加了一个声敏控制开关,当有行人和车辆经过的时候,通过道路分贝的变化,声敏开关检测到分贝变化,从而开启节能模式下灭掉的灯,使道路的照明如前半夜一样亮,确保交通安全保障[9]。
图3.5 下半夜系统工作模式驱动程序流程图
该设计接通电源后,会在1602上面显示程序设置初始值,如图4.1所示。通过按下“SET”键,来设定当前时间,如图4.2所示。按下两次“SET”,是设定开灯时间,如图4.3所示。按下三次“SET”来设定关灯时间,如图4.4所示。这些都是系统的初始化,是系统运行的前提。通过对时间的设定,根据对四季不同的光照的强度来设定时间。作为主控制室,1602又相当于一个数字时钟。该设计模块的电源电压是+5V。通过USB来作为电压源。
图4.1 当前时间图 图4.2 设定时间图
图4.3 设定开灯时间图 图4.4 设定关灯时间图
每一个系统都有手动控制开关,这是一个系统最简单的功能,如图4.5所示。通过手动开关,在白天可以通过手动开关开启路灯,看蜂鸣器是否报警和1602是否有“Lamp Bad”的字样,这样的话就知道是否有灯坏了,可以及时派人去维修,不让故障拖延,造成安全隐患。在白天,如果光照低于15LUX时,此时光照强度很暗,此时如果没有工作人员及时开路灯,会是很危险的。通过光敏控制开关,感应光的强度,会及时开启路灯,给道路照明,方便车辆和行人通行,如图4.6所示。到了傍晚的时候,时间到达了定时开路灯的时候,会开启路灯,如图4.7所示。
图4.5 白天手动开灯图 图4.6 白天黑暗天气光敏开关开灯
图4.7 开灯后的正常模式图 图4.8 节能模式图
程序设置在12:00以后,开启节能模式,节能模式就是在传统的照明模式上做的一些小创新,采用相间隔的照明方式。在这之后的下半夜,路上的行人和车流量已经很少了,这个时候再按照传统的照明方式很浪费电。这个时候如果采用相间隔的方式,根据光学的知识和光的照明程度,是不会给照明带来大的问题的。虽然只是简单的相间隔亮灭,但是对于一个很大的城市来说,可以节约一半的能源做到尽可能大的节能,如图4.8所示。
道路安全问题是我们城市路灯最主要的负责的问题,所以不能一味的在强调节能,而忽视了道路安全问题,虽然节能模式下的光照足以供整个城市道路运行,但是还是存在一定的安全隐患。于是设定一个声敏控制开关,当有行人和车辆经过的时候,通过道路分贝的变化反应到声敏中,就会启动节能模式下灭掉的灯。这样可以确保道路足够的明亮来方便行人和车辆安全通行。如图4.9,是有车辆或行人经过的时候,声敏感应到声音变化,然后点亮4.8图下灭掉的路灯。在任何一个模式或时间段下,只要有路灯坏了,系统通过蜂鸣器报警和通过1602显示“Lamp Bad”的字样,如图4.10所示。
图4.9 节能模式下声敏开关开灯图 图4.10 路灯坏了时候1602的显示图
该数控稳压电源主要由单片机STC89C52、LCD1602液晶显示器、按键、电源电路+5V、时钟电路、模拟路灯电路、声敏控制开关、光敏控制开关、报警电路[10]。实验样机如图5.1所示.
图5.1 主要硬件模块组成分块图
(1) 检查电路,看是否有未焊接好的元器件,有的话就焊接好。
(2) 检查电源与地是否有短路的,无短路才可以进行下面的步骤。
(3) 如电源和地正常时才可以通电检测。
(4) 将单片机的主控板和主要应用板想连接。主控板包括单片机的最小系统和串口电路。如图5.1所示,大的模块是主要应用板模块,小的模块是单片机的主控模块。通过两个串接接口连接起来。
图5.3 硬件电路模块图
(5) 连接串口到计算机的USB,通过相应的软件把生成的HEX文件加载到单片机中,按下复位,程序烧写完毕。
(6) 通电,指示灯亮红灯,1602上面有时间初始值和“City Lamp sys”,即城市路灯系统。整个系统是通过USB供电作为电源,为+5V。当检测到这些的时候,说明系统已经是初始化了,可以进行下面的步骤了。
(7) 按下“SET”按键,设定好当前时间,开灯时间和关灯时间。一般情况下,程序会按照这个时间来开关灯。对于光敏和声敏是该系统的外接电路,在操作的过程中,在白天光照强度低于15LUX的时候,光敏开关就会开启路灯。在晚上12:00过后,当有噪声(模拟的行人和车辆的声音),声敏开关就会开启节能模式下灭掉的灯。
5.4 Keil软件中程序仿真图
5.5生成HEX文件图
图5.4 硬件电路模块分区表示图
图5.5 主控电路模块分区表示图
本毕业设计是基于传统的路灯系统上建立起来的,实现了多方式控制路灯,达到节能、报警、高效的方式。结合光敏控制开关可以实现在白天光照强度低于15LUX时开启路灯。声敏控制开关可以实现在下半夜节能模式下,重新点亮路灯。这两种方式都可以开启路灯,给交通带来便利。但是本设计我觉得最大的不足之处就是当有路灯坏了的时候,LCD可以显示有灯坏了,也通过蜂鸣器报警,但是不能精确到那盏灯坏了。这给维修带来了一定的不方便性,因而存在些需要改进的地方。
[1] 蔡美琴, 为民. MCS-51系列单片机系统及其应用[M]. 高等教育, 2004: 13-45.
[2] 建清. 轻松玩转51单片机C语言[M]. 航空航天大学, 2011: 255-269.
[3] 康华光. 电子技术基础 模拟部分[M]. : 高等教育, 1998: 98-123.
[4] 余锡存. 单片机原理与接口技术[M]. : 电子科技大学, 2003: 35-62 .
[5] 杜军, 邱瑞学. PL2101在路灯控制系统中的应用[J]. 国外电子元器件. 2003. 9 :33-34.
[6] 熊涛, 丁辛芳, 德英. 一种新颖的照明控制电路[J]. 传感器技术, 1999, 18 (5): 50-53.
[7] 王海伦, 叶冬芬. 单片机控制的照明智能控制系统[J]. 电气时代, 2005, (1): 121-122.
[8] 谭浩强. C程序设计[M]. : 清华大学, 2007: 145-169.
[9] 严蔚敏, 吴伟明. 数据结构(C)语言版)[M]. : 清华大学, 2010: 256-287.
[10] V. Yu. Teplov, A.V.Anisimov. Thermostatting System Using a Single-Chip Microcomputer and Thermoelectric Modules Based on the Peltier Effect[J] , 2002, 27(6): 67-104.
本次毕业设计的顺利完成,深深的激励着我。从课题的选择到项目的最终完成,是在我的指导老师胡赛纯的亲切关怀和悉心指导下完成的。她严肃的科学态度,严谨的治都始终给予我细心的指导和不懈的支持。老师在学业上给我以精心指导、也特别关注和建议我们去实践和锻炼。在此谨向胡老师致以诚挚的意和崇高的敬意!其次,感通信与电子工程学院实验室的所有老师,感您们给我提供一个设备充足、资料齐全、网络方便的开放性实验室。再次,要感科瑞特的老师们,他们为我的设计提供了很多参考资料,让我能克服一个个困难,并不断完善自己的设计。最后,对培育和教导过我的母校和老师、鼓励和帮助我的所有人再次致以最诚挚的感和最衷心的祝福!
//开灯时间必须大小关灯时间 否则出错
#include
#define uint unsigned int
#define uchar unsigned char
sbit key_b = P2^4;
sbit key_m = P2^5;
sbit key_j = P2^6;//
sbit key_z = P2^7;//-
sbit RS = P1^1;
sbit EN = P1^0;
#define DATA P0
sbit beep = P2^3;
sbit CLK = P2^2;
sbit DAT = P2^1;
sbit CS = P2^0;
sbit RG = P1^3;
sbit Voice = P1^2;
sbit LED1 = P3^6;
sbit check1 = P3^7;
sbit LED2 = P3^4;
sbit check2 = P3^5;
sbit LED3 = P3^2;
sbit check3 = P3^3;
sbit LED4 = P3^0;
sbit check4 = P3^1;
sbit LED5 = P1^6;
sbit check5 = P1^7;
sbit LED6 = P1^4;
sbit check6 = P1^5;
uchar sec,min,hour,on_hour = 17,off_hour = 6,on_min = 20,off_min = 30;
uchar DSsec;
bit FF = 0;
bit key_en;
uchar mode;
bit flag,Vf,bad;
/*********************************************************************************************
备注:以下是DS1302 底层驱动
*********************************************************************************************/
//延时函数
void delay_DS(int num)
{
while(num--);
}
//写一个字节
void write_byte(uchar dat_)
{
uchar i;
CLK = 0;
for(i=0;i<8;i++)
{
DAT = dat_ & 0x01; //取最低位 数据和地址最低位传输
delay_DS(2);
CLK = 1;
delay_DS(2);
CLK = 0;
dat_ >>= 1;
}
}
//读一个字节
uchar read_byte()
{
uchar i,dat_;
for(i=0;i<8;i++)
{
dat_ >>= 1;
if(DAT == 1)
dat_ |= 0x80;
CLK = 1;
delay_DS(2);
CLK = 0;
delay_DS(2);
}
return dat_;
}
//先写地址,再写数据
void write_data(uchar cmd,uchar dat_)
{
CS = 0;
CLK = 0;
CS = 1;
write_byte(cmd);
write_byte(dat_);
CLK = 1;
CS = 0;
}
//先写地址,再读数据
uchar read_data(uchar cmd)
{
uchar dat_;
CS = 0;
CLK = 0;
CS = 1;
write_byte(cmd);
dat_ = read_byte();
CLK = 1;
CS = 0;
// dat_ = ((dat_& 0x7F) >> 4) * 10 + (dat_& 0x0F); //将读出数据转化
return((dat_ / 16) * 10 + ( dat_ % 16)); //十进制返回
// return dat_;
}
//▄︻┻═┳一
uchar asctobcd(uchar cha) //10转16
{
return ((cha / 10) * 16 + (cha % 10));
}
/*********************************************************************************************
函数名:初始DS1302第一工作的时间
调 用:init_set1302()
参 数:无
返回值:无
结 果:
备 注:
*********************************************************************************************/
void init_set1302()
{
DSsec = read_data(0x81);
if(DSsec > 0x59) //读取秒高位为1时 说明时间停止了 则初始化一次开启时钟
{
write_data(0x8e,0x00); //写控制字,取消保护
write_data(0x80,0x53); //秒 秒第七位为0 开启时钟 否则关闭
write_data(0x82,0x56); //分
write_data(0x84,0x16); //时 24小时制
write_data(0x90,0xa5); //a5 R2=2K电阻 a6充电1.075mA 1010 01 10 开启充电 一个二极管 R2=4K电阻
write_data(0x8e,0x80); //控制加保护
}
else
{
write_data(0x8e,0x00); //写控制字,取消保护
write_data(0x80,DSsec); //秒 秒第七位为0 开启时钟 否则关闭
write_data(0x90,0xa5); //a5 R2=2K电阻 a6充电1.075mA 1010 01 10 开启充电 一个二极管 R2=4K电阻
write_data(0x8e,0x80); //控制加保护
}
}
void delay(uint x)
{
uint a,b;
for(a=x;a>0;a--)
for(b=10;b>0;b--);
}
void lcd_write_(uchar ) //些命令,RS=0
{
DATA = ;
RS = 0;
EN = 0;
delay(10);
EN = 1;
delay(10);
EN = 0;
}
void lcd_write_data(uchar dat) //写数据,RS=1
{
DATA = dat;
RS = 1;
EN = 0;
delay(10);
EN = 1;
delay(10);
EN = 0;
}
/*-------------------------------------------
函数名:Set_xy_LCM ()
功 能:设定显示坐标位置
--------------------------------------------*/
void set_xy_lcd(unsigned char x,unsigned char y)
{
unsigned char address;
if(x == 0)
address = 0x80 + y;//第一行
else
address = 0xc0 + y;//第二行
lcd_write_(address);
}
/*-------------------------------------------
函数名:Display_List_Char()
功 能:按指定位置显示一串字符
--------------------------------------------*/
void write_str_lcd(unsigned char x, unsigned char y, unsigned char *s)
{
set_xy_lcd(x,y);
while(*s)
{
lcd_write_data(*s);
s++;
}
}
/************************************************************************************
函数名:按指定位置显示一个字符
调 用:Display_List_Char()
参 数:x:行选择 (0、1) y:列选择(0~15) dat:需要写入LCM的一个数据
返回值:无
结 果:
备 注:
***********************************************************************************/
void write_char_lcd(unsigned char x, unsigned char y, unsigned char dat)
{
set_xy_lcd(x,y);
lcd_write_data(dat);
}
void lcd_init()
{
lcd_write_(0x38);
lcd_write_(0x0c);
lcd_write_(0x06);
}
void delay_nus(unsigned int i) //延时:i>=12 ,i的最小延时单12 us
{
i=i/10;
while(--i);
}
void delay_nms(unsigned int n) //延时n ms
{
n=n+1;
while(--n)
delay_nus(900); //延时 1ms,同时进行补偿
}
void bee()
{
char a;
for(a = 0; a < 50; a ++)
{
beep = ~beep;
delay_nus(100);
}
for(a = 0; a < 100; a ++)
{
beep = ~beep;
delay_nus(50);
}
beep = 1;
}
void key_scan()
{
uchar temp;
if(key_b == 0)
{
bee();
delay_nms(10);
if(key_b == 0)
{
FF = ~FF;
beep = ~beep;
flag = 0;
}
while(~key_b);
}
if(key_m == 0)
{
bee();
delay_nms(10);
if(key_m == 0)
{
if(++ mode == 4)
mode = 0;
if(mode == 0)
write_data(0x8e,0x80); //控制加保护
else
write_data(0x8e,0x00); //写控制字,取消保护
}
while(~key_m);
}
if(key_z == 0)
{
bee();
delay_nms(10);
if(key_z == 0) //min+
{
if(mode == 1) //时间设置
{
if(++ min >= 60)
min = 0;
temp = asctobcd(min);
write_data(0x82,temp);
}
else if(mode == 2) //开灯时间
{
if(++ on_min >= 60)
on_min = 0;
}
else if(mode == 3) //关灯时间
{
if(++ off_min >= 60)
off_min = 0;
}
}
while(~key_z);
}
if(key_j == 0)
{
bee();
delay_nms(10);
if(key_j == 0) //hour +
{
if(mode == 1) //时间设置
{
if(++ hour >= 24)
hour = 0;
temp = asctobcd(hour);
write_data(0x84,temp);
}
else if(mode == 2) //开灯时间
{
if(++ on_hour >= 24)
on_hour = 0;
}
else if(mode == 3) //关灯时间
{
if(++ off_hour >= 24)
off_hour = 0;
}
}
while(~key_j);
}
}
void ON_LED()
{
if(hour >= 0 && hour <= 5) //12点后的时间
{
if(Vf) //检测到声音全亮
{
LED1 = LED2 = LED3 = LED4 = LED5 = LED6 = 0;
}
else //否则间隔点
{
LED1 = LED3 = LED5 = 0;
LED2 = LED4 = LED6 = 1;
}
}
else //否则全亮
{
LED1 = LED2 = LED3 = LED4 = LED5 = LED6 = 0;
}
}
void OFF_LED()
{
if(RG == 0 && hour >= 8 && hour <= 17)
{
LED1 = LED2 = LED3 = LED4 = LED5 = LED6 = 0;
}
else
{
LED1 = LED2 = LED3 = LED4 = LED5 = LED6 = 1;
}
}
void pro()
{
if(FF) //人工开启
{
LED1 = LED2 = LED3 = LED4 = LED5 = LED6 = 0;
if(on_hour < off_hour)
flag = 1;
}
else
{
if(on_hour >= off_hour) //19 > 18
{
if(hour >= on_hour)
{
if(hour == on_hour)
{
if(min >= on_min)
ON_LED();
else
OFF_LED();
}
else
ON_LED();
}
else if(hour <= off_hour) //5 < 6
{
if(hour == off_hour)
{
if(min >= off_min)
OFF_LED();
else
ON_LED();
}
else
ON_LED();
}
else
OFF_LED();
}
else
flag = 1;
}
if(check1 == 1 || check2 == 1 || check3 == 1 || \
check4 == 1 || check5 == 1 || check6 == 1)
{
beep = 0;
bad = 1;
}
else
{
bad = 0;
beep = 1;
}
}
void LCD_dis()
{
if(mode == 0)
{
write_str_lcd(1,0," Time ");// : : ");
if(read_data(0x81) != sec) //每秒刷新
{
sec = read_data(0x81);
min = read_data(0x83);
hour = read_data(0x85);
write_char_lcd(1,8,(hour / 10) + 0x30);
write_char_lcd(1,9,(hour % 10) + 0x30);
write_char_lcd(1,10,0x3a);
write_char_lcd(1,11,(min / 10) + 0x30);
write_char_lcd(1,12,(min % 10) + 0x30);
write_char_lcd(1,13,0x3a);
write_char_lcd(1,14,(sec / 10) + 0x30);
write_char_lcd(1,15,(sec % 10) + 0x30);
}
if(bad == 0) //没有故障时
write_str_lcd(0,0," City Lamp sys ");
else //" Time 24:24:24 ");
write_str_lcd(0,0," Lamp Bad ");
}
else
{
if(flag)
{
write_str_lcd(0,0,"Set time Error! "); //开灯时间必须大于关灯时间 否则出错
write_str_lcd(1,0,"ON hour>OFF hour"); //开灯时间必须大于关灯时间 否则出错
}
else
{
switch(mode)
{
case 1: //" Time 24:24:24");
write_str_lcd(1,0,"Adj time H M ");
write_char_lcd(1,10,(hour / 10) + 0x30);
write_char_lcd(1,11,(hour % 10) + 0x30);
write_char_lcd(1,14,(min / 10) + 0x30);
write_char_lcd(1,15,(min % 10) + 0x30);
break;
case 2: //" Time 24:24:24");
write_str_lcd(1,0,"ON time H M ");
write_char_lcd(1,10,(on_hour / 10) + 0x30);
write_char_lcd(1,11,(on_hour % 10) + 0x30);
write_char_lcd(1,14,(on_min / 10) + 0x30);
write_char_lcd(1,15,(on_min % 10) + 0x30);
break;
case 3: //" Time 24:24:24");
write_str_lcd(1,0,"OFF time H M ");
write_char_lcd(1,10,(off_hour / 10) + 0x30);
write_char_lcd(1,11,(off_hour % 10) + 0x30);
write_char_lcd(1,14,(off_min / 10) + 0x30);
write_char_lcd(1,15,(off_min % 10) + 0x30);
break;
}
}
}
}
void sys_init()
{
TMOD=0x1; //20ms
TH0=0xb1;
TL0=0xe0;
TR0=1;
ET0=1;
EA=1;
}
void main()
{
sys_init();
lcd_init();
init_set1302();
while(1)
{
key_scan();
if(key_en)
{
key_en = 0;
LCD_dis();
}
if(mode == 0)
pro();
}
}
/*********************************************************************************************
函数名:定时器0中断
调 用:元
参 数:无
返回值:无
结 果:
备 注:
*********************************************************************************************/
void timer0(void) interrupt 1
{
static uchar cont;
TH0=0xb1;
TL0=0xe0;
//add your code here.
key_en = 1;
if(Voice)
Vf = 1;
if(Vf)
{
if(++ cont >= 254)
{
cont = 0;
Vf = 0;
}
}
}