厂区路灯控制模拟系统毕业论文_第1页
厂区路灯控制模拟系统毕业论文_第2页
厂区路灯控制模拟系统毕业论文_第3页
厂区路灯控制模拟系统毕业论文_第4页
厂区路灯控制模拟系统毕业论文_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

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

文档简介

1、厂区道路路灯控制模拟系统摘要:该系统以P89V51RD2单片机为系统控制中心,包括分支控制器和单元控制器。采用无线通信完成控制指令和数据的传输,利用DS1302时钟芯片和1602LCD模块完成系统时钟和路灯开关时间的显示功能,并将实时时间与设定时间进行比较,完成路灯的自动开关功能。超声波传感器实时测量物体的距离,实现路灯的定点和非固定照明;采用光敏电阻加后调理电路的方式,路灯可以根据环境明暗的变化自动开关;路灯由两级运算放大器电路组成的恒流电源驱动。电路简单可靠,其输出功率由单片机输出的PWM信号无级调节,达到完全节能。利用电压比较电路判断路灯故障,利用语音提示模块完成系统故障报警和提示,充分

2、体现了设计的灵活性和人性化。关键词:单片机分控制器单元控制器PWM人性化1.简介:由于其显著的优点,单片机已成为科技领域的有力工具和人类生活的得力助手。它的应用遍及全世界。单片机在智能仪器中的应用:单片机在机电一体化中的应用:单片机在实时控制中的应用:单片机在分布式多计算机系统中的应用:单片机在人类生活中的应用一直是单片机发挥重要作用的领域。单片机已经成为计算机发展和应用的一个重要方面。另一方面,单片机应用的意义在于它从根本上改变了控制系统的传统设计思想和方法。过去由模拟电路或数字电路实现的大部分功能,现在都可以通过软件的方法由单片机实现。这种用软件代替硬件的控制技术也叫微控技术,是传统控制技

3、术的一次革命。目前单片机的发展趋势是向高性能、多品种方向发展,将进一步向CMOS、低功耗、小体积、大容量、高性能、低价格、外围电路封装方向发展。在单片机家族中,80C51系列是最好的一个。此外,Intel公司还将MCS -51系列中80C51内核的使用权转让给了全球众多著名的IC厂商,如飞利浦、NEC、Atmel、AMD、华邦等。这些公司在保持与80C51单片机兼容的基础上,改进了80C51的许多特性。就这样,80C51成为了众多厂商支持的大家族,开发了上百个品种,现在统称为80C51系列。80C51单片机已经成为单片机发展的主流。专家认为,虽然世界上的MCU种类繁多,功能各异,开发器件不兼容

4、,但客观发展表明,80C51最终可能形成事实上的标准MCU芯片。但现实中,在很多大型企业和工厂里,货车夜间的照明是一直开着的,消耗了大量的能源,减少了照明电器的使用时间。因此,设计一种能够间歇工作的路灯自动控制系统,配合工厂道路夜间车辆的照明,实现最大限度的节能就显得尤为重要。此外,嵌入式系统已经渗透到我们生活的每个角落,如工业、服务业和消费电子产品.因此,本设计符合全社会倡导的节能大方向和嵌入式系统的发展趋势,将采用单片机作为控制器来改进工厂内的路灯控制系统,达到了系统节能和人性化的目的。2.方案论证和比较根据课题的要求,需要设计单元控制器系统和分支控制器系统。分控器可分为五个部分:MCU模

5、块、信号检测模块(位置和亮度)、远程通信模块、声光报警模块和时钟显示模块。控制器分为五个部分:单片机模块、远程通信模块、恒流驱动电源模块、显示模块和故障检测模块。其中,亮度检测模块和恒流源模块在题目中并没有要求,但为了使系统充分节能,要求灯具不仅能开关,还能根据周围光线的强弱自动调节灯具的亮度。该系统的基本结构如下:图1厂区道路路灯控制模拟系统示意图下面分析比较各部分的不同设计方案,确定各部分合适的设计方案。2.1.MCU模块方案一:采用ATMEL公司的51系列单片机AT89C51。ATMEL公司的51系列AT89C51只有基本的51系列MCU内核,需要构建复杂的外围电路才能完成任务,其硬件资

6、源无法满足要求。方案二:采用Microchip公司的PIC单片机。PIC16F877A是基于EPROM的8位高性能微控制器。与其他同价位的微控制器相比,在执行速度和代码压缩上都有很大的提升。但是这种芯片采用的是流水线系统,需要其特定的指令,性价比不够高。方案三:采用飞利浦的51系列单片机P89V51RD2。飞利浦的51系列MCU P89V51RD2,具有ISP(系统内编程)和IAP(应用内编程)功能,支持12时钟(默认)或6时钟模式,PCA(可编程计数器阵列)通过软件或ISP选择,具有PWM和捕获/比较功能,可编程看门狗定时器,易于兼容。基于以上分析,本设计采用第三种方案。2.2.信号检测模块

7、信号检测模块需要检测物体的位置和环境的明暗变化。这里,演示两种信号测量的设计方案。2.2.1、物体位置检测方案一:采用接近开关。采用接近开关。当移动物体经过指定位置时,接近开关动作,接近开关给CPU一个信号,执行相应的程序做出相应的响应。但该系统使用的接近开关有两个缺点:一是接近开关为接触式,使用寿命会受到限制;第二,接近开关只能固定在某一点,所以系统比较简单,比较死板。所以这个方案虽然可以满足题目的要求,但是不适合采用。方案二:采用激光测距。激光测距传感器的工作原理:激光传感器工作时,激光二极管对准目标发射激光脉冲。被目标反射后,激光向四面八方散射。部分散射光返回到传感器接收器,被光学系统接

8、收并在雪崩光电二极管上成像。雪崩光电二极管是一种具有放大功能的光学传感器,因此可以探测到极其微弱的光信号。记录并处理从发送光脉冲到接收光脉冲的时间,以确定目标距离。虽然这种方案可以使系统更加灵活,但是激光传感器必须极其精确地测量传输时间,因为光速太快,所以不选择这种方案。方案三:采用超声波测距。超声波传感器原理:超声波传感器是利用超声波的特性研制的传感器。超声波是一种机械波,其振动频率高于声波。它是由换能器晶片在电压激励下的振动产生的。它具有频率高,波长短,衍射小,特别是方向性好的特点,可以作为光线定向传输。超声波对液体和固体有很大的穿透力,特别是在不透明的固体中,可以穿透几十米深。超声波接触

9、杂质或界面时会产生显著的反射,形成回波,接触运动物体时会产生多普勒效应。因此,超声波检测广泛应用于工业、国防、生物医学等领域。该系统利用超声波实时测量物体的距离,实现对运动物体任意位置的测量。系统中的A、B、C、D、E点可以任意改变,系统具有很强的灵活性。通过改变物体的距离,可以实现光照的线性调节。基于以上分析,本设计中的物体位置检测模块采用方案3。2.2.2、环境明暗变化检测方案一:采用光电三极管。采用光电三极管加后调理电路实现明暗变化的检测,但只能实现数字量的变化,对光线的渐变效果较差,只能实现明暗的突变。方案二:采用光电感应模块。光电传感器模块可以实现光强变化的检测,但其成本较高,不宜使

10、用。方案三:采用光敏电阻。光敏电阻用来检测明暗的变化。光敏电阻会随着光线的逐渐变化而变化。虽然后期调理电路复杂,但这种方案可以实现光的线性变化。基于以上分析,本设计中的环境光检测模块采用方案3。2.3.遥控模块方案一:采用RS232C串行通信。RS232C串行通信是最常见的有线通信,最大传输速率20kbps,电缆最长15m,但不适合长距离信号传输。方案二:采用RS485串行通信。RS485串行通信也是一种常用的有线通信方式,特别是在工业控制场合,其最大通信距离可以达到2.0KM,可以满足本系统的要求。而有线通讯方式需要硬件电路连接,一旦路灯位置发生变化,更改起来比较繁琐。RS485虽然可以实现

11、系统功能,但不灵活,不宜采用。方案三:采用CAN总线通信。CAN总线是一种多主串行通信总线,可以高速传输大量数据,但成本较高。方案四:采用无线通讯。无线通信可以收发于一体,FSK调制,抗干扰能力强,特别适合工业控制场合,频率稳定度极佳,灵敏度高,工作电压低,功耗低,体积超小,直接连接CPU,硬件连接简单,软件编程非常方便。基于以上分析,本设计中的遥控模块采用方案4。2.4、声光报警模块方案一:采用带信号音的警示灯。报警装置采用带信号音的报警灯,但报警灯体积大,耗电量大。一个小小的路灯故障是不必要的。选项2:使用普通的led和扬声器。这种方法简单易行,使用普通的LED和扬声器,电路简单。方案三:

12、利用普通LED和语音播放模块,可以自行录制报警声音,让人声播报报警,设计更加人性化。通过以上分析比较,本设计选择方案三。2.5.显示时钟模块方案一:数码管显示,单片机计算时间。数码管直观地显示时间,但耗电量大,占用系统资源多。单片机计算时间,计算程序计算量大,时间精度不高。方案二:采用液晶显示,单片机计算时间。液晶显示器具有功耗低、体积小、显示容量丰富、超薄、重量轻等特点,但单片机单元计算时间,计算程序计算量大,时间精度不高,占用系统资源较多。方案三:采用液晶显示和专用时钟芯片。液晶具有微功耗、体积小、显示容量丰富、超薄、重量轻等特点。其显示时间可以直观地显示年、月、日、周等时间信息,占用系统

13、资源较少。DS1302是一款专用时钟芯片,具有万年历功能、时间准确、功耗低等特点。该方案简单、方便、易于实现。基于以上分析,本设计采用第三种方案。2.6.恒流驱动电源模块方案1:使用市售LED驱动恒流源。该方案简单,在实际使用中可以用恒流源驱动LED,但不能满足功率可调的要求。方案二:采用三端可调DC稳压集成芯片。在这种方案中,负载的恒流特性是通过调节滑动变阻器的阻值,改变其输出电压来实现的,但恒流驱动电源的输出功率不能自动控制。方案三:采用自制LED驱动恒流源。电压跟随器和电流负反馈电路由运算放大器构成,恒流驱动电源由单片机构成。恒流源的输出功率由PWM信号直接控制,实现输出功率的无级调节。

14、该方案简单方便,易于实现。基于以上分析,本设计采用第三种方案。2.7.故障检测模块方案一:光敏电阻加后调理电路检测照度。光敏电阻加后调理电路检测LED灯的照度。电路简单,但容易受环境光影响。方案2:电流检测加后级调理电路电流互感器和后调理电路用于检测是否有电流通过LED,但这种方案不适合实施。方案3:电压检测在这种方案中,LED的工作电流被转换成一个参考电压,与参考电压进行比较,以判断LED灯是否有故障。该方法简单、方便、易于实现。基于以上分析,本设计采用第三种方案。3.系统的总体结构和分析基于以上分析和方案选择,确定本设计的总体结构框图如图2所示。图2系统总体结构图4.方案的具体实现。下面将

15、介绍设计中几个关键环节的实现:4.1.MCU模块P89V51用于系统控制器,其主要特点如下: 80C51核心处理单元;5V工作电压,工作频率为0 40 MHz具有ISP(系统内编程)和IAP(应用内编程)功能的16/32/64kB闪存程序存储器;通过软件或ISP选择支持12时钟(默认)或6时钟模式; SPI(串行外设接口)和增强型UART; PCA(可编程计数器阵列),具有PWM和捕获/比较功能; 4个8位I/O口,包括3个大电流P1口(每个I/O口的电流为16ma); 3个16位定时器/计数器;可编程看门狗定时器(WDT); 8个中断源和4个中断优先级;两个DPTR寄存器;低EMI模式(AL

16、E禁用);兼容TTL和CMOS逻辑电平;电源故障检测;低功耗模式掉电模式,外部中断唤醒;空闲模式;最小单片机系统的原理图如图3所示。包括晶体振荡器、复位电路和电源电路。图3单片机最小系统电路图4.2.信号检测模块4.2.1超声波测距单元的电路设计这个电路是基于超声波发射的原理,在一秒钟内发出几个超声波,然后接收它们的回波。由于声波在空气中的传播速度较慢,利用发送和接收过程中产生的时间差,可以计算出前方物体与电路的实际距离。该模块可以实现周长为0.1米到30米的精确距离探测,精度为1厘米。根据题目要求,需要测试A、C、e三点之间的距离,因此在程序中加入了三段距离检测功能,使得当物体与电路的距离达

17、到一定值时,电路会输出一个控制信号,提供给支路控制器。单元电路有三组六个输出端子,每组有两个状态相反的输出,每组输出可以驱动200mA。电路部分连接有续流二极管,可以直接驱动继电器。超声波控制信号电路如图4所示。图4超声波控制信号输出电路图由于超声波测距模块的输出电平信号与单片机的输入信号不匹配,采用光电隔离电路实现信号转换,电路如图5所示。图5光电隔离电路图4.2.2环境光检测电路的设计环境光检测的电路图如图6所示。图6环境光检测电路图随着光线的增强,光敏电阻值越来越小,从而使a点的电压升高,这个电压经过运算放大器放大,经过比较器与参考电压比较后输出,再经过电压调节器箝位,输出高低电平信号。

18、4.3.远程通信模块远程通信模块应实现分控器与单元控制器之间的通信:分控器向单元控制器发送开灯和关灯的信号;控制器向支路控制器发送路灯故障信号和故障地址号的报警信号,通信采用自定义通信协议,其中加入了头尾码和数据校验部分,保证了通信的安全性和可靠性。远程通信模块采用PTR2000无线收发模块实现两台计算机之间的无线通信。该模块具有超小、超低功耗、高速、收发一体化的突出特点。其特点如下:收发合一;工作频率433MHz,这是国际数据传输频带;FSK调制,抗干扰能力强,特别适用于工业控制场合;采用DDS+PLL频率合成技术,频率稳定性极佳;高灵敏度,达到-105 DBM;最大发射功率+10 DBM;

19、工作电压低(2.7V),功耗低,仅8uA。;处于待机状态。具有两个通道,特别适用于需要多通道工作的特殊场合;工作速率最高可达20Kbit/s(也可工作在较低速率,如9600 bps);超小体积约40mm x 27mm x 5mm可直接连接CPU的串口,如8031,也可连接电脑的RS232接口。软件编程不是经常方便;由于低发射功率、高接收灵敏度的设计,无需申请牌照;标准DIP引脚间距,更适合嵌入式设备。每个引脚的功能定义如下:引脚:VCC,正电源,接2.75.25V2: CS,通道选择,CS=0选择工作通道1,即433.92MHz,CS=1选择工作通道2,即434.33MHz。引脚:do,数据输

20、出引脚4: DI,数据输入引脚:GND电源地6: PWR,节能控制,PWR=1正常工作状态,PWR=0待机微功耗情况7: TXEN,发送和接收控制,TXEN=1时,模块处于发送状态,TXEN=0时。模块处于接收状态。因为采用无线通信,发送和接收不能同步,所以用软件写了一个简单的通信协议:发送信号时,在有效数据前加一个两字节的标志位。在接收方的软件中,检测到标志位后会正式接收数据,收到尾码后会对数据进行校验。如果检查通过,当前数据将有效。无线通信模块与MCU之间的接口如图7所示。图7无线通信模块与单片机接口图4.4.声光报警模块在声光报警模块中,我们使用了普通的LED和语音播放模块,可以实现语音

21、播报报警。控制器检测路灯电流来判断路灯故障。如果有路灯故障,单元控制器向支路控制器发出信号,支路控制器通过单片机的P1.5P1.7引脚驱动LED,实现发光提示,并发出相应的人声广播。如果1号路灯损坏,指示灯亮的同时会有“路灯故障”语音播报,显示模块显示当前故障的地址号。语音模块接口电路如图8所示,灯光报警电路如图9所示。图8语音模块接口电路图图9灯光报警电路图4.5.显示时钟模块在时钟模块中,我们使用了DS1302芯片。实时时钟模块功耗低,可以计时年、月、日、周、日、时、分、秒。其突出特点是采用串行数据通信,占用系统资源少。时钟模块的电路图如图10所示。、图10时钟模块电路图液晶显示器以其微功

22、耗、体积小、显示容量丰富、超薄、重量轻等优点,在袖珍仪器和低功耗应用中得到了广泛的应用。这里使用的字符LCD模块是一种使用5x7点阵图形显示字符的LCD。按显示容量可分为1排16字、2排16字、2排20字等。本设计采用常用的1602液晶模块,2排16字。602 LCD模块和MCU之间的连接如图11所示。图11液晶显示模块连接电路图4.6.恒流驱动电源模块恒流驱动电源模块的原理图如图12所示:图12恒流驱动电源电路图工作原理:恒流源电路采用两级运算放大器,第一级运算放大器组成电压跟随器,提高整个电源的输入阻抗,C1和C2组成滤波器,赶走干扰信号。第二个电路构成负反馈。第一级运算放大器的输出电压:

23、UO1=UP1.3第二级运算放大器引入电流负反馈,所以同相端和反相端的输入电流为0,所以同相端U+被两个电阻R3和R4分压为UO1:U+=UO1U2的同相电压U+等于反相电压U-,所以uo = U-= U+= UO1 ?=R5的电流I5=,因为U2的反相端输入电流为0,TIP122发射极电流Ie= I5,又因为IcIe,恒流源电路的输出电流为:I=Ic Ie=可以看出,电源的输出电流与UP1.3成正比,当UP1.3保持不变时,可以保证电源的输出电流不变。同时,可以通过单片机的PWM输出来调节UP1.3,从而实现输出电流的可控。P89V51RD2的PWM模式原理如图13所示。图13 PWM模式因

24、为所有模块共享唯一的PCA定时器,所以它们所有的输出频率都是相同的。每个模块的输出占空比独立变化,这与所用的捕获寄存器CCAPnL有关。当PCA CL SFR的值小于CCAPnLSFR时,输出为低电平;当PCA CL SFR的值等于或大于CCAPnL时,输出为高电平。当CL的值从FF溢出到00时,CCAPnH的内容被载入CCAPnL。这样,PWM可以不受干扰地更新。要启用PWM模式,必须设置模块CCAPMn寄存器中的PWM和ECOM位。4.7.路灯故障检测模块一般可以通过检测电流来判断路灯故障。具体硬件设计原理图如图14所示。图14路灯故障检测电路图工作原理:故障报警电路利用电压比较电路向单片

25、机发出报警信号。当路灯发生故障时,通过灯的电流会极小甚至为零,不足以驱动LED发光,故障采样点的电压也会极小。故障点的电压与参考电压进行比较,使LM358输出高电平和低电平。参考电压通过滑动变阻器和R2分压为12V电压得到,通过调节滑动变阻器可以改变参考电压。工作过程:路灯正常工作时,如果故障采样点的电压大于参考电压,LM358会输出+12V的正饱和电压,通过限流电阻R3和稳压管接地,这样这个电路的输出电压就是稳压管两端的电压,高电平送到单片机。当灯出现故障时,采样电压低于参考电压,电路输出0,向单片机发送低电平,实现故障报警。应当注意,该电路是基于通过R1的电流产生的电压和参考电压之间的比较

26、。理论上路灯故障和路灯不工作之间不会有电流,所以电路很难区分。经过实际调试,在故障采样点和GND之间只需要连接一个LED就可以判别是故障还是停止工作。虽然电路不工作,但是电流很小。电流不经过运算放大器,而是流过LED,产生0.3左右的压降,这样和参考电压(小于0.3V)比较就不会误判。5.系统硬件电路原理图和软件程序流程图5.1.系统硬件电路原理图5.1.1分支控制器系统的电路原理图如图15所示。图15分支控制器电路原理图5.1.2单元控制器系统的电路原理图如图16所示。图16单元控制器电路原理图5.2.完成所需的单片机程序流程图。5.2.1分支控制器程序序列流程图实现设计主题基本要求和自我开

27、发的分支控制器程序流程图如图17所示。图17分支控制器程序流程图5.2.2单元控制器程序流程图实现设计主题基本要求和自我开发的单元控制器程序流程图如图18所示。图18单元控制器程序流程图6.系统的调试与分析将编写好的程序(见附录)写入单片机进行调试。6.1.特性试验为了测试模拟路灯控制系统的实际性能,对系统进行了测试。测试过程中使用的主要工具有可调亮度台灯、米尺等。具体测试目的、项目及相关测试结论如下:移动可移动物体。当可移动物体M从左至右到达A点时,路灯1亮;当物体M到达C点时,路灯1熄灭,路灯2点亮。实现定位和照明的基本要求如表1所示。m物体从右向左移动,灯正常开关。表1。街灯的灯光移动方

28、向移动方向物体位置1盏路灯2盏路灯结果左侧向正确A光出版正确的B光出版正确的C出版光正确的D出版光正确的E出版出版正确的正确向左侧E出版光正确的D出版光正确的C光出版正确的B光出版正确的A出版出版正确的通电后,液晶显示器显示系统时间,按键设置和修改整个支路路灯开关的时间,并显示。该开灯的时候,路灯就开,该关灯的时候,路灯就关。显示器的基本要求。使用可调亮度的台灯来改变环境亮度。光线强时灯灭,光线暗时灯亮。实现了自动开关机的基本要求。路灯正常工作时,灯泡1被故意拔出,导致电路故障,系统报警指示灯亮,宣布“路灯故障”,液晶屏显示“FLT:1”;故意拔掉灯泡2,导致电路故障,系统报警指示灯亮起,宣布

29、“路灯故障”,液晶屏显示“FLT:2”;同时故意拔掉灯泡1和2,导致电路故障,系统播报“路灯故障”。实现自报失败的基本要求。恒流驱动电源的检测:将恒流驱动电源接入100K可调电阻负载,改变负载大小,测量电流,大小符合要求。恒流源输出功率检测,PWM输出电压5V,通过调节功率驱动电路中的滑动变阻器W1,LED的功率可以达到1W;单片机输出PWM信号,实时检测LED两端的电压和通过的电流,使LED的功率在20%-100%之间变化。如测试表2所示。模拟系统完全节能。表2 PWM输出电压控制LED功率输出表CCAP0H电压(伏特)电流(毫安)功率(兆瓦)06.711501007四6.7148992八6

30、.68146975126.64144956166.35138876206.57136894246.55133871286.52130848326.5128832366.48126816406.46124801四十四6.44121779486.42119764五十二个6.4116742五十六岁6.38113721606.36111706646.34109691六十八6.32106670七十二个6.3104655766.29102642806.2799621846.2394586886.2193578926.29055896613835091046.12814961086

31、.1794821126.08764621166.04734411206.0270421124六六十八4081285.96643811325.94623681365.92603551405.9583421445.88五十六岁3291485.84五十二个3041525.82502911565.78462661605.76432481645.72412351685.7382171725.6735198注:占空比=(256- CCAP0H)/2566.2.结果分析以上测试结果充分表明,本设计方案完全实现了课题给出的基本要求,增加了更加人性化的自我开发设计。但由于外界因素的影响和时间的限制,虽然软硬件进

32、行了去干扰,但精度和准确度还有待进一步提高,模拟系统到实际应用系统也有待提高。6.3.功能的自我评估结合课题的特点和以往技术的积累,在设计、实现、调试和测试中突出了以下特点:分支控制器与单元控制器之间采用无线通信;运动物体位置检测:超声波测距传感器实时检测物体位置,实现位置与光线的交互;由于利用超声波实时检测物体的距离,系统中的A、C、E、B、D点可以任意改变,系统具有很强的灵活性。恒流驱动电源的输出功率采用PWM技术,PWM信号由单片机直接输出,最大限度地简化了功率调节的硬件电路,节约了系统成本,实现了功率的无级调节。采用语音报警,使设计更加人性化。7.附录7.1附录I:分支控制器程序/电子

33、设计大赛主控制器最终方案/分支控制器程序/确认键P2.3,设置键P2.2,添加键P2.0,移位键P2.1/分支控制器通信数据格式/前缀前缀接收者地址开关信号灯亮度信号灯尾码/单元控制器通信数据格式/首码,首码,接收方地址,本地地址是否为故障尾码。#包含#定义uchar无符号字符#定义自我_ADRR 0 x12#定义单元1_ADDR 1#定义单元2_ADDR 2/* -设置屏幕- */# define Clear _ 1602 write _(0 x 01)/清除屏幕#define HOME_1602 write_(0 x02) /光标返回原点/* -设置显示模式- */#define SHOW

34、_1602 write_(0 x0c) /打开无光标无闪烁显示#define HIDE_1602 write_(0 x08) /关闭显示# define cursor _ 1602 write _(0 x0E)/显示光标# DEFINE FLASH _ 1602 write _(0 x0D)/光标闪烁# define cur _ Fla _ 1602 write _(0 x0F)/光标显示并闪烁。uchar lcdweek21=0 x53,0 x75,0 x6e,0 x4d,0 x6f,0 x6e,0 x54,0 x75,0 x65,0 x57,0 x65,0 x64,0 x54,0 x68,

35、0 x75,0 x46,0 x72,0 x69,0 x53,0 x61,0 x 74 ;uchar time_data7=0 x09,0 x06,0 x09,0 x05,0 x01,0 x01,0 x 00 ;/年、周、月、日、小时、分钟、秒uchar time_data_D3=0 x00,0 x00,0 x 00 ;uchar time_data_13=0 x00,0 x00,0 x 00 ;/位标志;/,hr_7char ap24uchar MKEY,AKEYuchar激光_移动;/光标移动的次数uchar setkey _ nu/设置按键次数。uchar a;uchar keycerta

36、in _ nuled1_timebuf6=0 x00,0 x00,0 x00,0 x00,0 x00,0 x 00 ;/led1时间数据存储阵列led2_timebuf6=0 x00,0 x00,0 x00,0 x00,0 x00,0 x 00 ;/led2时间数据存储阵列/uchar timedatacd3=0 x03,0 x03,0 x 03 ;/从1302读取的数据uchar comsent 1 buf3= unit 1 _ ADDR,0 x00,0 ;/这台机器发送给第一单元的数据uchar comsent 2 buf3= unit 2 _ ADDR,0 x00,0 ;/由该机器发送到

37、单元2的数据uchar recbuf3=0 x06,0 x06,0 x 06 ;/这台机器接收的数据uchar com rec 1 buf3;/本机接收的单元1数据uchar com rec 2 buf3;/本机接收的单元2数据/显示部件uchar代码tab 1= :;uchar代码tab 2= :;uchar代码tab 3= :LEDON ;uchar代码tab 4= :LEDOFF ;uchar代码tab 5= :led 1 on ;uchar代码tab 6= :led 1 off ;uchar代码tab 7= :led 2 on ;uchar代码tab 8= :led 2 off ;/u

38、char self _ address;/本地地址为0/uchar unit 1 _ address;/uchar unit 2 _ address;uchar led1 _ remotecon/1号灯遥控,0 x00关,0 x01开。uchar led2 _ remotecon/2号灯遥控,0 x00关,0 x01开。uchar led1 _ fault/单位易登失败uchar led2 _ fault/第2单元灯故障uchar t,v;sbit clk=p25;sbit io=p26;sbit rst=p27;sbit bit0=acc0;sbit bit7=acc7;sbit cs=p3

39、2;sbit pwr=p33;sbit txen=p34;sbit lcden=p35;/使能信号,H被读取,跳到l时H被写入。sbit lcdrw=p36;/ H用于读取LCD数据,L用于向LCD写入数据。如果只是写,这个端口可以直接接地。sbit lcdrs=p37;/ H是数据,l是指令。uchar bdata programconsbit setkey=programcon0;/设置关键变量sbit keycertain=programcon1;/确定关键变量sbit timeadd=programcon2;/键控变量sbit unit1_rec=programcon3;sbit un

40、it2_rec=programcon4;/sbit receiver=programcon3;sbit sentdata=programcon5;/sbit sent_over=programcon4;sbit rec_over=programcon6;sbit u=programcon7;uchar数据显示控制;sbit hr_7=dispcontrl0;sbit flag=dispcontrl1;sbit all=dispcontrl2;sbit led1=dispcontrl3;sbit led2=dispcontrl4;sbit moveflag=dispcontrl5;sbit ad

41、dflag=dispcontrl6;sbit xxx=dispcontrl7;uchar bdata keyfunsbit auto_openclose=keyfun0;sbit lightersense=keyfun1;sbit moveobject=keyfun2;sbit error=keyfun3;void init _ 1602();写_(uchar);write_dat(uchar日期);gotoXY(无符号char x,无符号char y);disp_1602(uchar *p,uchar x1,uchar *q,uchar x2);新鲜(uchar m);write_1302(

42、uchar,uchar);uchar read _ 1302(uchar);写(uchar dat);read();read _ time();write_time()。write _ week();disp _ year();disp _ month();disp _ day();disp _ week();disp _ HR();disp _ min();disp _ sec();display _ time();uchar D _ BCD(uchar x);uchar BCD _ D(uchar x);void shuzuBCD _ D(uchar a);void qusangeshu(

43、uchar a);disp _ define time 11();disp _ define time 12();disp _ define time 21();disp _ define time 22();setledall _ 1602();setle D1 _ 1602();setled 2 _ 1602();dl _ 5 ms();functionkey();uchar mainkeys();uchar assist keys();mkeyprocess();akey process();setkey _ program();unit control();dl _ 100ms();v

44、oid ini(void);void comm sent(uchar * p);void play_voice(uchar led1,uchar led 2);超声波();void fault 1 _ 1602();void fault 2 _ 1602();void clear _ fault 1 _ 1602();void clear _ fault 2 _ 1602();主()乌恰尔一世;ini();/clear _ 1602();/key certain = 1;/receiver = 1;sent data = 1;TXEN = 1;for(I = 2150;I 0;我-);/uni

45、t 1 _ rec = 1;init _ 1602();write_1302(0 x8e,0 x 00);/WP=0write_1302(0 x90,0 x 00);/禁止TCSwrite_1302(0 x80,0 x 00);/CH=0/write _ time();write_1302(0 x8e,0 x 80);/WP=1write_time()。CLEAR _ 1602while(1)/function key();mkeyprocess();if(setkey)if(setkey_nu=0 x01)&!all) setle Dall _ 1602();all = 1;if(setke

46、y_nu=0 x02)&!le D1) setle D1 _ 1602();le D1 = 1;if(setkey_nu=0 x03)&!led 2) setled 2 _ 1602();led 2 = 1;akey process();if(移动标志)moveflag = 0;新鲜(激光_移动);if(addflag)add flag = 0;setkey _ program();if(setkey_nu 0;我-);comsent 1 buf1= le D1 _ remote con;comsent 2 buf1= led 2 _ remote con;for(I = 0;I 8;i+)c

47、omm sent(comsent 1 buf);for(I = 0;I 0;我-);/if(unit2_rec) /cs = 1;/TXEN = 0;/发送后,切换到接收,使用频率2。/for(I = 1500;I 0;我-);无效定时器0_int()中断1TL0 = 0;TH0 = 0;t+;if(t 6) t = 0;sentdata = sentdata/le D1 _ remote con = le D1 _ remote con; /* if(t 3) unit 2 _ rec = 1;unit 1 _ rec = 0;else unit1 _ rec = 1unit 2 _ rec

48、 = 0;*/接收器= 接收器;无效通信(无效)中断4乌恰尔一世;if(RI)ES = 0;while(RI = = 0);RI = 0;/接收第一个字节如果(SBMF!= 0 x EB)goto EXT;/前缀while(RI = = 0);RI = 0;/接收第二个字节如果(SBMF!= 0 x ed)goto EXT;while(RI = = 0);RI = 0;/接收第三个字节rec buf0= SBMF;if(recbuf0!= SELF _ ADRR)goto EXT;/如果地址不在本地,后续的数据就收不到了。for(I = 1;I 3;i+) while(RI = = 0);RI

49、 = 0;/接收后续数据rec bufI= SBMF;while(RI = = 0);RI = 0;/接收尾码if(SBMF=0 xec) if(rec buf1= = 0 x 01) for(I = 1;I 3;i+)com rec 1 bufI= rec bufI;if(rec buf1= = 0 x 02) for(I = 1;I 0;我-);/延迟超过500NSLC den = 1;for(I = 50;I 0;我-);/LC den = 0;/*3.写入数据*/Write_dat(uchar date)/数据 uchar I;/注意以下顺序:RS-发送数据-使能H-使能l。/whil

50、e(LCD _ busy();/检测繁忙LCD RS = 1;/写入数据P0 =日期;for(I = 50;I 0;我-);LC den = 1;for(I = 50;I 0;我-);LC den = 0;/*4.设置初始显示位置。*/gotoXY(无符号字符x,无符号字符y)如果(y=0)write _(0 x 80+x);如果(y=1)write _(0 x 80+(x+0 x 40);/*5.1602显示器*/disp_1602(uchar *p,uchar x1,uchar *q,uchar x2)gotoXY(x1,0);while(*p!=0)write _ dat(* p);p+

51、;gotoXY(x2,1);while(*q!=0)write _ dat(* q);q+;Write(uchar dat) /编写一个单字节子程序乌恰尔一世;ACC = datrst = 1;for(I = 8;I 0;我-)io = bit0clk = 0;clk = 1;ACC = 1;Read() /读取一个字节子程序乌恰尔一世;rst = 1;for(I = 8;I 0;我-)ACC = 1;io = 1;clk = 1;clk = 0;bit7 = ioWrite_1302(uchar,uchar num) /向1302写入一个数据子程序。clk = 0;rst = 0;write

52、();写(num);rst = 0;clk = 1;Uchar read_1302(uchar) /从1302中读取一个数据子程序clk = 0;rst = 0;write();read();rst = 0;clk = 1;返回ACCRead_time() /从1302读取:年/周/月/日/小时/分钟/秒子程序uchar i,j=0 x8d,k = 0;for(I = 7;I 0;我-)time _ datak+= read _ 1302(j);j-= 2;Write_time() /写1302:年/周/月/日/小时/分/秒子程序uchar i,j=0 x8c,k = 0;for(I = 7;

53、I 0;我-)write_1302(j,time _ datak+);j-= 2;/显示时钟的时间write_week()uchar temp,I;temp = time _ data1* 3;/周for(I = 3;I 0;我-)write _ dat(LCD weektemp+);显示年份()write _(0 x 80);/年份write _ dat(time _ data0& 0 xf 0) 4)+0 x 30);write _ dat(time _ data0& 0 x0f)+0 x 30);disp_month()write _(0 x 83);/月份write _ dat(tim

54、e _ data2& 0 xf 0) 4)+0 x 30);write _ dat(time _ data2& 0 x0f)+0 x 30);disp_day()write _(0 x 86);/天write _ dat(time _ data3& 0 xf 0) 4)+0 x 30);write _ dat(time _ data3& 0 x0f)+0 x 30);/*显示周()write _(0 x 88);/周write _ week();*/disp_hr()write _(0 xc 0);/hr如果(hr_7)write _ dat(time _ data4& 0 x 10) 4)+

55、0 x 30);其他write _ dat(time _ data4& 0 xf 0) 4)+0 x 30);write _ dat(time _ data4& 0 x0f)+0 x 30);disp_min()write _(0 x C3);/最小值write _ dat(time _ data5& 0 xf 0) 4)+0 x 30);write _ dat(time _ data5& 0 x0f)+0 x 30);disp_sec()write _(0 xc 6);/秒write _ dat(time _ data6& 0 xf 0) 4)+0 x 30);write _ dat(tim

56、e _ data6& 0 x0f)+0 x 30);显示时间()disp _ year();disp _ month();disp _ day();/disp _ week();disp _ HR();disp _ min();disp _ sec();/*将十六进制转换为BCD*/uchar D_BCD(uchar x)uchar y,yy,yyyYY =(x/10) 4;z * = 10y = y & 0 x0fy+= z;返回y;void shuzuBCD_D(uchar a)乌恰尔一世;for(I = 0;I 3;i+)time _ data _ DI= BCD _ D(aI);Voi

57、d qusangeshu(uchar a) /取时、分、秒乌恰尔一世;for(I = 0;I 3;i+)time _ data _ 1I= aI+4;新鲜(乌查尔米)if(m=0)gotoXY(1,0);if(m=1)gotoXY(4,0);if(m=2)gotoXY(7,0);if(m=3)gotoXY(1,1);if(m=4)gotoXY(4,1);if(m=5)gotoXY(7,1);/显示设置开灯和关灯时间的屏幕。disp_definetime11()uchar i,j;for(j=0,I = 0;j 4)+0 x 30);write _ dat(D _ BCD(le D1 _ tim

58、e bufI)& 0 x0f)+0 x 30);disp_definetime12()uchar i,j;for(j=0,I = 0;j 4)+0 x 30);write _ dat(D _ BCD(le D1 _ time bufI+3)& 0 x0f)+0 x 30);disp_definetime21()uchar i,j;for(j=0,I = 0;j 4)+0 x 30);write _ dat(D _ BCD(led 2 _ time bufI)& 0 x0f)+0 x 30);disp_definetime22()uchar i,j;for(j=0,I = 0;j 4)+0 x

59、30);write _ dat(D _ BCD(led 2 _ time bufI+3)& 0 x0f)+0 x 30);setledall_1602()disp_1602(tab3,0,tab4,0);disp _ define time 11();disp _ define time 12();gotoXY(1,0);FLASH _ 1602setled1_1602()disp_1602(tab5,0,tab6,0);disp _ define time 11();disp _ define time 12();gotoXY(1,0);FLASH _ 1602setled2_1602()d

60、isp_1602(tab7,0,tab8,0);disp _ define time 21();disp _ define time 22();gotoXY(1,0);FLASH _ 1602void comment(uchar x)/(uchar * p)uchar i,j;ES = 0;/准备发送数据,关闭串行中断。SBMF = 0 x EB;while(TI = = 0);TI = 0;/前缀for(I = 10;I 0;我-);SBMF = 0 x ed;while(TI = = 0);TI = 0;for(I = 10;I 0;我-);/* for(j = 0;j 0;我-);p+;

温馨提示

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

评论

0/150

提交评论