模拟路灯控制系统附硬件图及c程序剖析_第1页
模拟路灯控制系统附硬件图及c程序剖析_第2页
模拟路灯控制系统附硬件图及c程序剖析_第3页
模拟路灯控制系统附硬件图及c程序剖析_第4页
模拟路灯控制系统附硬件图及c程序剖析_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

1、摘要本文介绍了一个模拟路灯控制系统的应用方案,用以实现模拟路灯的智能控制。本方案以宏晶公司的MCU芯片STC12C5410AD为核心,加以简单的外围电路,实现了模拟路灯控制系统所要求的全部技术内容。STC单片机在最近几年应用越来越广泛,因其抗干扰能力强、稳定性好,性价比高,因此是低成本路灯控制解决方案的首选。该控制系统除了选用廉价的单片机芯片,还采用了廉价的红外对射传感器,大大降低了系统成本。整个系统的电路简单,结构紧凑,电源驱动仅采用变压器与三端稳压器相结合,附加少许滤波电容便实现了稳定的电源输出。经过多次测试,证实该系统能长时间稳定工作,完全满足设计要求指标。关键词:模拟控制;LED照明;

2、单片机3ABSTRACTThispaperintroducesasimulationcontrolsystemapplicationschemestreet,tosimulatethestreetlampofintelligentcontrol.ThisplantomacrocrystalcompanyMCU,STC12C5410ADasthecore,tochiptheperipheryofthesimplecircuit,realizethesimulationstreetlampcontrolsystemalloftherequestedtechnologycontent.STCSCMi

3、nrecentyearsmoreandmorewideapplication,becauseofitsstronganti-interferenceability,goodstability,highperformance/priceratio,andsoisthelowcoststreetlampcontrolsolutionsofchoice.Thecontrolsysteminadditiontochoosecheapsingle-chipmicrocomputerchip,alsoadoptedthecheapinfraredmutualilluminatesensor,andgrea

4、tlyreducethecostofsystem.Thewholesystemofthecircuitissimple,compactstructure,powerdriveonlyusedthreetransformerandtheregulators,andthecombinationofafewadditionalfiltercapacitancewillrealizethestablepoweroutput.Aftermanytest,andconfirmthatthesystemcanworkstablyforalongtime,fullymeetthedesignrequireme

5、ntsindex.Keywords:Simulatecontrolling;LEDlighting;Single-chipmicrocomputer1 系统设计11.1 设计要求11.1.1 基本要求11.1.2 发挥部分21.2 总体设计方案21.2.1 功能分解及设计思路21.2.2 方案论证与比较21.2.3 系统各模块的最终方案51.3 系统功能说明书(用户使用说明书)51.3.1 路灯的工作模式51.3.2 按键操作说明62 单元电路设计62.1 电源供电电路62.2 单片机最小系统72.3 输入与输出72.4 电流源驱动83 软件设计93.1 系统主程序流程图93.1.1 系统流程

6、图93.1.2 定时器溢出中断处理函数流程图103.1.3 按键扫描流程图113.2 系统子程序114 系统测试124.1 测试仪器124.2 指标测试134.2.1 各部分测试的指标134.2.2 系统实现的功能135 结论15参考文献16附录1程序代码17附录2硬件原理图29附录3PCB图(部分)301系统设计1.1 设计要求设计并制作一套模拟路灯控制系统。控制系统结构如图1.1所示:LED 灯 1LED 灯2图1.1模拟路灯控制系统路灯布置如图1.2所示:1.1.1 基本要求(1)支路控制器有时钟功能,能设定、显示开关灯时间,并控制整条支路按时开灯和关灯。(2)支路控制器应能根据环境明暗

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

8、,调节误差02%(3)性价比高,工作稳定,符合电磁兼容(EMC)方面的要求,无对外干扰或干扰小。1.2总体设计方案1.2.1 功能分解及设计思路本模拟路灯控制系统的设计方案要实现的主要功能主要分解为以下五个方面:( 1)是时钟功能及定时开关灯。( 2)是根据环境明暗变化,自动开灯和关灯。( 3)是根据交通情况自动调节亮灯状态:当汽车靠近路灯时,路灯能自动点亮;当汽车远离时,路灯自动熄灭。( 4)声光报警功能,当路灯出现故障时而不亮时,控制器发出信号,并显示有故障路灯的地址编号。( 5)是根据绿色节能照明要求,采用恒流源驱动LED路灯发亮且能调光,路灯驱动电源输出功率能在20%-100%

9、3;围内设定并调节,调节误差02%以上功能的实现,都是以单片机为核心,在单片机系统实现的输入输出和显示功能的基础上,由单片机的内置逻辑和运算功能,加上一定的外围电路得以实现。针对以上的五个功能,采用模块化的设计思想,以下分别叙述之。1.2.2 方案论证与比较(1)时钟功能及定时开关机【方案一】采用专用时钟芯片现在流行的串行时钟电路很多,如DS1302DS1307、PCF8485等。其优势是可以单独使用,直接连接到单片机外围,有自己独立的时钟晶振,精度较高。单片机通过串行接口读取和写入当前的时钟值,时钟芯片的运行受单片机死机的影响少。其缺点一是消耗了单片机IO口资源。二是在编程时需要增加读写串行

10、口的内容,消耗了单片机的运行时间。三是增加了成本。增加了时钟芯片及其外围电路的开支。DS1302的典型应用电路如图1.3所示:2011/06/17Ueek613:49:12 7,p '8p -g图1.3DS1302的典型应用电路【方案二】采用单片机内置时钟本方案直接利用单片机的内置定时器,通过定时器的中断和简单运算实现时钟功能。例如:STC单片机,在4M时钟时,单个指令的运行时间是1微秒,设置定时器1每125个指令周期产生一个中断,即125微秒,8个中断后,时间平台是1毫秒,设置以下时间计数变量分别为:ucharTo1mS二=0x00;/当该变量增加到某个数值时,表示经过了1毫秒uch

11、arTo2mS二=0x00;/当该变量增加到某个数值时,表示经过了2毫秒ucharIs2mS=0;/到达2毫秒时刻ucharTo20mS=0x00;/当该变量增加到某个数值时,表示经过了20毫秒ucharIs20mS=0;/到达20毫秒时刻ucharTo1S=0x00;/当该变量增加到某个数值时,表示经过了1秒ucharIs1S=:0;/到达1秒时刻在秒时间平台,用ToMIN变量,计数60秒后进入分钟平台,计数60分钟后,进入小时平台。方案二没有增加外置电路,充分利用了单片机的定时器功能,实施简洁方便,主要的缺点是当控制系统断电或死机以后,需要人工重新定时。本系统的时钟功能实现采用方案二。2)

12、根据环境明暗变化,自动开灯和关灯功能。【方案一】采用比较器的解决方案。光敏电阻与固定电阻串联,加一级电压跟随器后输入比较器,与比较器负输入端的电压值进行比较,得到一个高电平或低电平输出,进入单片机的IO口。优点是电路比较直观,操作比较方便,可直接通过电位器调节路灯的开启亮度。对维护人员的要求不高。缺点是不方便进行数码控制。【方案二】采用AD变换。光敏电阻与固定电阻串联,由单片机内置的AD变换接口读入当前的电压值,然后根据读取的电压值判断当前的环境亮度。路灯的开启电平由内部的变量控制。方案二的优点在于可以方便以实现对路灯开启电平的数码控制和远程控制。本系统采用方案二。(3)根据交通情况自动调节亮

13、灯状态。当汽车靠近路灯时,路灯能自动点亮;当汽车远离时,路灯自动熄灭。【方案一】采用工业级的光电传感器。这种光电传感器普遍运用于电梯、生产线等工业场所。优点是使用方便,型号很多,输出量是开关量,不需调理电路。缺点是价格较贵。【方案二】采用廉价的红外对射传感器。红外对射的特点是传输距离较远,能量集中。当没有物体遮挡时,红外光直射到红外探头上,红外接收管连续输出低电平到单片机,当有物体经过时,红外光被遮住,此时红外探头输出高电平到单片机。由于红外光的发射有一定的偏角,本设计利用了黑色套管遮挡红外发射灯头,以减少红外光的散失。本系统采用方案二。(4)故障报警功能采用光敏电阻检测路灯的亮度,同时排除环

14、境光的干扰。利用单片机的ADR,读入光敏电阻上检测到的路灯亮度值。(5)恒流源驱动LED及20%到100%范围内可调亮度。【方案一】采用恒流源驱动芯片,目前市场上成品的恒流源驱动芯片比较多,一般采用使用取样电阻调节输出电流的方式。这些芯片使用方便,性能较好,但价格较贵。【方案二】采用PWMT式驱动功率三极管输出驱动电流,用电流取样电阻用入LEDffi电回路,用AD口读取当前的电流值,实现闭环控制。方案二利用了单片机的AD变换资源,同时采用PWMT式,可以使LED工作在断断续续的状态,可以延长LED的使用寿命。本系统采用方案二。31.2.3 系统各模块的最终方案图1.41.3系统功能说明书(用户

15、使用说明书)1.3.1 路灯的工作模式本模拟路灯控制系统具备5种工作模式,分别是自动群控模式、自动分控模式、根据照度自动控制模式、根据交通情况自动控制模式、手动控制模式,下面对每种工作模式简单介绍如下:(1)自动群控模式在该模式下,支路控制器根据设定好的定时信息,自动地同时打开或者关闭两盏路灯。系统启动后默认进入该模式。(2)自动分控模式在该模式下,支路控制器根据设定好的定时信息,分别控制两盏路灯的开关,例如,当系统的时间和路灯1开灯的时间相等时,开启路灯1;当系统的时间和路灯2关灯的时间相等时开启路灯2。(3)根据照度自动控制模式在该模式下,当环境照度低于一定的值时开启两盏路灯,当环境照度高

16、于一定的值时关闭两盏路灯。(4)根据交通情况自动控制模式在该模式下,当可移动物体M由左到右到达S点时(见图XX),灯1亮;当物体M到达B点时,灯1灭,灯2亮;若物体M由右到左移动时,则亮灯的次序与上相反。(5)手动控制模式在手动模式时,两盏路灯只能由支路控制器用增加和减少键手动的调整亮度,路灯的亮度可以在0%100%自由的上下调整,步进为10%。(1)(4)等四种工作模式是互斥的,即在某一时刻只能具有其中的一种功能,不过各种模式可以手动的切换,手动调整路灯亮度的功能在这四种模式中都是有效的。另外,该路灯控制系统还具备故障检测功能,当路灯出现无法正常工作的状况时,该控制系统能够判定是哪一环节出现

17、问题,并将故障通过声音警报及数码管显示告知用户。1.3.2 按键操作说明支路控制器具备5个按键,分别为时间调整键、模式选择键、增加键、减少键、确认键。(1)时间调整键:按时间调整键时,可以循环地选择系统时间、路灯1和2共同的开关灯时间、路灯1的开关灯时间和路灯2的开关灯时间。(2)模式选择键:按模式选择键可以进行系统工作模式的切换,顺序为自动群控模式;自动分控模式;根据照度自动控制模式;根据交通情况自动控制模式;手动控制模式。(3)增加、减少键:按这两个键可以对时间或者亮度进行增减,长按时时间或者亮度可以连续变换。(4)确认键:确认键只在时间调整时有效,分别确认小时、分钟、秒的输入。2单元电路

18、设计2.1 电源供电电路该电路采用变压器与三端稳压器相结合。使220V电压经变压器变压,降为12V。过整流桥并利用两个容量较大的电容滤波,从而得到较为稳定的直流电压。通过7805型号的三端稳压器稳压之后,输出一个电压为5V,电流为750mA勺直流电源。2.2 单片机最小系统图2.2该控制系统的核心芯片采用的是STC12C5404AD,它的最小系统由STC单片机,电容和晶振组成。上电瞬间,电源经复位电容向单片机发送一个高电平信号,使单片机复位。同时晶振起振,使单片机工作。晶振的大小可根据实际需要进行选择,常用的晶振有4M,6M,11.0592M,12M,24M等。2.3 输入与输出按键输出采用A

19、D变换,节省了IO口资源。通过不同大小的电阻进行分压,按下不同的按键就会向单片机发送不同的电压值。如:按下si是0V;按下s2,电压=2K/(2K+10K)*5V=0.83V。经过单片机AD变换之后,就可以判断是哪个按键按下去,从而执行相应的功能。7图2.4显示输出该控制系统采用LED数码管显示输出。LED数码管最突出的特点是使用简单,价格低廉。在该系统中主要用来显示数字时钟,显示模式设定等。2.4 电流源驱动图2.5电流源驱动电路,是为驱动1W大功率LED灯而设计的。LED灯属于电流源驱动,根据计算,每个1W的LED灯至少需要200mA的驱动电流才能点亮,而单片机的IO输出电流实际只有20m

20、A到30mA,所以必须经过电流放大才能使其工作。因此在该电路中采用了一个9013对电流进行放大。113软件设计3.1 系统主程序流程图3.1.1 系统流程图c开始)单片机存储器%变量初始化显示初始化图3.1系统流程图3.1.2定时器溢出中断处理函数流程图开始图3.2定时器溢出中断处理函数流程图3.1.3按键扫描流程图图3.3按键扫描流程图3.2系统子程序本系统包含以下子程序/键盘处理voidKeyboardScan(void);/键盘扫描函数voidKeyboardOperate(ucharKeyNum);/按键处理函数/定时器处理voidInitTimer(void);/定时器参数设定及启动

21、/路灯控制voidBrightnessSet(ucharLightNum,ucharBrightness);/亮度调整/延时函数voiddelay(uinti);#/AD采样voidInitADC();ucharGetADCResult(ucharch);uintget_adc(ucharch);/显示函数voiddisplay();/蜂鸣器发生函数voidspeak();/ADC转换初始化/取ADC专换初值/对ADO值进行操作/*亮度调整函数*/voidBrightnessSet(ucharLightNum,ucharBrightness);/*中断处理程序*/voidt0()interru

22、pt1using1voidt1()interrupt34系统测试4.1测试仪器数字示波器:该系统采用红外对射传感器,因为它的正常工作需要外加38KHz的触发频率。数字示波器主要用来测量频率。万用表:在该系统中用来测量电压、电流、电阻等。334.2指标测试4.2.1 各部分测试的指标表12功能测试在舁厅P指标(目标值)实测值1故障指示(编号)LED上显示正确2过中点后前打凫后打火,试验成功率(100%)100%3自动开关灯功能,试验成功率100%4实时误差,米用时间加速方法(误差小于5MINJ)误差1MIN5单元控制器具有调光功能,路灯驱动电源输出功率能在规定时间按设定要求自动减小,该功率应能在

23、20%100%£围内设定并调节,调节误差02%电流从0mA®750mA度化平缓稳定4.2.2 系统实现的功能表21基本要求在舁厅P功能是否实现1支路控制器有时钟功能,能设定、显示开关灯时间,并控制整条支路按时开灯和关灯。是2支路控制器应能根据环境明暗变化,自动开灯和关灯。是3支路控制器应能根据交通情况自动调节亮灯状态:当可移动物体M(在物体前端标出定位点,由定位点确定物体位置)由左至右到达S点时(见图2),灯1亮;当物体M到达B点时,灯1灭,灯2亮;若物体M由右至左移动时,则亮灯次序与上相反。是4支路控制器能分别独立控制每只路灯的开灯和关灯时间。是5当路灯出现故障时(灯不亮

24、),支路控制器应发出声光报警信号,并显示肩故障路灯的地址编号。是表22发挥部分在舁厅P功能是否实现1自制单元控制器中的LED灯恒流驱动电源是2单元控制器具有调光功能,路灯驱动电源输出功率能在规定时间按设定要求自动减小,该功率应能在20%100%范围内设定并调节,调节误差02%。是表23特色功能在舁厅P功能是否实现1自制微型红外光发射与光敏电阻组合替代工业光电传感器是2利用单片机的AD变换功能,实现用一个IO口读多个按键是3使用单片机内部的定时器代替时钟芯片,实现时钟功能和定时开关机功能是4米用PWM与电流取样方式,实现闭环的恒流源控制是5结论该系统调试最终结果,符合本次设计的全部要求。经过功率

25、扩大、电网通讯等方面的改良,就能用于实际路灯控制。以其超低成本,高可靠性的特点,与其他现有成品相比,具有一定的竞争优势。该控制系统在调试过程中,遇到过一些与理论相差很大的实际问题。比如红外对射传感器的对焦问题,因为红外线是不可见光,对焦比较麻烦,但是借用其他辅助工具就会简单很多。最简便的方法是利用带摄像头的手机来获取红外光,从而能顺利完成对红外对射传感器的对焦。红外对射的接收部分,因受频率限制,只能接收频率在38KHz的红外信号,所以在调试过程中有一定的难度。经方案论证,采用PWM脉宽调制输出,是切实可行的最有效方案。程序书写如下:#include<reg51.h>sbitpwmo

26、ut=P1A1;/定义PWM输出端口voidinit()interrupt1/中断方式1TH0=0xff;TL0=0xf3;/定时器初值pwmout=pwmout;/对PWM输出取反,产生一高一低的脉冲信号voidmain()TMOD=0X11;/定时计数器工作在1方式TH0=0xff;TL0=0xf3;/初始化初值EA=1;ET0=1;TR0=1;/开总中断,允许定时器1中断,开定时器1中断while(1);参考文献1 于殿泓,王新年单片机原理与程序设计实验教程M西安:西安电子科技大学出版社,2007,82 赵文博,刘文涛.单片机语言C51程序设计M.北京:人民邮电出版社,2005,103

27、李爱秋红外线遥控12位电子密码锁的设计J温州职业技术学院学报第8卷第一期,20084 陈杰,黄鸿传感器与检测技术M北京:高等教育出版社,2010,85 周航慈.单片机应用程序设计技术M.北京:北京航空航天大学出版社,2011,26 李朝青.单片机原理及接口技术M.北京:北京航空航天大学出版社,2005,107 孙育才.MCS-51系列单片微型计算机及其应用M.东南大学出版社,2004,6.8 沈红卫.单片机应用系统设计实力与分析M.北京:北京航空航天大学出版社,2003.9 徐爱钧,彭秀华.单片机高级语言C51应用程序设计M.北京航空航天大学出版社,200610 曾一江.单片微机原理与接口技术

28、M.北京:科技出版社,2009,1211 康华光.电子技术基础(模拟部分)M.北京:高等教育出版社,2004,4附录1程序代码#include"STC12C5410AD.h"#include"intrins.h"#include<math.h>#defineuintunsignedint#defineucharunsignedcharuchardis=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x3e,0x77,0x40,0x00,0x76,0x71,0x37,0x79,0x31,0x

29、38;/10_V,A,-,熄灭,H,F_15,N,E,R,L/sfr ADC_RES =0xC6;/#define ADC_POWER 0x80#define ADC_FLAG 0x10#define ADC_START 0x08#define ADC_SPEEDLL 0x00#define ADC_SPEEDL 0x20#define ADC_SPEEDH 0x40#define ADC_SPEEDHH 0x60/ISP/#define ENABLE_ISP 0x83 / 系统工作时钟/ADC high 8-bit result register/ADC power control bit/

30、ADC complete flag/ADC start control bit/420 clocks/280 clocks/140 clocks/70 clocks<12MHz 时,对 IAP_CONTR 寄存器设置此值/sbitk1=P1A0;按钮sbitk2=P1A1;sbitk3=P1A2;sbitk4=P1A3;sbitk5=P1A4;sbitcgq_a=P1A3;sbitcgq_b=P1A4;sbitcgq_c=P3A0;sbitzishi=P3A1;/sbiten1=P3A4;/373使能端端码sbiten2=P3A5;/373使能端位码/sbitfeng=P3A7;/sbi

31、tled1=P3A2;sbitled2=P3A3;/函数定义部分uchard8;charshi=0,fen=0,miao=0,set_miao=0,pwm,k3num=0,set_fen=0;set_on_shi=0,set_off_shi=0,light=0,pwm_count=0;bitshijian_bit=1,pwm_bit=1,light_bit=1,bad_deng1=0,bad_bit=0,bad_deng2=0,display_bit=0,auto_mode=1,sdong=1,sdong_bit=0;uintsum2=0,shi_count=0,sum_deng1,sum_d

32、eng2,kk,jj,ff,ii;/voidIAP_Disable();ucharByte_Read(ucharaddh,ucharaddl);voidSector_Erase(ucharaddh,ucharaddl);voidByte_Program(ucharaddh,ucharaddl,ucharch);/voidInitADC();/ADC转换初始化ucharGetADCResult(ucharch);/取ADC转换初值uintget_adc(ucharch);/取ADC转换数据10位voiddelay(uinti);voidjiyi();voidread_jiyi();voidrun

33、_shijian();/延时1MS/voiddelay(uinti)/延时函数uinta,b;for(a=0;a<i;a+)for(b=0;b<120;b+);/voiddisplay()/显示函数uchari,s=0x01;for(i=0;i<8;i+)P2=disdi;en1=1;en1=0;P2=s;en2=1;en2=0;delay(4);P2=0xff;en2=1;en2=0;s=s<<1;voidchaizi()/拆字函数d0=shi/10;d1=shi%10;d2=12;d3=fen/10;d4=fen%10;d5=12;d6=miao/10;d7=

34、miao%10;voidspeak()/蜂鸣器发生函数feng=0;delay(10);feng=1;voidt0()interrupt1using1TH0=0Xfc;TL0=0X18;if(light_bit)if(pwm_count>=10)pwm_count=0;elsepwm_count+;if(pwm_count<=pwm)led1=led2=1;elseled1=led2=0;/sum2=get_adc(7);sum2=sum2*48/1000;if(sum2<5)led1=led2=1;elseif(sum2<15)pwm=9;elseif(sum2<

35、;35)pwm=0;elseif(sum2<45)led1=led2=0;else;if(shijian_bit)if(shi_count<500)shi_count+;elsemiao+;shi_count=0;if(miao>=60)miao=0;fen+;if(fen>=60)fen=0;shi+;if(shi>23)shi=0;/if(kk<=2000)kk+;elsekk=0;bad_bit=1;if(ff<=1000)ff+;elseff=0;ii+;bad_bit=0;if(ii=6)ii=0;/sum_deng1=get_adc(6);

36、sum_deng1=sum_deng1*48/1000;/光敏检测灯Aif(sum_deng1>=25)bad_deng1=1;elsebad_deng1=0;/sum_deng2=get_adc(5);sum_deng2=sum_deng2*48/1000;/光敏检测灯Bif(sum_deng2>=25)bad_deng2=1;elsebad_deng2=0;voidset_time()/设置时间while(1)shijian_bit=0;d5=12;d6=miao/10;d7=miao%10;d0=d1=d2=d3=d4=13;display();if(k4=0)while(!

37、k4)display();speak();if(miao<59)miao=miao+1;elsemiao=0;if(k5=0)while(!k5)display();speak();miao=miao-1;if(miao<=0)miao=59;if(k1=0)while(!k1)display();speak();gotom1;m1:while(1)shijian_bit=0;d2=12;d3=fen/10;d4=fen%10;d0=d1=d5=d6=d7=13;display();if(k4=0)while(!k4)display();speak();if(fen<59)f

38、en=fen+1;elsefen=0;if(k5=0)while(!k5)display();speak();fen=fen-1;if(fen<=0)fen=59;if(k1=0)while(!k1)display();speak();gotom2;m2:while(1)shijian_bit=0;d0=shi/10;d1=shi%10;d2=d3=d4=d5=d6=d7=13;display();if(k4=0)while(!k4)display();speak();if(shi<23)shi=shi+1;elseshi=0;if(k5=0)while(!k5)display()

39、;speak();shi=shi-1;if(shi<=0)shi=23;if(k1=0)while(!k1)display();speak();gotom3;m3:jiyi();shijian_bit=1;voidjiyi()/存储函数Sector_Erase(0x2a,0x00);delay(10);Byte_Program(0x2a,0x01,shi);delay(10);Byte_Program(0x2a,0x02,fen);delay(10);Byte_Program(0x2a,0x03,miao);delay(10);Byte_Program(0x2a,0x04,set_on_

40、shi);delay(10);Byte_Program(0x2a,0x05,set_off_shi);delay(10);voidread_jiyi()/读出存人的值shi=Byte_Read(0x2a,0x01);delay(10);fen=Byte_Read(0x2a,0x02);delay(10);miao=Byte_Read(0x2a,0x03);delay(10);set_on_shi=Byte_Read(0x2a,0x04);delay(10);set_off_shi=Byte_Read(0x2a,0x05);delay(10);voidset_on_off()/设置开关灯时间wh

41、ile(1)d3=0;d4=16;d5=12;d6=set_on_shi/10;d7=set_on_shi%10;d0=d1=d2=13;display();if(k4=0)while(!k4)display();speak();if(set_on_shi<23)set_on_shi=set_on_shi+1;elseset_on_shi=0;if(k5=0)while(!k5)display();speak();set_on_shi=set_on_shi-1;if(set_on_shi<=0)set_on_shi=23;if(k2=0)while(!k2)display();sp

42、eak();gotom1;m1:while(1)d2=0;d3=d4=15;d0=d1=13;d5=12;d6=set_off_shi/10;d7=set_off_shi%10;display();if(k4=0)while(!k4)display();speak();if(set_off_shi<23)set_off_shi=set_off_shi+1;elseset_off_shi=0;if(k5=0)while(!k5)display();speak();set_off_shi=set_off_shi-1;if(set_off_shi<=0)set_off_shi=23;if

43、(k2=0)while(!k2)display();speak();gotom2;m2:jiyi();shijian_bit=1;voidmain()/主函数P2M0=0x00;P2M1=0xff;TMOD=0x11;TH0=0Xfc;TL0=0X18;/TH1=0xff;TL1=0x9c;EA=1;ET0=1;TR0=1;/EA=1;ET1=1;TR1=1;P3M0=0x00;P3M1=0xff;InitADC();delay(10);read_jiyi();zishi=1;loop:if(bad_bit)if(bad_deng1=1)bad_deng1=0;gotoloop1;/1if(b

44、ad_deng2=1)bad_deng2=0;gotoloop3;/2if(bad_deng1=1&&bad_deng2=1)bad_deng2=bad_deng1=0;gotoloop2;/1.2if(k1=0)while(!k1)display();speak();set_time();/设置时间if(k2=0)while(!k2)display();speak();set_on_off();/设置开关灯时间if(sdong_bit)if(shi>=set_on_shi)led1=led2=0;sdong=1;if(shi>=set_off_shi)led1=l

45、ed2=1;sdong=0;chaizi();display();/if(k3=0)while(!k3);speak();k3num+;switch(k3num%2)case1:zishi=0;led1=led2=0;bad_bit=0;auto_mode=1;sdong=1;sdong_bit=0;light_bit=1;break;/自动模式case0:zishi=1;led1=led2=1;bad_bit=1;auto_mode=1;sdong=0;sdong_bit=1;light_bit=0;break;/手动模式if(auto_mode)/自动模式if(sdong)if(cgq_a

46、=0&&cgq_b=1&&cgq_c=1)led1=0;led2=1;/3.2开3.3关if(cgq_a=1&&cgq_b=0&&cgq_c=1)led1=1;led2=0;/3.2关3.3开if(cgq_a=1&&cgq_b=1&&cgq_c=0)led1=1;led2=1;/3.2关3.3关gotoloop;/loop2:if(ii=3|ii=6)bad_bit=0;gotoloop;bad_bit=0;d0=17;d1=18;d2=d5=12;d3=19;d4=1;d6=19;d7=2;/ER

47、-L1-L2display();if(bad_deng1=0|bad_deng2=0)gotoloop;gotoloop2;loop1:if(ii=3|ii=6)bad_bit=0;gotoloop;bad_bit=0;d0=17;d1=d2=d4=18;d3=0;d5=12;d6=19;d7=1;/ERROR-L1display();if(bad_deng1=0)gotoloop;gotoloop1;loop3:if(ii=3|ii=6)bad_bit=0;gotoloop;bad_bit=0;d0=17;d1=d2=d4=18;d3=0;d5=12;d6=19;d7=2;/ERROR-L2

48、display();if(bad_deng2=0)gotoloop;gotoloop3;/uintget_adc(ucharch)uintadc_r;adc_r=GetADCResult(ch)*4+ADC_LOW2;return(adc_r);/ucharGetADCResult(ucharch)ADC_CONTR=ADC_POWER|ADC_SPEEDLL|ch|ADC_START;_nop_();_nop_();_nop_();_nop_();/Mustwaitbeforeinquirywhile(!(ADC_CONTR&ADC_FLAG);/WaitcompleteflagADC_CONTR&=ADC_FLAG;returnA

温馨提示

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

评论

0/150

提交评论