毕业设计(论文)基于单片机的LED路灯模拟控制系统的设计与实现_第1页
毕业设计(论文)基于单片机的LED路灯模拟控制系统的设计与实现_第2页
毕业设计(论文)基于单片机的LED路灯模拟控制系统的设计与实现_第3页
毕业设计(论文)基于单片机的LED路灯模拟控制系统的设计与实现_第4页
毕业设计(论文)基于单片机的LED路灯模拟控制系统的设计与实现_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

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

文档简介

1、自动化084班 基于单片机的led路灯模拟控制系统的设计与实现0 引言 led照明系统具有省电、轻巧、寿命长、高耐久性等特征,近年来已经越来越多地应用于路灯照明系统中,其趋势是取代目前广泛采用的高压汞灯的路灯照明。 针对目前比较先进的led路灯控制系统进行了模拟路灯控制系统设计,实现了整条支路的led路灯定时控制开关灯、自动开关灯、独立控制开关灯及故障报警等多项功能。对1 w led路灯单元可调恒流驱动电源,可以按照设定要求调节led输出功率大小,实现调光功能。1 系统硬件设计110 引言 led照明系统具有省电、轻巧、寿命长、高耐久性等特征,近年来已经越来越多地应用于路灯照明系统中,其趋势是

2、取代目前广泛采用的高压汞灯的路灯照明。 针对目前比较先进的led路灯控制系统进行了模拟路灯控制系统设计,实现了整条支路的led路灯定时控制开关灯、自动开关灯、独立控制开关灯及故障报警等多项功能。对1 w led路灯单元可调恒流驱动电源,可以按照设定要求调节led输出功率大小,实现调光功能。1 系统硬件设计11 系统总体设计 为了能够真实地模拟实际led路灯的控制,设计了模拟路灯控制系统。控制系统结构如图1所示,该系统主要由输入显示装置、支路控制器和2个单元控制器模块组成。支路控制器主要用来对整个模拟led路灯支路进行控制;对于输入显示装置,当按键时输入控制信息,lcd显示相关的控制信息;2个单

3、元控制器受支路控制器控制led1和led2的电源供电和功率的输出。12 支路控制器模拟led路灯控制系统的重点在支路控制器,其电路框图如图2所示。at89s52单片机作为控制核心,时钟电路将时钟信息送显示和时钟存储;光敏检测主要用来检测光线的强度是否应该开关路灯;在路灯出现故障(断路)时将产生声光报警,并指示那一路发生故障。121 时钟电路基于ds1302的时钟电路设计采用24 h计时方式,时、分、秒并用lcd显示。采用at89s52单片机和ds1302实时时钟芯片,使用5 v电源供电,采用按键控制,可以进行时间校正,并且可对led灯的开关时间进行控制和调节。ds1302的vcc2加入3 v锂

4、可充电电池实现时钟掉电保护。通过at24c02存储时钟信息实现程序掉电保护功能。122 光敏检测电路光敏检测主要检测光线的强度是否应该开关路灯。光敏检测电路主要利用光敏电阻的感光特性进行工作。光敏检测电路如图3所示,当白天光照射到光敏电阻时,光敏电阻的阻值降低,反向输入端电压随之降低,当低于反相器74hc04的门槛电压时,反相器发生翻转,提供给单片机一高电平,控制led灯关闭。当弱光或无光照时(晚上),由于光敏电阻的暗电阻很大,反向输入端电压较高,使得反相器输出为低电平,单片机控制led灯的自动开启。123 故障检测及声光报警声光报警装置是支路控制器中单片机控制蜂鸣器和发光二极管发出声光报警的

5、电路装置。当系统中某一支路出现故障(如灯不亮),正常状况是led路灯应该点亮的时候,此时判断为路灯出现故障,系统中采用以光敏检测的方法来检测led路灯是否点亮或者灭,从而判别是否有故障。当有故障时在支路控制器中,单片机控制蜂鸣器和发光二极管发出声光报警信号,并通过lcd显示器显示当前故障路灯的地址编号,实现故障报警显示功能。13 输入及显示装置图4所示为键盘输入和液晶显示电路。k1为菜单功能键,相对应的菜单有时间校正、设定led灯整条支路开关,独立控制每只路灯开关时间和功率调节的调光功能;k2为移位键;k3为加减键;k4为确认键。lcd数据线与单片机p1口相连;rs寄存器选择信号端与p20相连

6、;rw读写端与p21相连;e使能端与p22相连。14 单元控制器单元控制电路的工作是由单片机控制da转换器输出电压,从而控制可调恒流源驱动电路。可调恒流源驱动电路由运放lm358、继电器、大功率管tip41和开关管9013等组成,如图5所示。单片机p30控制口输出高低电平信号控制继电器开关,给恒流源电路提供+12 v电压,恒流源电路驱动led发光。当输出高电平,继电器导通,给恒流源电路提供+12 v电压,否则相反。单片机通过控制tlc5615da输出电压信号来调整恒流源的大小。 led灯选用独立1 w蓝光发光二极管,正向电压为3040 v,正向电流为350 ma,da输出电压为0524 v,调

7、节流过led的电流,从而可调整1 w的led灯,输出功率在20100。经过实测,恒流源输入vi与led输出功率(p=ui)的关系如表1所示。2 系统软件设计程序总流程图如图6所示。系统启动后在没有任何按键按下的情况下显示当前日期和时间,选择路灯的工作模式。系统默认的工作模式为检测亮暗开关模式,根据环境光线判断是否打开路灯。当通过按键进行设定的时候,进入设定的模式,包括:led路灯输出功率的设定,设定范围在20100;当前日期和时间的修改和设定;路灯工作模式的设定;路灯故障的检测及对应单元故障的显示。3 测试结果(1)在液晶屏幕上能够显示时钟、显示菜单。设定、显示开关灯时间,控制整条支路(测试用

8、早上6:00关灯,晚上7:oo开灯)或独立控制led1及led2的开灯和关灯。 (2)环境明暗变化自动开关灯的模拟测试。当环境的光照度小于01 lx(用手遮挡光敏电阻),自动点亮led灯,手松开自动关闭led灯。 (3)路灯故障报警测试。设置led1灯故障,系统红色发光二极管闪烁,蜂鸣器发出响声,液晶显示屏显示相应故障地址rd1;设置led2灯故障,声光报警相同,液晶显示屏显示相应故障地址rd2。 (4)测试出led1,led2灯的功率能在20100范围内调节,从而实现调光和调节输出功率功能; 通过整机调试,液晶显示功率数值与实际测量led1,led2灯的功率(p=ui)数值误差小于等于18。

9、4 结语详细讲述了系统设计方案,并给出了相关程序流程。本设计模拟实际大功率led路灯控制系统,有较强的应用价值。可以将其设计思路和方法应用在公路led路灯、小区led路灯和景区亮化工程等。应用本设计可以大幅节约能源消耗,降低成本,实现路灯亮化的智能控制。另外,如果把本设计方案扩展加上上位机,则可以实现远程中央路灯监控系统,将具有更大的应用价值。 本设计的创新点在于详细设计了基于单片机at89252模拟路灯控制的系统,通过对功率参数的实际测量,达到精确控制led路灯的输出功率;能够根据光线强弱自动开关路灯;还能够根据控制设定定时开关路灯;能自动检测故障路灯并显示故障位置。多种控制方式起到节能和智

10、能控制作用。所设计程序已经在模拟led路灯控制系统硬件平台上成功运行。模拟路灯控制系统的设计摘要 本系统以avr低功耗单片机系列atmega16l为核心组成支路控制系统,采用专用时钟芯片实现精确的时钟功能,设定并显示开关灯时间。该控制系统能根据环境明暗变化自动开灯和关灯,以达到节能要求。atmega16l是一款高性能、低功耗的8位avr微处理器,使系统在低功耗的状态下稳定工作。系统采用线路简单、体积小的专用时钟芯片ds1302,ds1302工作时功耗很低,保持数据和时钟信息时功率小于1mw。使用ds1302不但使电路功耗降低,而且节省io口资源。采用低功耗的字符型液晶作为显示器件,显示更为直观

11、。使用光敏电阻来检测环境明暗的变化,光敏电阻在不同光强下电阻值会发生明显变化,单片机内部ad采集电阻值的变化量达到检测目的。采用对射式收发一体光电传感器检测物体的运动,使用灵敏光电传感器更有效地实现在物体运动过程中路灯的自动控制,达到节能的要求。当路灯电路出现故障时,单片机采集路灯电路采样点的电压后处理采集到的数据,实现自动报警功能。该系统基于可靠的硬件设计和稳定的软件算法实现题目基本要求。关键词:atmega16l 功耗 节能 光电传感器 目 录一、 设计任务- 2 -1.1任务- 2 -1.2 要求- 2 -二、方案论证与比较- 3 -三、总体设计方案- 3 -1.支路控制系统设计- 4

12、-(1)时钟模块- 4 -(2)信号采集模块的设计- 5 -(3)显示、按键模块- 6 -(4)路灯控制模块- 6 -(5) 声光报警模块- 6 -(6) 电源模块- 7 -2.软件设计- 13 -四、结果分析- 13 -五、结论- 14 -六、参考文献- 14 -附录1 系统原理图- 15 -附录2 程序清单- 16 -一、 设计任务1.1任务设计并制作一套模拟路灯控制系统。控制系统结构如图1所示,路灯布置如图2所示。图1 路灯控制系统示意图图2 路灯布置示意图(单位:cm)1.2 要求 1基本要求(1)支路控制器有时钟功能,能设定、显示开关灯时间,并控制整条支路按时开灯和关灯。(2)支路控

13、制器应能根据环境明暗变化,自动开灯和关灯。(3)支路控制器应能根据交通情况自动调节亮灯状态:当可移动物体m(在物体前端标出定位点,由定位点确定物体位置)由左至右到达s点时(见图2),灯1亮;当物体m到达b点时,灯1灭,灯2亮;若物体m由右至左移动时,则亮灯次序与上相反。(4)支路控制器能分别独立控制每只路灯的开灯和关灯时间。(5)当路灯出现故障时(灯不亮),支路控制器应发出声光报警信号,并显示有故障路灯的地址编号。2发挥部分(1)自制单元控制器中的led灯恒流驱动电源。(2)单元控制器具有调光功能,路灯驱动电源输出功率能在规定时间按设定要求自动减小,该功率应能在20%100%范围内设定并调节,

14、调节误差2%。(3)其它(性价比等)。二、方案论证与比较 方案一:题目要求设计一个模拟路灯控制系统,实现支路控制器对单元控制器的有效控制。本系统采用atmega16l单片机为主控芯片,采用对射式收发一体的光电传感器采集由于物体运动所产生的信号,再由支路控制器系统对信号进行处理实现对路灯的合理控制,以达到题目要求。支路控制器的时钟采用精确的时钟芯片并由字符型液晶作为显示,利用按键设定、修改开关灯时间。系统采用光敏电阻分压的方式感应周围环境明暗的变化,支路控制系统采集分压值经单片机处理后来控制路灯的变化。当路灯出现故障后路灯电路中采样点的电压值会发生变化,单片机根据变化量进行相应的处理。基于设计思

15、路在设计过程中选择合适的元器件,使用合适的单元电路模块,更有效的达到设计要求。方案二:与方案一不同的是方案二选用at89s52芯片,采用红外对管对物体的移动进行检测,时钟由单片机定时器实现。方案比较:与at89s52相比,atmega16l在性能上具有明显的优势,若采用红外对管则给元件的安装带来不便,且不易调试;由单片机定时器实现的时钟不准确,故采用方案一。三、总体设计方案本系统以atmega16l为控制核心。整个系统硬件框图如图1所示:图3 系统框图1.支路控制系统设计图4 最小系统支路控制系统是模拟路灯控制系统的核心,该系统采用atmel公司的atmega16l单片机作为主控制芯片来实现对

16、受控对象的控制。与at89s52相比,atmega16l是一款高性能、低功耗的8位avr微处理器,具有速度快、输出电流大、工作电压范围宽、成本低等优点,是一款性价比很高的单片机。(1) 时钟模块图5 时钟电路为实现精确的时钟功能并节省单片机io口资源,该设计使用专用的接口方式为串行的时钟芯片ds1302,该芯片线路简单、体积小,易于操作,且价格低廉。ds1302 是美国dallas公司推出的一种高性能、低功耗、带ram的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5v5.5v。采用三线接口与cpu进行同步通信,并可采用突发方式一次传送多个字节的时

17、钟信号或ram数据。ds1302内部有一个318的用于临时性存放数据的ram寄存器。ds1302是ds1202的升级产品,与ds1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。另外该芯片有备份电源引脚,可以在断电后仍能工作,以保证时钟的准确性。ds1302与单片机之间能简单的采用同步串行方式进行通信,仅需用到三个口线:(1)res(复位),(2)i/o(数据线),(3)sclk(串行时钟)。x1和x2是振荡源,外接32.768khz晶振。rst是复位/片选线,通过把rst输入驱动置高电平来启动所有的数据传送。rst输入有两种功能:首先,rst接通控

18、制逻辑,允许地址/命令序列送入移位寄存器;其次,rst提供终止单字节或多字节数据的传送手段。当rst为高电平时,所有的数据传送被初始化,允许对ds1302进行操作。如果在传送过程中rst置为低电平,则会终止此次数据传送,i/o引脚变为高阻态。上电运行时,在vcc2.0v之前,rst必须保持低电平。只有在sclk为低电平时,才能将rst置为高电平。ds1302 存在时钟精度不高,易受环境影响,出现时钟混乱等缺点。ds1302可以用于数据记录,特别是对某些具有特殊意义的数据点的记录,能实现数据与出现该数据的时间同时记录。这种记录对长时间的连续测控系统结果的分析及对异常数据出现的原因的查找具有重要意

19、义。传统的数据记录方式是隔时采样或定时采样,没有具体的时间记录,因此,只能记录数据而无法准确记录其出现的时间;若采用单片机计时,一方面需要采用计数器,占用硬件资源,另一方面需要设置中断、查询等,同样耗费单片机的资源,而且,某些测控系统可能不允许。但是,如果在系统中采用时钟芯片ds1302,则能很好地解决这个问题。ds1302工作时功耗很低,保持数据和时钟信息时功率小于1mw。(2) 信号采集模块的设计 图6 采样电路信号采集模块包括物体检测模块和环境明暗检测模块,两者功能如下:物体检测模块:该模块需要检测小车的移动,并根据小车的移动进行路灯开关的自动控制。基于此目的采用探测距离远、灵敏度高的反

20、射式光电传感器进行检测,当传感器检测到小车时,传感器给单片机一个信号,然后单片机对路灯进行合理控制,达到题目要求。环境明暗检测模块:该模块需要检测环境光的变化,根据环境光的明暗进行路灯开关的自动控制。基于此要求采用由光敏电阻组成的分压电路进行检测。光敏电阻器又称光导管,特性是在特定光的照射下,其阻值迅速减小,可用于检测可见光。在不同的光强下,光敏电阻的电阻值会发生明显变化,光敏电阻器是利用半导体的光电效应制成的一种电阻值随入射光的强弱而改变的电阻器;入射光强,电阻减小,入射光通过检测不同光强下电阻值的变化量来控制路灯的开和关。(3) 显示、按键模块 图7 1602显示及按键电路通过按键可以调节

21、和设定路灯的开关时间,控制整条支路按时开灯和关灯,并在字符液晶上显示出来。字符型液晶因具有体积小、功耗低、寿命长、价格低、接口控制方便及显示操作简单等优点而被广泛应用。我们这里用到的是1602液晶,1602液晶为5v电压驱动,带背光,可显示2行,每行16个字符,不能显示汉字,内置128个字符的ascii字符集库,只有并口接口,无串口接口。(4) 路灯控制模块图8 路灯控制电路该模块采用节能的1w led灯,当电路出现故障时,单片机通过内部ad采集电路采样点的电压变化量后对数据进行处理。(5) 声光报警模块 图9 声光报警电路 当系统出现故障时,蜂鸣器会发出警报声,同时报警指示灯也会点亮。(6)

22、 电源模块图10 5v稳压电路 电源是系统中最重要的模块之一,输入电源经稳压块后输出稳定的+5v电源,用以驱动整个系统。(7) 恒流源模块1. 原理介绍:恒流源是输出电流保持不变的电流源,而理想的恒流源为:a)不因负载(输出电压)变化而改变。b)不因环境温度变化而改变。c)内阻为无限大。 (3-1)恒流源之电路符号: 理想的恒流源 实际的流源图11 恒流源理想的恒流源,其内阻为无限大,使其电流可以全部流出外面。实际的恒流源皆有内阻r。2.三极管的恒流特性: 图12 三极管恒流特性从三极管特性曲线可见,工作区内的ic受ib影响,而vce对ic的影响很微。因此,只要ib值固定,ic亦都可以固定。输

23、出电流io即是流经负载的ic。 (3-2)电流镜电路currentmirror:电流镜是一个输入电流is与输出电流io相等的电路: 图13 电流镜电路q1和q2的特性相同,即vbe1=vbe2,1=2。 (3-3)三极管之受温度的影响,但利用电流镜像恒流源,不受影响,主要依靠外接电阻r经q2去决定输出电流io(ic2=io)。方案1: 图14 恒流源电路从左边看起:基极偏压 (3-4)所以 ve=vb-0.6=1.0v (3-5) 又因为射极电阻是1k,流经射极电阻的电流是 (3-6)所以流经负载的电流就就是稳定的1ma方案2. 图15 恒流源电路这是个利用稳压二极管提供基极偏压5.6v,ve

24、=vb-0.6=0.5v,流经负载的电流 (3-7)方案3. 图16 恒流源电路 这个有一点不同:利用pnp三极管供应电流给负载电路.首先,利用二极管0.6v的压降,提供8.2v基极偏压(103x0.6=8.2).4.7k电阻只是用来形成通路,而且不希望(也不会)有很多电流流经这个电阻。ve=vb+0.6=8.8v,pnp晶体的560欧姆电阻两端电位差是1.2v,所以电流是2ma。如果只用一个三极管不能满足需求,可以用两个三极管架成: 图17 恒流源或是 图18 恒流源方案4.电路图如下所示:图19 恒流源电路图中的第一组运放电路是跟随器,对输入的电压取样电路进行阻抗变换。最前面的双向开关负责

25、将正负12v电压接入,这个电压是运放的供电电压,并提供给其他线路作为电源输入,c24和c25电容是运放正负电源端的滤波电容,紧靠运放电源引脚。r11和电位器rw4组成了一个电压取样电路,通过改变电位器rw4滑动端的位置取出不同的电压值,同时这个取出的电压值也是输出电流的正比例控制值,电位器滑动头的电压就按照串联分压的方式计算得出,后端的r15和电容c20作为取出电压信号的阻容滤波电路,因为后端接的是运放的正端,电位器的滑动头不输出电流。运放的1脚输出的电压等于3脚的电压,既是电位器滑动端的电压值。运放上面的r12和d9是供电电源12v的指示电路,12v通过开关供给后d9发光指示电压正常。后面的

26、一组运放是实现电压到恒流的转换,电路中有正反馈也有负反馈,但线路是稳定的状态,计算的时候运放也是按照虚短和虚断的分析方式,c21是电压信号的滤波电容,假设第一组运放1脚输出的电压是v,第二组运放5脚正端的电压是v1,那么电阻rs1左端的电压值为2v1,因为电阻r16和r18是相同的数值。电阻rs1右端的电压按照r13和r14分压电路计算的话数值是v1-(v-v1)=2v1-v,这样我们就可以计算出rs1两端的电压是v,所以流过rs1电阻的电流是恒定的,另外考虑到rx1和r13相对rs1和负载的阻值不在同一个数量级,比他们大好多倍,因此流过rs1的电流基本都流向负载,很少量的电流流向r13和rx

27、1,所以输出的电流基本是恒定的。在以上的计算中v1的数值是不确定的,他是根据负载的大小变化的,但是不论v1的数值怎么变化,通过计算可以知道流过电阻rs1的电流是不变的,以为它两端的电压是v,而v这个电压值是第一组运放的输出,在电位器不调节的时候v的数值是固定的,流过rs1的电流不变,所以输出电流也不变,实现恒流控制。后面一组运放电路中q4三极管的作用时增大运放的电流输出能力,因为负载比较小,运放驱动能力可能不够,r19基本没有作用在电路中,rx1可能是负载或者假负载,比如输出不接任何负载,电流基本都流过rx1,如果不接rx1,在没有负载的情况下输出就是电压最大值接近12v,在这种电压输出下,运

28、放的正负端会有较大的压差,有可能会损坏运放358。同时在线路的设计上也要保证负载流过恒定电流产生的电压值不能超过12v,如果超过电源供电电压,不能实现恒流工作性能。rx1不取吧,估计也没事,取小了对负载不好,要比负载大10倍以上啊,要忽略流过他的电流 本系统采用方案四的恒流源电路,以实现系统的功能。2.软件设计系统流程图如下:开始初始化判断环境在明暗判断移动小车位置判断led灯好坏设置实时时间、开关灯时间显示并输出相应动作图10 流程图 c语言表达能力和运算能力比较强,且具有很好的可移植性和硬件控制能力。采用icc avr编译器。icc avr是众多avr单片机应用开发软件中的优秀软件之一,界

29、面友好,易学易用。四、结果分析该系统能完成基本功能部分,传感器检测物体运动的最大误差为正负1cm,光敏电阻在正常光照情况下电阻值为2k,在强光下电阻值为200欧姆,在黑暗情况下2m.。路灯电路正常时采样点电压为3v左右,在开路故障时电压为0v。五、结论硬件设计和软件设计是电子设计中不可缺少的内容,为了满足设计的功能和指标的要求,我们必须在开始设计时就考虑到硬件与软件的协调;不然会增加软件实现时困难和复杂程度,有时即使硬件和软件单独能用,却不能使他们组成的系统工作,故在设计的过程中必须考虑软硬件的处理能力以及它们的接口是否兼容,实现软硬件的信号过渡。 六、参考文献【1】 高吉祥.全国大学生电子设

30、计竞赛系列教程【m】.北京:电子工业出版社.2007【2】 张志良.模拟电子技术【m】.北京:机械工业出版社.2006【3】 何小艇.电子系统设计【m】.杭州:浙江大学出版社.2004【4】 胡斌.元器件及实用电路解说【m】.北京:电子工业出版社.2007【5】 刁鸣.常用电路模块分析与设计指导【m】.北京:清华大学出版社.2008【6】 唐竞新.数字电路基础【m】.北京:清华大学出版社.2003附录1 系统原理图附录2 程序清单/*/#include /包含型号头文件#include /包含位操作头文件#include b.c#define uchar unsigned char#defin

31、e uint unsigned int/*1602控制位的宏定义*/#define lcd_out ddrc=0xff /数据端设为输出#define lcd_c_ddr ddrd|=0xe0 /控制端设为输出 #define lcd_data portc /发送数据端#define lcd_rs_h portd|=bit(pd5); /操作的是命令#define lcd_rs_l portd&=bit(pd5); /操作的是数据#define lcd_rw_h portd|=bit(pd6); /从1602读#define lcd_rw_l portd&=bit(pd6); /向1602写#

32、define lcd_oe_h portd|=bit(pd7); /1602使能#define lcd_oe_l portd&=bit(pd7); /1602不使能#define lcda_curon0x0e/ 显示光标#define lcda_curfla0x0f/ 打开光标闪烁/*rtc常量*/ #define rtc_clk pb7#define rtc_data pb5#define rtc_cs pc7#define rd 0x01#define wr 0x00#define c_sec0x80/秒#define c_min0x82/分#define c_hr0x84/时#defin

33、e c_wp0x8e/控制(写保护)#define c_burst0xbe/时钟多字节#define clk_halt0x80/停止时钟控制位 #define clk_start0x00/启动时钟 #define protect0x80/写保护控制位 #define uprotect0x00/写保护控制位 /*按键常量控制位的宏定义*/#define key_out ddra|=0xf8/按键方向定义输出#define key_in ddra&=0x07/按键方向定义输入#define key_data pina /读按键端口#define key_out_h porta|=0xf8 /按键端

34、口输出高电平#pragma data:code const uchar table=0x30,0x31,0x32,0x33,0x34, 0x35,0x36,0x37,0x38, 0x39; /*全局变量宏定义*/uchar hour,hourshi,hourge,minute,minuteshi,minutege, second,secondshi,secondge,haomiao,haomiaoshi,haomiaoge;uchar chucun;/存储设置时间时的当前值void delayns(uint us) uint i; us=us*5/4; /5/4是在8mhz晶振下,通过软件仿真

35、反复实验得到的数值 for( i=0;ius;i+); void delay(uint ms) uint i,j; for( i=0;ims;i+) for(j=0;j1141;j+);/1141是在8mhz晶振下,通过软件仿真反复实验得到的数值/*函数名称: lcd1602_write_com(uchar com)功 能: 向1602液晶写入一个字节指令参 数: com是指令返回值 : 无/*/void lcd1602_write_com(uchar com) lcd_rs_l; lcd_rw_l; lcd_data=com; delay(5); lcd_oe_h; delay(5); lc

36、d_oe_l;/*函数名称: lcd1602_write_dat(uchar dat)功 能: 向1602液晶写入一个字节数据参 数: dat是数据返回值 : 无/*/void lcd1602_write_dat(uchar dat) lcd_rs_h; lcd_rw_l; lcd_data=dat; delay(5); lcd_oe_h; delay(5); lcd_oe_l;/*函数名称: lcd1602_init()功 能: 初始化1602液晶参 数: 无返回值 : 无/*/void lcd1602_init() lcd_out; lcd_c_ddr; lcd_oe_l; lcd1602

37、_write_com(0x38);/设置16*2显示,5*7点阵,8位数据接口 delay(5); lcd1602_write_com(0x0c);/设置开显示,不显示光标 delay(5); lcd1602_write_com(0x01);/显示清0,数据指针清0 delay(5); lcd1602_write_com(0x06);/写一个字符后地址指针加1 delay(5); /lcd1602_write_com(0x80+0x0f);/将数据指针定位到第一行第一个字处:lcd1602_write_com(0x80) /delay(5); /写第二行时要重新定位数据指针 /write_co

38、m(0x80+0x40) /*函数名称: ds1302_init功 能: 初始化ds1302的数据接口参 数: 无返回值 : 无/*/void ds1302_portinit(void) ddrb|=bit(rtc_clk)|bit(rtc_data)|bit(rtc_cs);/将时钟端(rtc_clk)数据端(rtc_data)片选端(rtc_cs)设置为输出 ds1302_writed(c_wp|wr,uprotect); /写入写允许命令 ds1302_writed(c_sec|wr,clk_start);/启动振荡器,ds1302开始工作 ds1302_writed(c_wp|wr,p

39、rotect); /控制命令,wp位为1,不允许写操作 /*函数名称: ds1302_writeb功 能: 向ds1302写入一个字节数据(没有rst操作)参 数: byte-要写入的数据返回值 : 无/*/void ds1302_writeb(uchar byte) uchar i; for(i=0;i=1; /数据右移1位,为送出新数据位做准备 /*函数名称: ds1302_writed功 能: 向ds1302的某个地址写入一个字节数据参 数: addr-地址值(寄存器或ram) data-要写入的地址返回值 : 无/*/void ds1302_writed(uchar addr,ucha

40、r data) portc&=bit(rtc_cs); /拉低片选端 portb&=bit(rtc_clk); /拉低时钟端 delayns(10); portc|=bit(rtc_cs); /拉高片选端 delayns(10); /调整片选脉冲 ds1302_writeb(addr); /写入操作命令(地址) delayns(10); portb&=bit(rtc_clk); /拉低时钟端 delayns(10); ds1302_writeb(data); /写入数据 portb&=bit(rtc_clk); /拉低时钟端 delayns(10); /调整片选脉冲 portc&=bit(rt

41、c_cs); /拉低片选端/*函数名称: ds1302_sett功 能: 设置ds1302的时间参 数: pttimed-设置时间数组指针返回值 : 无/*/void ds1302_sett(uchar pttimed) uchar i; uchar addr = 0x80; /写入地址从秒寄存器开始 ds1302_writed(c_wp|wr,uprotect); /控制命令,wp位为0,允许写操作delay(5); for(i=0;i7;i+) ds1302_writed(addr|wr,pttimedi); / 秒 分 时 日 月 星期 年 addr+=2;delay(1); ds130

42、2_writed(c_wp|wr,protect); /控制命令,wp位为1,不允许写操作 /*函数名称: ds1302_readb功 能: 从ds1302读出一个字节数据(没有rst操作)参 数: 无返回值 : byte-读出的数据/*/uchar ds1302_readb(void) uchar i,byte=0; ddrb&=bit(rtc_data); /将数据端口设置为输入 portb&=bit(rtc_data); /无上拉电阻 for(i=0;i=1; /保存读入的数据位 portb|=bit(rtc_clk); /时钟上升沿 delayns(10); /延时,调整时钟脉冲宽度

43、portb&=bit(rtc_clk); /时钟下降沿,ds1302输出数据位 delayns(10); /等待数据变化(mega16太快,必须等待ds1302的数据位输出,否则不能正确读出) if(pinb&bit(rtc_data) /当前位是否是高电平 byte|=bit(pb7); /是高电平就将返回数据的当前位置1 else byte&=bit(pb7); /是低电平就将返回数据的当前位置0 ddrb|=bit(rtc_data); /最后将数据端口设置为输出 return byte; /返回读出的数据 /*函数名称: ds1302_readd功 能: 从ds1302的某个地址读出一

44、个字节数据参 数: addr-地址值(寄存器或ram)返回值 : data-读出的数据/*/uchar ds1302_readd(uchar addr) uchar data; portc&=bit(rtc_cs); /拉低片选端 portb&=bit(rtc_clk); /拉低时钟端 delayns(10); portc|=bit(rtc_cs); /拉高片选端 delayns(10); /调整片选脉冲 ds1302_writeb(addr); /写入操作命令(地址) delayns(10); data=ds1302_readb(); /读出数据 delayns(10); portb&=bit(rtc_clk); /拉低时钟端 portc&=bit(rtc_cs); /拉低片选端 return data; /返回读出的数据/*函数名称: ds1302_g

温馨提示

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

评论

0/150

提交评论