单片机课设之光控路灯控制系统
更新时间:2024-04-12 23:23:01 阅读量: 综合文库 文档下载
单片机原理及应用 课程设计(论文)
题 目 光控路灯控制系统 学院名称 电气工程学院
指导教师 职称 讲师 班 级 学 号 学生姓名
2015年9月21日
摘要:随着电子技术的发展,本设计是以AT89S52为主控器的模拟路灯控制系统,具有对路灯的定时设定功能,也可以分别独立控制路灯的开启和关闭;能够同时具有调光功能,对路面的光线进行调整,还可以按设定要求使路灯驱动电源输出功率在20%~100%范围内任意调节。在白天模式的时候,还能根据环境明暗的变化控制路灯的开启和关闭路灯,在夜晚模式的情况下,根据交通路面情况自动开关灯。自制的单元控制器中的LED灯恒流驱动电源,在多数情况下,具有系统稳定,功耗低等特点。
关键词:定时设定 调光
功率调节
ⅰAbstract:With the development of electronic technology, The design is based on the analog controller AT89S52-based street light control systems,which have Street lamp time setting function , controling the opening and closing of the street Separately and Light - adjusting function, According to set requirements street driving power output power in adjustable within 20% ~ 100%. At the time of day mode, According to the environmental changes of light and shade light on and off ; In the case of the night mode, Automatic Switch lamp based on traffic road conditions.Self - made cell controller LED lamp constant current power supply, in most cases, system stability, low power characteristics.
Keywords: Timing settings, Light - adjusting, power regulation,
ⅱ
目 录
引言................................................................................................................................ 1 正文................................................................................................................................ 2
1.光控路灯的设计系统概括................................................................................. 2
1.1工作原理.................................................................................................. 2 1.2系统框架图及性能的要求及特点.......................................................... 2 1.3方案论证.................................................................................................. 3 2.系统硬件及原理图的介绍................................................................................. 5
2.1 单片机介绍............................................................................................. 5 2.2 DS1302时钟芯片 ................................................................................... 9 2.3 1602液晶显示....................................................................................... 11 2.4 光线检测电路....................................................................................... 15 2.5键盘及蜂鸣器电路................................................................................ 17 2.6模拟路灯控制电路................................................................................ 18 3 .软件设计.......................................................................................................... 20
3.1主程序流程图........................................................................................ 20 3.2 按键设定程序的设计........................................................................... 21 4. 系统调试......................................................................................................... 24
4.1硬件调试................................................................................................ 24 4.2软件调试................................................................................................ 24
主要参考文献.............................................................................................................. 25 致谢.............................................................................................................................. 26 附录:程序代码 ............................................................................................................ 27
1. 主程序............................................................................................................. 27 2. 1602显示程序................................................................................................. 33 3. DS1302时钟程序 ........................................................................................... 38 4. SET_ONTIME.H ............................................................................................. 45 5. Keyfunction.h................................................................................................... 56
ⅲ
南华大学电气工程学院课程设计(论文)
引 言
随着我国城市的发展、经济的繁荣、社会的进步和人们提高生活水平及环境质量的要求,城市道路照明和城市的夜景照明已经成为城市规划、建设和管理中的一项重要工作。城市道路照明是方便城市居民必备的生活条件,而城市的夜景照明是再塑和美化城市形象、鼓舞民心、振奋精神的一项非常有意义的工作。 近几年来,全国许多大城市、甚至一些中小城市的各级领导,都格外重视道路照明和夜景照明工作。城市亮化作为形象工程的重要组成部分,越来越被政府所重视,大量的资金投入进行建设和改造,使得我们的城市夜晚变得灯火辉煌,绚丽多彩,但问题也随之而来,能耗的逐年攀升,由此产生的某些问题亦逐渐显露出来,如城市路灯的维护量增大,带来人员不足;维护费用增加,社会成本过高,电费支出过多,财政承担相对困难;光污染现象严重等等,这些问题的产生无疑给当地的路灯管理部门的各方面工作带来很大的压力,急切加以解决。尤其是在当前环境条件每况愈下的形势下,低碳、节能、环保越来越收到人们的重视。 旧式的控制系统存在功耗大,公共资源得不到充分应用,效率低等消极影响。伴随着微电子技术的发展和单片机技术在各行各业中的应用,由于单片机具有集成度高,处理能力强,可靠性高,系统结构简单,价格低廉的优点,因此在路灯照明工程中被广泛应用。单片机技术中的计时系统是单片机在的一个典型的应用。通过计时系统来对时间进行有效的控制。在路灯设计的定时系统中将得到更好的应用。近几十年来,基于单片机的路灯智能控制系统对城市路灯系统进行全面的升级,不仅实现了智能控制,而且降低了运行成本。因此,智能路灯控制系统的推广,可以改变城建系统企业传统的管理服务方式,提高服务效率,并对提高城市形象起到了极大的推动作用。
路灯已经成为一个城市的照明系统中不可分割和替代的一部分,在城市照明中发挥着举足轻重的作用,而其所依靠的就是路灯自动控制系统。路灯的自动控制方便了工作人员的管理。本系统实用性强、操作简单,附带了周围环境检测功能,可以根据周围环境亮度开启和关闭路灯。
第1页 /共68页
南华大学电气工程学院课程设计(论文)
正 文
1. 光控路灯的设计系统概括
1.1工作原理
本设计是以光敏电阻可以根据外界光线的强度而改变自身阻值的特性(光线越强,阻值越小;光线越弱,阻值越大)为基础设计的光控路灯自动化控制系统。其原理是利用光敏电阻感受外界光线强度并体现在自身阻值的变化上,然后根据这一阻值的大小来判断外界的光线亮度情况,然后根据所得数据判断LED是该亮起还是该灭掉。
1.2系统框架图及性能的要求及特点
图1.1 系统的框图结构
此图采用STC89C52为主控芯片进行设计,时钟芯片为DS1302,液晶为1602,其需要实现的功能为:
(1) 根据控制技术的特点,进行路灯系统设计的整体研究与设计。 (2) 根据光线的明暗,光线暗时自动开灯,光线亮时自动关灯。
第2页 /共68页
南华大学电气工程学院课程设计(论文)
(3) 通过按键可对相关的参数值进行设置,从而实现定时开关灯。 (4) 在午夜之后降低电压以调节路灯亮度,实现调压。 (5) 在午夜之后实现隔一亮一效果,避免浪费电资源。
1.3方案论证
1.3.1 中央控制模块
方案一:采用单片机控制,利用以C51系列为核心的单片机系统控制两盏LED开关灯时间,利用单片机的内部时钟与外部中断能够满足系统设计要求,且成本较低,适合路灯系统的大规模建设。
方案二:采用AVR单片机控制,AVR单片机是ATMEL公司研制开发的一种新型单片机,运行速度快,内部资源丰富,驱动能力强,具备多种独立的时钟分频器。但是在本系统设计中,如果选择AVR单片机则造成单片机的资源浪费。 方案三:用可编程逻辑器件FPGA作为控制器,FPGA可以实现各种复杂的逻辑功能、规模大、密度高、体积小、稳定性高、IO资源丰富、易于进行功能扩展。采用并行的输入输出方式,提高了系统的处理速度,适合作为大规模控制系统的控制核心。但本系统不需要复杂的逻辑功能,对数据的处理速度的要求也不是非常高。且从使用、功耗及经济的角度考虑放弃此方案。 综合以上各方案优点分析,最后确定选择方案一。
1.3.2显示模块
方案一:LED数码显示,控制起来比较简单,编程也不是很难,但是在实际电路中,焊接比较烦琐,占用空间大,对人眼有一定的损害,还要有相应的蕊片组合,占用资源等。
方案二:LED点阵显示,LED点阵显示虽然能显示字符和数字,但显示效果不好,且不易编程。
方案三:LCD液晶显示,LCD液晶不但能显示字符和数字,而且显示效果较好,对人眼损害很弱,再次LCD又是一种节能灯,功耗小,使用寿命长等优点,不需要外加蕊片组合,可以直接与单片机连接,容易编程实现,使用起来十分方
第3页 /共68页
南华大学电气工程学院课程设计(论文)
便,有长远的价值。
综合以上各方案优缺点分析,本设计不需要强大的汉字显示,也没有复杂的系统显示,最终选择方案三。
1.3.3光线感应模块
方案一:采用光敏电阻对光源的感应改变自身电阻,由电压比较器提取之间电压,考虑到电阻变化的灵敏度,采用两个光敏电阻串联的方式,通过改变与光敏电阻串联的电位器的值可以调节光敏电阻的感光范围。另外考虑到现实中光控制技术的运用已经证明了光敏电阻完全可以达到要求,且价格便宜,电路简单。 方案二:采用光敏二极管感受外届光照变化,无光照时,有很小的饱和反向漏电流,二极管截止;光照时反向电流增大,形成光电流。 综合以上各方案优缺点分析,最终选择方案一。
1.3.4时钟模块
方案一:采用专用的时钟芯片,现在流行的时钟芯片电路很多,如DS1302、DS1307等。它的优点是可以单独使用,直接将时钟信息存储在时钟芯片中,利用时钟芯片自带的定时器定时,中央控制模块读取该时钟芯片时钟信息,节省其系统资源,精度较高。其缺点是占用单片机IO口资源,而且在读写串行口的内容时,消耗了其运行时间。
方案二:利用555定时器组建定时模块555,555定时器具有成本低,性能可靠等优势,虽然能够做到精确定时但不具备储存时间信息的能力。
方案三:采用单片机内置时钟振荡及定时器构件时钟平台,该方案直接利用单片机内置定时器,通过定时器的中断和简单运算实现时钟功能。不过其没有外置电路,充分利用了单片机的定时器功能,实施简洁方便,主要缺点是死机或断电后,需要人工重新设定。
综合以上各方案优缺点分析,又考虑到单片机的IO口足够,故选用方案一。 1.3.5按键控制模块
方案一:都采用轻触按键。
第4页 /共68页
南华大学电气工程学院课程设计(论文)
2.系统硬件及原理图的介绍
2.1 单片机介绍
2.1.1 STC89C52简介
STC89C52是一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash 存储器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。 具有以下标准功能: 8k字节Flash,512字节RAM, 32 位I/O 口线,看门狗定时器,内置4KB EEPROM,MAX810复位电路,三个16 位 定时器/计数器,一个6向量2级中断结构,全双工串行口。另外 STC89C52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。最高运作频率35Mhz,6T/12T可选。
第5页 /共68页
南华大学电气工程学院课程设计(论文)
图2.1 STC89C52的电路连接图
2.1.2 STC89C52的工作原理
图2.1为STC89C52连接所有原器件总的电路连接图,该图实现了由光敏电阻感受光线强度,当电线到达一定程度时,电阻阻值达到临界值,把信息传递给单片机,由单片机来控制路灯的亮与灭;通过按键,把输入的信息传递给单片机,由单片机控制时钟DS1302来定时,通过单片机,把信息传递给液晶显示屏,由液晶显示屏显示当前的时间,以及定时的时间,再把时钟设定的亮灯与灭灯的时间传递给单片机,由单片机来控制路灯的亮与灭, STC89C52单片机的引脚说明 a)VCC:供电电压。 b)GND:接地。
c)P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
第6页 /共68页
南华大学电气工程学院课程设计(论文)
d)P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。
e)P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
f)P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。 g)I/O口作为输入口时有两种工作方式,即所谓的读端口与读引脚。读端口时实际上并不从外部读入数据,而是把端口锁存器的内容读入到内部总线,经过某种运算或变换后再写回到端口锁存器。只有读端口时才真正地把外部的数据读入到内部总线。上面图中的两个三角形表示的就是输入缓冲器CPU将根据不同的指令分别发出读端口或读引脚信号以完成不同的操作。这是由硬件自动完成的,不需要我们操心,1然后再实行读引脚操作,否则就可能读入出错,为什么看上面的图,如果不对端口置1端口锁存器原来的状态有可能为0Q端为0Q^为1加到场效应管栅极的信号为1,该场效应管就导通对地呈现低阻抗,此时即使引脚上输入的信号为1,也会因端口的低阻抗而使信号变低使得外加的1信号读入后不一定是1。若先执行置1操作,则可以使场效应管截止引脚信号直接加到三态缓冲器中实现正确的读入,由于在输入操作时还必须附加一个准备动作,所以这类I/O口被称为准双向口。89C51的P0/P1/P2/P3口作为输入时都是准双向口。
第7页 /共68页
南华大学电气工程学院课程设计(论文)
图2.2晶振电路
晶振的负载电容=[(Cd*Cg)/(Cd+Cg)]+Cic+△C式中Cd,Cg为分别接在晶振的两个脚上和对地的电容,Cic(集成电路内部电容)+△C(PCB上电容)经验值为3至5pf。
2.1.3晶振电路的作用
电容大小没有固定值,一般二三十P,如图3.2中使用的是30P,晶振是给单片机提供工作信号脉冲的。这个脉冲就是单片机的工作速度。比如12M晶振,单片机工作速度就是每秒12M,和电脑的CPU概念一样,图3.2中用的是11.0592M晶振。当然,单片机的工作频率是有范围的,不能太大,一般24M就不上去了,不然不稳定。 2.1.4晶振电路的原理
晶振是晶体振荡器的简称,在电气上它可以等效成一个电容和一个电阻并联再串联一个电容的二端网络,电工学上这个网络有两个谐振点, 以频率的高低分其中较低的频率是串联谐振,较高的频率是并联谐振。由于晶体自身的特性致使这两个频率的距离相当的接近,在这个极窄的频率范围内,晶振等效为一个电感,所以只要晶振的两端并联上合适的电容它就会组成并联谐振电路。这个并联谐振电路加到一个负反馈电路中就可以构成正弦波振荡电路,由于晶振等效为电感的频率范围很窄,所以即使其他元件的参数变化很大,这个振荡器的频率也不
第8页 /共68页
南华大学电气工程学院课程设计(论文)
会有很大的变化。
2.2 DS1302时钟芯片
时钟模块主要功能是时间设置,主要由DS1302芯片实现,它通过串行方式与单片机进行数据传递,能够向单片机提供包括秒、分、时、日、月、年等在内的实时时间信息,并可对月末日期、闰年天数自动调整;它还拥有用于主电源和备份电源的双电源引脚,在主电源关闭的情况下,也能保持时钟的连续运行。另外,它还能提供31字节的用于高速数据暂存的RAM。鉴于上述特点,DS1302已在许多单片机系统中得到应用,为系统提供所需的实时时钟信息。 DS1302 是DALLAS 公司推出的涓流充电时钟芯片,内含有一个实时时钟/日历和31 字节静态RAM,通过简单的串行接口与单片机进行通信实时时钟/日历电路.提供秒分时日日期.月年的信息,每月的天数和闰年的天数可自动调整时钟操作可通过AM/PM 指示决定采用24 或12 小时格式.DS1302 与单片机之间能简单地采用同步串行的方式进行通信,仅需用到三个口线:1 RES 复位,2 I/O 数据线,3 SCLK串行时钟.时钟/RAM 的读/写数据以一个字节或多达31 个字节的字符组方式通信.DS1302 工作时功耗很低,保持数据和时钟信息时功率小于1mW.DS1302 是由DS1202 改进而来,增加了以下的特性.双电源管脚用于主电源和备份电源供应Vcc1,为可编程涓流充电电源附加七个字节存储器.它广泛应用于电话传真便携式仪器以及电池供电的仪器仪表等产品领域。如图2.3为DS1302时钟电路图:
第9页 /共68页
南华大学电气工程学院课程设计(论文)
图2.3 DS1302电路图
2.2.1 DS1302的工作原理
DS1302工作时为了对任何数据传送进行初始化,需要将复位脚(RST)置为高电平且将8位地址和命令信息装入移位寄存器。数据在时钟(SCLK)的上升沿串行输入,前8位指定访问地址,命令字装入移位寄存器后,在之后的时钟周期,读操作时输出数据,写操作时输出数据。时钟脉冲的个数在单字节方式下为8+8(8位地址+8位数据),在多字节方式下为8加最多可达248的数据。 图2.3为DS1302与STC89C52单片机连接的电路图,当给VCC2加入5V电源时,时钟芯片启动,此时有系统时间;关掉电源时,有后备电源VCC1,以至于使时钟能够连续运行,保持时间和日期数据。当下一次打开电源时,保证时间和当前的时间一样。 2.2.2 DS1302的引脚说明
图2.3显示出DS1302的引脚排列,其中Vcc1为后备电源,Vcc2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行,保持时间和日期数据。DS1302工作于Vcc1和Vcc2两者中的较大者供电。当Vcc2比Vcc1高0.2V时,Vcc2给DS1302供电。当Vcc1高于Vcc2时,DS1302由Vcc1供电。X1和X2是振荡源,与标准的32.768KHz石英晶体连接。DS1302也可以被外部的32.768kHz震荡器驱动。这种配置下,X1与外部震荡信号连接,X2悬浮。GND电源接地。RST是复位/片选线,此管脚内部有一个40K的下拉电阻连接倒地,通过把RST输入驱动
第10页 /共68页
南华大学电气工程学院课程设计(论文)
置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电路运行时,在VCC远大于2.5V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为三线接口的双向数据管脚, SCLK始终是输入端,SCLK用来同步串行接口上的数据动作。
2.3 1602液晶显示
1602液晶显示的原理是利用液晶的物理特性,接通电源,对其显示区域进行控制,只要通了电就有显示,从而显示出图形。该1602液晶显示具有厚度薄、适用于大规模集成电路直接驱动,它是数字式的,和单片机的借口简单可靠,操作更加方便,液晶显示器每一个点再接收到信号后就一直保持那种色彩和亮度,恒定发光,液晶显示器画质高且不会闪烁;并且体积较小,重量较轻,耗电量也比其它显示器要少得多。
第11页 /共68页
南华大学电气工程学院课程设计(论文)
图2.4 LCD1602液晶显示连接图
2.3.1液晶引脚说明
表2.1 LCD1602引脚功能表
编号 1 2 3 4 5 6 7 8
符号 VSS VDD VL RS R/W E D0 D1
引脚说明 电源地 电源正极 液晶显示偏压 数据/命令选择 读/写选择 使能信号 数据 数据
编号 9 10 11 12 13 14 15 16
符号 D2 D3 D4 D5 D6 D7 BLA BLK
引脚说明 数据 数据 数据 数据 数据 数据 背光源正极 背光源负极
第1脚:VSS为地电源。 第2脚:VDD接5V正电源。
第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比
第12页 /共68页
南华大学电气工程学院课程设计(论文)
度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。
第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。 第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。 第7~14脚:D0~D7为8位双向数据线。 第15脚:背光电源5.5V正电压。 第16脚:背光电源负极。 2.3.2液晶屏中的字符显示
用LCD显示一个字符时比较复杂,因为一个字符由6乘8或8乘8点阵组成,既要找到和显示屏幕上某几个位置对应的显示RAM区的8字节,还需要使每个字节的不同位为1,其它的为0,为1的点亮,为0的不点亮。这样一来就组成了某个字符。但由于内带字符发生器的控制器来说,显示字符就比较简单了,可以让控制器工作在文本方式,根据在LCD上开始显示的行列号及每行的列数找出显示RAM对应的地址,设立光标,在此送上该字符对应的代码就好了。 2.3.3 LCD1602的指令说明及时序
LCD1602液晶模块内部的控制器共有11条控制指令,如表所示:
第13页 /共68页
南华大学电气工程学院课程设计(论文)
表2.2 控制指令表
序号 指令 RS R/W
D7 D6 D5 D4 D3 D2 D1 D0
1 2 3 4 5
清显示 光标返回 置输入模式 显示开/关控制 光标或字符移位
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 1
0 0 0 1 S/C
0 0 1 D R/L F
0 1
1 *
I/D S C *
B *
6 置功能 0 0 0 0 1 DL
N * *
7 8 9 10
置字符发生存贮器地址 置数据存贮器地址 读忙标志或地址 写数到CGRAM或DDRAM
0 0 0 1
0 0 1 0
0 1 BF
1 字符发生存贮器地址
显示数据存贮器地址 计时器地址
要写的数据内容
11 从CGRAM或DDRAM读1 数
1 读出的数据内容
指令1:清显示,指令码01H,光标复位到地址00H位置。 指令2:光标复位,光标返回到地址00H。
指令3:光标和显示模式设置 I/D:光标移动方向,高电平右移,低电平左移 S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。 指令4:显示开关控制。 D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示 C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。
指令5:光标或显示移位 S/C:高电平时移动显示的文字,低电平时移动光标。 指令6:功能设置命令 DL:高电平时为4位总线,低电平时为8位总线 N:低电平时为单行显示,高电平时双行显示 F: 低电平时显示5x7的点阵字符,高电
第14页 /共68页
南华大学电气工程学院课程设计(论文)
平时显示5x10的点阵字符。
指令7:字符发生器RAM地址设置。 指令8:DDRAM地址设置。
指令9:读忙信号和光标地址 BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。 指令10:写数据。 指令11:读数据。 2.3.4液晶工作原理
由上图3.3液晶显示1602与单片机的连接图,把时钟存入单片机中的当前的时间以及定时的时间由单片机传递给1602液晶显示屏,由液晶显示屏显示出来。
2.4 光线检测电路
2.4.1 光敏电阻工作原理
光敏电阻器是利用半导体的光电效应制成的一种电阻值随入射光的强弱而改变的电阻器;入射光强,电阻减小,入射光弱,电阻增大。光敏电阻器一般用于光的测量、光的控制和光电转换(将光的变化转换为电的变化)。常用的光敏电阻器硫化镉光敏电阻器,它是由半导体材料制成的。光敏电阻器的阻值随入射光线(可见光)的强弱变化而变化,在黑暗条件下,它的阻值(暗阻)可达1~10M欧,在强光条件(100LX)下,它阻值(亮阻)仅有几百至数千欧姆。光敏电阻器对光的敏感性(即光谱特性)与人眼对可见光(0.4~0.76)μm的响应很接近,只要人眼可感受的光,都会引起它的阻值变化。设计光控电路时,都用白炽灯(小电珠)光线或自然光线作控制光源,使设计大为简化。
光敏电阻的工作原理是基于内光电效应。在半导体光敏材料两端装上电极引线,将其封装在带有透明窗的管壳里就构成光敏电阻,为了增加灵敏度,两电极常做成梳状。用于制造光敏电阻的材料主要是金属的硫化物、硒化物和碲化物等半导体。通常采用涂敷、喷涂、烧结等方法在绝缘衬底上制作很薄的光敏电阻体。
第15页 /共68页
南华大学电气工程学院课程设计(论文)
图2.5 光线检测电路
当光线强的时候,光敏电阻的阻值变大,由于总电压不变,以至于光敏电阻分压变大,“+”端电压高于“—”端电压,输出管截止,从而路灯不亮;当光线暗的时候,光敏电阻的阻值变小,以至于光敏电阻分压变小,“+”端电压低于“—”端电压,输出管导通,使路灯变量。 2.4.4 LM339工作原理
LM339电压比较器芯片内部装有四个独立的电压比较器,是很常见LM339引脚图的集成电路。利用lm339可以方便的组成各种电压比较器电路和振荡器电路。 LM339类似于增益不可调的运算放大器。每个比较器有两个输入端和一个输出端。两个输入端一个称为同相输入端,用“+”表示,另一个称为反相输入端,用“-”表示。用作比较两个电压时,任意一个输入端加一个固定电压做参考电压(也称为门限电平,它可选择LM339输入共模范围的任何一点),另一端加一个待比较的信号电压。当“+”端电压高于“-”端时,输出管截止,相当于输出端开路。当“-”
第16页 /共68页
南华大学电气工程学院课程设计(论文)
端电压高于“+”端时,输出管饱和,相当于输出端接低电位。两个输入端电压差别大于10mV就能确保输出能从一种状态可靠地转换到另一种状态,因此,把LM339用在弱信号检测等场合是比较理想的。LM339的输出端相当于一只不接集电极电阻的晶体三极管,在使用时输出端到正电源一般须接一只电阻(称为上拉电阻,选3-15K)。选不同阻值的上拉电阻会影响输出端高电位的值。因为当输出晶体三极管截止时,它的集电极电压基本上取决于上拉电阻与负载的值。另外,各比较器的输出端允许连接在一起使用。 2.4.5 LM339的参数
(1)电压失调小,一般是2mV;
(2)共模范围非常大,为0v到电源电压减1.5v; (3)他对比较信号源的内阻限制很宽;
(4)LM339 vcc电压范围宽,单电源为2-36V,双电源电压为±1V-±18V; (5)输出端电位可灵活方便地选用。
(6)差动输入电压范围很大,甚至能等于vcc;
2.5键盘及蜂鸣器电路
该电路的主要器件有按键、三极管、电阻、蜂鸣器。
第17页 /共68页
南华大学电气工程学院课程设计(论文)
图2.6 键盘及蜂鸣器电路
2.5.1工作原理
当单片机检测到有按键按下时,单片机会通过P3.7引脚输出低电平,进而三极管导通,从而蜂鸣器导通发出声音。
2.6模拟路灯控制电路
该电路主要由三极管,电阻,LED灯组成。
第18页 /共68页
南华大学电气工程学院课程设计(论文)
图2.7 模拟路灯控制系统
2.6.1工作原理
单片机收到路灯控制信息是,单片机P1.0、P1.1、P1.2、P2.2、P2.3输出控制信号,进而控制三极管的到同于截止,从而控制灯的亮灭。
第19页 /共68页
南华大学电气工程学院课程设计(论文)
3 .软件设计
3.1主程序流程图
图3.1 主程序流程图
主程序设计 主函数 void main() {
init_main();
while(1)
第20页 /共68页
{
Key_scan();
南华大学电气工程学院课程设计(论文)
Play_nowtime(); Time_compare(); Light(); } }
3.2 按键设定程序的设计
图3.2 按键设定程序流程图
按键程序
uchar init1[] ={0x00,0x00}; //开关灯时间数据修改后的十位个位缓存
uchar code str4[]=\ %uchar code str3[]=\ \
第21页 /共68页
南华大学电气工程学院课程设计(论文)
uchar bj_time[] ={0x00,0x30,0x18}; //ON uchar bj_time1[] ={0x00,0x00,0x05}; //OFF //开关灯秒,分,时的缓存 sbit K1 = P3^0; sbit K2 = P3^1; sbit K3 = P3^2; sbit K4 = P3^3; sbit BEEP = P3^7;
bit hour=0,min=0,sec=0,hour1=0,min1=0;
bit year=0,month=0,day=0,week=0; uchar count = 0; //开关灯数据的十进制缓存
/**********************************************************/ /* 蜂鸣器响一声 */ /**********************************************************/ /******************************************************************************/
void Delay(int num){//延时函数 }
while(num--) ;
/******************************************************************************/ void beep() {
unsigned char a;
for(a=100;a>0;a--){//声音长度
BEEP = ~BEEP;
第22页 /共68页
南华大学电气工程学院课程设计(论文)
}
}
Delay(50);//音调设置延时
BEEP = 1;//拉高
第23页 /共68页
南华大学电气工程学院课程设计(论文)
4. 系统调试
4.1硬件调试
首先检查实物电路中各个焊点的焊接情况以及电线的连接情况,在保证没有问题后进行通电检查。
4.2软件调试
软件调试主要是程序的调试,本设计采用的是C语言的编程方式,根据设计要示编写程序,并在软件中进行程序编写调试,确定编写上没有错误后,再进行系统的调试。C语言编写的程序有许多优越性: a)不懂得单片机的指令集,也能够编写单片机程序;
b)无须懂得单片机的具体硬件,也能够编写符合硬件实际的专业水平的程序; c)C语言对数据进行了许多专业处理,避免了运行中间异步的破坏等。
第24页 /共68页
南华大学电气工程学院课程设计(论文)
主要参考文献
[1].吴国经.单片机应用技术.北京:中国电力出版社,2003. [2].阎石.数字电子技术基础.北京:高等教育出版社,2006 [3].谭浩强.C程序设计.北京:清华大学出版社,2005年.
[4].项新建.城镇路灯智能控制系统的研究[J].仪器仪表学报,2006(6):1998-2000 [5].康华光.电子技术基础(模拟部分.数字部分第五版)[M].北京:高等教育出版社,2004.4 [6].李东生.张勇.许四毛.Prote199se电路设计教程.电子工业出片社.2008,3
第25页 /共68页
南华大学电气工程学院课程设计(论文)
致 谢
在整个设计过程中,我遇到了大量的问题。比如说,所要用到的元器件找不到、编程有错误等。但是在老师及同学们的无私帮助下,这些问题都得到了及时的解决。同时,我要特别感谢我的指导老师曾老师,他从开始选题的时候就开始对我进行不懈的指导,帮我剖析设计思路,同时,不断地检查我们的论文进度,督促我们更好更快的完成。在此,向曾老师表示最诚挚的谢意。同时也要感谢几位同学,他们在设计的各个阶段给了我很多帮助和建议。
总之,通过这次课程设计,我深刻体会到要做好一个完整的事情,需要有系统的思维方式和方法,对待将要解决的问题,要有耐心、要善于运用已懂的资源来充实自己。同时我也深刻的认识到,在对待一个新的事物时,一定要从它的整体考虑,完成一步之后再做下一步,这样才能更加有效。
第26页 /共68页
南华大学电气工程学院课程设计(论文)
附录:程序代码
1. 主程序
#include
uchar timecount=0,pwmcount=0; //定时器用 sbit light = P2^1;
bit Timeflag = 0,pwm_flag = 0; //进入开关时间段标志 void Light() {
if(Timeflag == 0) {
if(light == 1) { }
LED1 = 0; //亮 LED2 = 0;
LED3 = 0; LED4 = 0; LED5 = 0;
on_flag = 1;
else
{
第27页 /共68页
南华大学电气工程学院课程设计(论文)
}
}
}
LED1 = 1; //灭 LED2 = 1;
LED3 = 1; LED4 = 1; LED5 = 1;
on_flag = 0;
/**********************************************************/ // 主函数的初始化
/**********************************************************/ void init_main() {
TMOD=0x11;
TH0=0x4c; //0x0EC; TL0=0x00; //0x78;
TH1=0x0FF; TL1=0x9C;
EA=1;
ET0=1;ET1=1; TR0=1; TR1=1;
init_lcd(); //初始化LCD1602 }
/*********************************************************/ // 时间比较
/*********************************************************/
第28页 /共68页
init_ds1302();
南华大学电气工程学院课程设计(论文)
void Time_compare() {
if(alarm_flag) {
if(init[2]==bj_time[2]) {
if(init[1]==bj_time[1])
{ }
if(init[0]==bj_time[0]) }
{
LED1 = 0; //亮 LED2 = 0; LED3 = 0; LED4 = 0; LED5 = 0; on_flag = 1; Timeflag = 1;
}
if(init[2]==bj_time1[2]) {
if(init[1]==bj_time1[1])
{
if(init[0]==bj_time1[0]) {
pwm_flag = 0;
LED1 = 1; //灭
第29页 /共68页
南华大学电气工程学院课程设计(论文)
}
}
LED2 = 1;
LED3 = 1; LED4 = 1; LED5 = 1;
on_flag = 0;
Timeflag = 0;
} }
if(init[2] == 0x00)
{
if(init[1] == 0x00)
{ }
if(init[0] == 0x00) }
{
LED1 = 0; //亮 LED2 = 1; LED3 = 0; LED4 = 1; LED5 = 0; //on_flag = 1; Timeflag = 1;
}
if(init[2] == 0x00)
{
第30页 /共68页
南华大学电气工程学院课程设计(论文)
if(init[1] == 0x00)
{ }
if(init[0] == 0x01) }
{
pwm_flag = 1; Timeflag = 1;
} }
/**********************************************************/ // 主函数
/**********************************************************/ void main() {
init_main();
while(1)
{
Key_scan(); Play_nowtime(); Time_compare(); Light(); } }
/**********************************************************/ // Time0中断服务函数
/**********************************************************/
第31页 /共68页
南华大学电气工程学院课程设计(论文)
void Time0(void) interrupt 1 using 0 { }
/**********************************************************/ // Time1中断服务函数
/**********************************************************/ void Time1(void) interrupt 3 using 0 {
TH1=0x0FF; //5ms定时 TL1=0x9C; pwmcount++;
if(timecount>9) {
timecount=0;
flag=~flag; //500ms
TH0=0x4c; //5ms定时 TL0=0x00; timecount++;
}
if(pwm_flag == 1)
{
if(pwmcount == 8)
{
LED1 = 0; //亮 LED2 = 1; LED3 = 0; LED4 = 1;
第32页 /共68页
南华大学电气工程学院课程设计(论文)
LED5 = 0;
}
if(pwmcount == 10) {
pwmcount = 0;
LED1 = 1; //灭 LED2 = 1; LED3 = 1; LED4 = 1; LED5 = 1;
} } }
2. 1602显示程序
#define uchar unsigned char #define uint unsigned int
#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();}; sbit LCD_RS = P2^4; sbit LCD_RW = P2^5; sbit LCD_EN = P2^6;
uchar code str1[]=\ - - Week: \ uchar code str2[]=\ \
uchar code mytab1[8] = {0x0e,0x11,0x11,0x11,0x0a,0x1f,0x04,0x00};//小灯泡 uchar code mytab[8] = {0x0e,0x1f,0x1f,0x1f,0x0e,0x1f,0x04,0x00};//亮的小灯泡 void delay1(int ms) {
第33页 /共68页
南华大学电气工程学院课程设计(论文)
unsigned char y; while(ms--) {
for(y = 0; y<250; y++) { _nop_(); _nop_(); _nop_(); _nop_(); } } }
/******************************************************************/ /*检查LCD忙状态 */ /*lcd_busy = 1,忙,等待,lcd_busy = 0,空闲 */
/******************************************************************/ bit lcd_busy()
{ bit result; LCD_RS = 0; LCD_RW = 1; LCD_EN = 1; delayNOP();
result = (bit)(P0&0x80); LCD_EN = 0; return(result); }
/******************************************************************/
第34页 /共68页
南华大学电气工程学院课程设计(论文)
/*写指令到LCD */ /*RS=L,RW=L,E=高,D0-D7=指令码 */
/******************************************************************/ void lcd_wcmd(uchar cmd) { while(lcd_busy()); LCD_RS = 0; LCD_RW = 0; LCD_EN = 0; _nop_(); _nop_(); P0 = cmd; delayNOP(); LCD_EN = 1; delayNOP(); LCD_EN = 0; }
/******************************************************************/ /*写数据到LCD */ /*RS=H,RW=L,E=高脉冲,D0-D7=数据 */
/******************************************************************/ void lcd_wdat(uchar dat) { while(lcd_busy()); LCD_RS = 1; LCD_RW = 0; LCD_EN = 0; P0 = dat;
第35页 /共68页
南华大学电气工程学院课程设计(论文)
delayNOP(); LCD_EN = 1; delayNOP(); LCD_EN = 0; }
/******************************************************************/ /* 写字符串到LCD */
/******************************************************************/ void write_str(uchar addr,uchar *p) {
uchar i=0; lcd_wcmd(addr); while(p[i]!='\\0') {
lcd_wdat(p[i]); i++; } }
/*********************************************************/ /* 设定显示位置 */
/*********************************************************/ void write_position(uchar row,uchar col) {
uchar place; if(row==1) {
place=0x80+col-1; lcd_wcmd(place);
第36页 /共68页
南华大学电气工程学院课程设计(论文)
} else {
place=0xc0+col-1; lcd_wcmd(place); } }
/*********************************************************/ /*自定义字符写入CGRAM */ /*********************************************************/ void writetab() {
unsigned char i;
lcd_wcmd(0x40); //写CGRAM for (i = 0; i< 8; i++) lcd_wdat(mytab[i]); for (i = 0; i< 8; i++) lcd_wdat(mytab1[i]); }
/******************************************************************/ /* LCD初始化 */
/******************************************************************/ void init_lcd() {
delay1(15);
lcd_wcmd(0x01); //清屏
lcd_wcmd(0x38); //16*2显示,5*7点阵,8位数据
第37页 /共68页
南华大学电气工程学院课程设计(论文)
delay1(5);
lcd_wcmd(0x38); delay1(5);
lcd_wcmd(0x38); delay1(5);
lcd_wcmd(0x0c); //显示开,关光标 delay1(5);
lcd_wcmd(0x06); //移动光标 delay1(5);
lcd_wcmd(0x01); //清屏 delay1(5);
write_str(0x80,str1); //年月日提示
write_str(0xc0,str2); //时间提示 }
writetab();
3. DS1302时钟程序
sbit reset = P3^6; sbit sclk = P3^4; sbit io = P3^5; bit flag = 1;// 闪烁标志 bit on_flag = 0;//亮灯标志 bit alarm_flag = 1;//时控灯开关
uchar init2[] ={0x00,0x57,0x20,0x03,0x04,0x04,0x14}; // 初始值 //秒分时日月周年
uchar init [] ={0x00,0x00,0x00,0x00,0x00,0x00,0x00}; //当前时间缓存
/**********************************************************/
第38页 /共68页
南华大学电气工程学院课程设计(论文)
// 写一个字节到DS1302
/**********************************************************/ void write_byte(uchar inbyte) {
uchar i; for(i=0;i<8;i++) {
sclk=0; if(inbyte&0x01) io=1; else io=0;
sclk=1; _nop_();
inbyte=inbyte>>1; } }
/**********************************************************/ //读出一个字节数据
/**********************************************************/ uchar read_byte() {
uchar i,temp=0; io=1; for(i=0;i<7;i++) { sclk=0; if(io==1)
第39页 /共68页
南华大学电气工程学院课程设计(论文)
temp=temp|0x80; else
temp=temp&0x7f; sclk=1; temp=temp>>1; }
return (temp); }
/**********************************************************/ // 往ds1302的某地址写入数据
/**********************************************************/ void write_ds1302(uchar cmd,uchar indata) { sclk=0; reset=1;
write_byte(cmd); write_byte(indata); sclk=0; reset=0; }
/**********************************************************/ // 读出ds1302某地址的数据
/**********************************************************/ uchar read_ds1302(uchar addr) {
uchar backdata; sclk=0; reset=1;
第40页 /共68页
南华大学电气工程学院课程设计(论文)
write_byte(addr); backdata=read_byte(); sclk=0; reset=0; return (backdata); }
/**********************************************************/ // 设置初始时间
/**********************************************************/ void set_ds1302(uchar addr,uchar *p,uchar n) //写入n个数据 {
write_ds1302(0x8e,0x00); //允许写操作 for(;n>0;n--) {
write_ds1302(addr,*p); p++; addr=addr+2; }
write_ds1302(0x8e,0x80); //加写保护 }
/**********************************************************/ // 读取当前时间
/**********************************************************/ void read_nowtime(uchar addr,uchar *p,uchar n) {
for(;n>0;n--) {
*p=read_ds1302(addr);
第41页 /共68页
南华大学电气工程学院课程设计(论文)
p++; addr=addr+2; } }
/**********************************************************/ // 初始化DS1302
/**********************************************************/ void init_ds1302() {
reset=0; sclk=0;
write_ds1302(0x8e,0x00); // 允许写
write_ds1302(0x90,0xa6); //一个二极管+4K电阻 write_ds1302(0x8e,0x80); //写保护 }
/**********************************************************/ /* :闪烁函数 */ /**********************************************************/ void flash() { if(flag) {
write_position(2,9); lcd_wdat(':'); write_position(2,12); lcd_wdat(':'); }
第42页 /共68页
南华大学电气工程学院课程设计(论文)
else {
write_position(2,9);
lcd_wdat(0x20); //显示空白 write_position(2,12); lcd_wdat(0x20); } }
/**********************************************************/ // 显示当前时间
/**********************************************************/ void Play_nowtime() {
read_nowtime(0x81,init,7); //读出当前时间,7个字节
write_position(2,7);
lcd_wdat(((init[2]&0xf0)>>4)+0x30); write_position(2,8);
lcd_wdat('0'+(init[2]&0x0f)); //小时 write_position(2,10);
lcd_wdat('0'+((init[1]&0xf0)>>4)); write_position(2,11);
lcd_wdat('0'+(init[1]&0x0f)); //分 write_position(2,13);
lcd_wdat('0'+((init[0]&0xf0)>>4)); write_position(2,14);
lcd_wdat('0'+(init[0]&0x0f)); //秒 write_position(1,1);
第43页 /共68页
南华大学电气工程学院课程设计(论文)
lcd_wdat('0'+((init[6]&0xf0)>>4)); write_position(1,2);
lcd_wdat('0'+(init[6]&0x0f)); //年 write_position(1,4);
lcd_wdat('0'+((init[4]&0xf0)>>4)); write_position(1,5);
lcd_wdat('0'+(init[4]&0x0f)); //月 write_position(1,7);
lcd_wdat('0'+((init[3]&0xf0)>>4)); write_position(1,8);
lcd_wdat('0'+(init[3]&0x0f)); //日 write_position(1,15);
lcd_wdat('0'+(init[5]&0x0f)); //周 flash();
if((alarm_flag == 1)&&(on_flag == 0)) //alarm_flag=1,显示
打开开关标志
{ }
write_position(2,16); lcd_wdat(0x01);
if(on_flag) //on_flag=1,显示打开灯标志
{ }
write_position(2,16); lcd_wdat(0x00);
if((alarm_flag == 0)&&(on_flag ==0))
{
write_position(2,16);
第44页 /共68页
南华大学电气工程学院课程设计(论文)
lcd_wdat(0x20); }
}
4. SET_ONTIME.H
uchar init1[] ={0x00,0x00}; //开关灯时间数据修改后的十位个位缓存 uchar code str4[]=\ %uchar code str3[]=\ \ uchar bj_time[] ={0x00,0x30,0x18}; //ON uchar bj_time1[] ={0x00,0x00,0x05}; //OFF //开关灯秒,分,时的缓存 sbit K1 = P3^0; sbit K2 = P3^1; sbit K3 = P3^2; sbit K4 = P3^3; sbit BEEP = P3^7;
bit hour=0,min=0,sec=0,hour1=0,min1=0; bit year=0,month=0,day=0,week=0; uchar count = 0; //开关灯数据的十进制缓存
/**********************************************************/ /* 蜂鸣器响一声 */ /**********************************************************/ /******************************************************************************/
void Delay(int num){//延时函数 }
while(num--) ;
/********************************************************************
第45页 /共68页
南华大学电气工程学院课程设计(论文)
**********/ void beep() { }
/**********************************************************/
/**********************************************************/ // 设定值写入DS1302
/**********************************************************/ void Set_W1302(uchar addr) {
uchar temp;
write_ds1302(0x8e,0x00);
temp=(init1[0]<<4)+init1[1]; //十位个位转换为BCD码 write_ds1302(addr,temp); write_ds1302(0x8e,0x80); }
/**********************************************************/ // 在指定位置显示init1数据
/**********************************************************/ void Set_place(uchar row,uchar col)
第46页 /共68页
unsigned char a;
for(a=100;a>0;a--){//声音长度 }
BEEP = 1;//拉高
BEEP = ~BEEP;
Delay(50);//音调设置延时
正在阅读:
单片机课设之光控路灯控制系统04-12
土工试验检测试题1-7 - secret09-11
挑战者号失事案例及决策分析05-02
《音乐之声》的观后感10篇12-12
游艇生产项目可行性研究报告04-19
快消品行业未来渠道发展05-26
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 光控
- 单片机
- 控制系统
- 路灯
- 设计说明书 - 图文
- 税二模拟题2
- 电子科技大学博士生发表论文要求2013版
- 供应商资质预审文件(城市公司版)
- 《千字文》第一单元1--4课时 - 图文
- 随机振动案例 - 图文
- 2010 - 年全国硕士研究生入学统一考试数学三试题及解析
- 2016年度继续教育系列:诚信建设题库及答案
- 牛津译林版八年级上册英语知识点归纳
- LED照明试卷(含答案)
- 现代自然地理学王健课后题
- VBA开发指南
- 中国科普展品行业市场前景分析预测报告(目录) - 图文
- 青岛版音乐三年级下册教案
- 2011年国民经济继续保持平稳较快发展
- 有机化学第二版 - - 徐寿昌 - 课后答案2
- 高分子化学复习笔记
- ansys材料属性特详细
- 主持人大赛总结
- 外贸销售合同中英文