已阅读5页,还剩73页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于AT89C2051的电子闹钟1.1 电子闹钟的功能与设计方案 1.1.1 电子闹钟的功能与设计要求1.1.1.1 电子闹钟的实现形式电子闹钟既可以通过纯硬件实现,也可以通过软硬件结合实现,根据电子时钟中核心部件秒信号的产生原理,通常有以下三种形式: 采用NE555时基电路的实现形式采用NE555时基电路或其他振荡电路产生秒脉冲信号,作为秒加法电路的时钟信号或微处理器的外部中断输入信号,可构成电子钟。由555构成的秒脉冲发生器电路见图。输出的脉冲信号V的频率F1.443(RA2RB)C,可通过调节这3个参数,使输出V的频率为精确的1z。图基于的秒脉冲发生器 采用石英钟专用芯片的实现形式采用石英钟专用计时芯片实现的电子钟,具有实现简单、计时精度高的特点。石英计时芯片(简称“机芯”)比较多,常见型号的有STP5512F、SM5546A和D60400等。现结合康巴丝石英钟常用的5512F型为例作一简单介绍。利用5512F的2秒输出信号作为秒加法电路的计数脉冲,可实现电子时钟。5512F的引脚图如图所示:图的引脚图其中,引脚7、8为外接晶振及振荡电路,引脚接电源正极,电源为1.5,引脚3、4原为指针用步进电机线圈的输出驱动,这里可用脚作为脉冲输出,频率决定于外接晶振的频率。 采用基于微处理器的实现形式利用微处理器的智能性,可方便实现具有智能的电子钟。由于微处理器均具有时钟振荡系统,利用系统时钟借助微处理器的定时计数器可实现电子钟功能。虽然,系统时钟的误差较大,电子钟的累积误差也可能较大,但可以通过误差修正软件加以修正。本章讨论的电子钟就是采用这种形式。1.1.1.2 电子闹钟的功能与设计要求就电子闹钟而言,一般应具有以下基本功能要求:能随意设定走时起始时间。对电子钟而言,最基本的功能是具有对时功能,即能随意设定走时起始时间。能设定闹铃时间。电子钟一般都具有闹铃功能,即预设定一个时间,一旦走时到该时间,电子钟能以声或光的形式告警提示(俗称“闹铃”、“打铃”)。能指示秒节奏,即秒指示。12小时24小时两种制式可选,以适应不同的需要。采用交直流供电电源。与石英钟不同的是,电子钟一般采用数码管等显示介质,因而必须以交流供电为主,以直流电源为后备辅助电源,并能自动切换。具有走时误差修正能力。1.1.2 设计方案的确定从以下几个方面来确定电子闹钟的设计方案:1.微处理器采用ATMEL的AT89C2051微处理器,是基于以下几个因素:1)89C2051为51内核,仿真调试软硬件资源丰富;2)性价比高,货源充足;3)DIP20封装,体积小,便于产品小型化;4)为EEPROM程序存储介质,1000次以上擦写周期,便于编程调试;5)具有IDLE和POWER-DOWN两种工作模式,便于进行低功耗设计;6)工作电压范围宽:2.76,便于交直流供电。2.显示电路就时钟而言,通常可采用液晶显示或数码管显示。由于一般的段式液晶屏,需要专门的驱动电路,而且液晶显示作为一种被动显示,可视性相对较差;对于具有驱动电路和微处理器接口的液晶显示模块(字符或点阵),一般多采用并行接口,对微处理器的接口要求较高,占用资源多。另外,89C2051本身无专门的液晶驱动接口,因此,本时钟采用数码管显示方式。数码管作为一种主动显示器件,具有亮度高、价格便宜等优点,而且市场上也有专门的时钟显示组合数码管。3.按键电路考虑到对时和设定闹铃时间这两种操作的使用频率不是很高,为了精简系统和节省成本,本时钟系统只设两个按键:1)键,对应系统的不同工作状态,具有3个功能:l 在复位后的待机状态下,用于启动设定时间参数(对时或定闹);l 在设定时间参数状态而且不是设定最低位(即分个位)的状态下,用于结束当前位的设定,当前设定位下移;l 在设定最低位(分个位)的状态下,用于结束本次时间设定。2)键,用于对当前设定位(编辑位)进行加1操作,根据1224小时工作模式和正在编辑的当前位的含义(时十位、时个位、分十位、分个位)自动进行数据的上限和下限判断。例如,对12小时制,小时的十位只能是0、1,如果当前值为0,则按1键后为1,再按1键则又回复到0。1.2 电子闹钟的硬件系统设计电子闹钟至少应包括秒信号发生器、时间显示电路、按键电路、供电电源以及闹铃指示电路等几部分。1.2.1 电子闹钟的硬件系统框架电子闹钟的系统框架如图示。在系统中,除了按键电路以外,还设计了“是否设定闹铃”、“1224小时制选择”等按钮电路。按键与按钮电路复位等辅助电路位数码管显示电路闹铃声光指示电路电源系统图时钟系统电路原理框图1.2.2 电子闹钟的主机电路设计电子闹钟的主电路指的是图中虚线框内部分,主要涉及到微处理器电路和按键按钮电路。主机的设计具体地说有:)系统时钟电路设计;)系统复位电路设计;)按键与按钮电路设计;)闹铃声光指示电路设计。以下分别讨论:1.系统时钟电路设计系统时钟电路的设计如图。对于时间要求不是很高的系统,只要按图进行设计就能使系统可靠起振并稳定运行。但由于图中的C1、C2电容起着系统时钟频率微调和稳定的作用,因此,在本闹钟系统的实际应用中一定要注意正确选择参数(3010 PF),并保证对称性(尽可能匹配),选用正牌厂家生产的瓷片或云母电容,如果可能的话,温度系数要尽可能低。实验表明,这2个电容元件对闹钟的走时误差有较大关系。图系统时钟电路2.系统复位电路设计智能系统一般应有手动或上电复位电路。复位电路的实现通常有两种方式:)RC复位电路;)专用监控电路。前者实现简单,成本低,但复位可靠性相对较低;后者成本较高,但复位可靠性高,尤其是高可靠重复复位。对于复位要求高、并对电源电压进行监视的场合,大多采用这种方式。l 专用监控电路专用监控电路又称电源监视电路,具有上电时可靠产生复位信号和电源电压跌落到“门槛值”时可靠产生复位信号等功能。按有效电平分,有高电平输出、低电平输出两种;按功能分,有简单的电源监视复位电路、带“看门狗”定时器(WATCH DOG,又简称“WDT”)的监控电路、和WDTEEPROM的监控电路等多种类型。比较常见的生产厂家有MAXIM、PHILIPS、IMP以及DALLS等,系列微处理器中常用的型号有MAX813L、MAX809、X25043/5等。l RC复位电路本系统采用的是这种复位方式。RC复位电路的实质是一阶充放电电路,现结合图说明这种复位电路的特点。系统上电时该电路提供有效的复位信号RST(高电平)直至系统电源稳定后撤销复位信号(低电平)。理论上说,系列单片机复位引脚只要外加2个机器周期的有效信号即可复位,即只要保证tRC2M(机器周期)便可,但实际设计中,通常取C1为10以上,R1通常取10K左右。实践发现R1如果取值太小,例如1,则会导致RST信号驱动能力变差而无法使系统可靠复位。另外,从图的复位信号波形图可以明显看出,图中的虚线所接的续流二极管D1对于改善复位性能,起到了重要作用,它的作用是在电源电压瞬间下降时使电容迅速放电,因此一定宽度的电源毛刺(如波形中A点)也可令系统可靠复位。图为未加二极管和加二极管的复位信号特性对比。图复位电路图加二极管前后的复位信号特性对比3.按键与按钮电路设计按键与按钮电路的设计参见系统电原理图中的S1、S2和S3对应部分。按键与按钮电路设计中关键要考虑的就是按键去抖动问题(简称“去抖”),一般有硬件去抖和软件去抖两种方式。过去硬件去抖电路通常采用分立元件或触发器实现,目前市场上已有硬件去抖专用接口芯片,例如:MAXIM公司MAX68166818,均为单电源供电,电压为2.75.5,分别为单输入、双输入和八输入,输出端具有欠压锁定功能。这里考虑到系统的硬件简化和成本没有采用硬件去抖,而采用软件去抖。4.闹铃指示电路设计闹铃指示可以有声或光两种形式。本系统采用声音指示。关键元件是蜂鸣器。蜂鸣器有无源和有源两种,前者需要输入声音频率信号才能正常发声,后者则只需外加适当直流电源电压即可,元件内部已封装了音频振荡电路,在得电状态下即起振发声。市场上的有源蜂鸣器分为3、5、6等系列,以适应不同的应用需要。其电路设计参见系统电原理图。其中PNP小功率三极管Q2采用9012,其最大集电极电流为800m,完全满足蜂鸣器驱动的需要。适当调节基极电阻可改变蜂鸣器的发声功率(即响度)。1.2.3 电子闹钟的显示电路设计显示采用共阳数码管,其目的是为了简化限流电路的设计和实现亮度可调的要求。4位数码管显示电路见图。从图中可知,该显示电路采用了与一般的段电流电阻限流方式不同的实现方式,由此减少了4832个限流电阻,简化了硬件系统。每一笔画段二极管正常发光时的电流一般为10m左右(当然,电流大小取决于选用的数码管是普亮、高亮还是超高亮类型的不同),其两端压降约为2.0,也就是说,只要数码管的公共端(COM)加2.0以上电压,即可满足每笔画段发光二极管的发光要求,而且适当调节此电压值即可改变发光二极管的电流,从而达到调节亮度的目的。此电压采用三端可调稳压电路W1(LM317)来实现。其输入为5,按照图中参数,其输出电压由公式决定:()图位共阳数码管显示电路式中,R5为200,R6可调,R4为220,因此输出电压为2.172.63。但由于输入输出压差至少为2.5,因此极限电压为2.5。为了节约CPU的口线,显示采用了串行通信口的串行显示接口方式,利用串口的0工作方式在发送TXD端口(P31)的时钟信号的作用下通过接收RXD端口(P30)将显示段码串行数据送入8位串入并出移位寄存器74LS164,控制相应的数码管。图只画出了一个数码管的连接。端口P32的作用是通过LM317控制数码管显示的开启与关闭,当P32为低电平时Q1关断,317的输出电压低于1.5,不足以发光,避免了在显示数据刷新时显示的抖动现象。1.2.4 电源设计由于89C2051通常有12和24两种型号,对应的时钟频率分别为12M和24Mz,前者的工作电压为26,后者的工作电压为46,这点在设计选用时应当予以注意。考虑到交直流两用的要求和三端稳压电路选用的方便(通常的系列为5,6,),选择工作电压为5。电源系统设计如图示。图闹钟的电源系统原理图应当说明的是,尽管有很多型号的7805三端稳压集成芯片,其标称最大输出电流均为1.5,但在实际应用中,该最大输出电流值往往取决于两个方面:)足够的散热面积;)不同的生产厂家。按照很多开发者的经验,公司的7805三端稳压芯片能接近标称值。在设计中,必须保证7805的输入电压i和输出电压o的压差大于2.5,即io2.5,否则失去稳压能力,同时考虑到功耗问题,此压差又不宜太,太大则增加7805本身的功率消耗,增加芯片的温升,不利于安全。因此,选为。当交流电源失电或失效时,电压为的直流电源(电池组或蓄电池)通过二极管投入作用,硅二极管的导通电压降约为0.2左右,因此满足系统的电源要求。1.2.5 硬件电原理图系统的硬件电原理图见图。图电子闹钟的系统电原理图1.3 电子闹钟的软件系统设计软件设计的重点在于秒脉冲信号的产生、显示的实现、以及按键的处理等方面。关于显示实现和按键处理的软件设计参见本节相应小节。这里主要讨论秒脉冲的产生原理。基于软件的秒脉冲信号通常有延时法和定时中断法。延时法一般采用查询方式,在延时子程序前后必然需要查询和处理的程序,导致误差的产生,因此其秒脉冲的精度不高;中断法的原理是,利用单片机内部的定时器溢出中断来实现。例如,设定某定时器每100ms中断1次,则10次的周期为1s。这种实现法的特点是精度高,秒脉冲的发生和其他处理可以并行进行。本系统采用这种方式,实现的关键是定时器工作方式的选择和定时参数的计算设定。具体内容参见源程序中的相关说明。本系统中所使用的晶振频率为6Mz。1.3.1 软件系统中的主模块设计主模块是系统软件的主框架。结构化程序设计一般有“自上而下”和“自下而上”两种方式,“自上而下”法的核心就是主框架的构建。它的合理与否关系到程序最终的功能的多少和性能的好坏。本系统的主模块的程序框图用图的表示。具体代码实现以下分别讨论,注意,代码中的有关变量的含义和作用要参阅源程序清单部分的说明。系统初始化定时器初始化定时器初始化串口初始化显示待机指示符设定闹铃时间判设置闹铃时间否?显示刷新启动走时有关变量初始化刷新显示判时或分变化否?秒指示判秒到否?闹铃判是否到闹铃时间?延时YYYY图主程序流程框图1.主模块的汇编语言实现以下程序为上述主模块的汇编语言实现,有关设计思想在程序中均作了详细分析说明。MAIN:MOVSP,#60H;堆栈设置LCALLSYS_INIT;系统初始化LCALLT0_INIT;定时器初始化LCALLT1_INIT;闪烁用定时器初始化LCALLUART_INIT;串口初始化LCALLDISPLAYP;显示待机符P.LCALLSETTIME;等待设置当前时间JBS3,MAIN_00;判是否设置闹铃LCALLSETWARN;是,则设定闹铃时间SETBWARNSETTED;设置已设定闹铃时间标志MOVWARNCNT,#0;闹铃次数清0(否则会闹1分钟)CLRTFIX;误差开始修正标志初始化MOVCOUNT,#0MAIN_00:LCALLDISPLAY1;必须再次刷新,否则会出现尾位不显示的情况MAIN_0:SETBTR0;设置完后开始走时,启动定时器T0SETBET0;允许T0溢出中断MAIN_1:JBFRESH,MAIN_2;时(分)有变化,则刷新显示SJMPMAIN_3;否则,不更新显示MAIN_2:LCALLDISPLAY1;先对时分数据进行HEX2BCD转换后显示SJMPMAIN_3;进入死循环,只有复位才能重新设置MAIN_3:JBCSEC,MAIN_4;判秒到否SJMPMAIN_1MAIN_4:CPLL1;到则进行秒指示CPLL2JNBWARNING,MAIN_5CPLBEEP;开始闹铃INCWARNCNT;闹铃次数+1MOVA,WARNCNTXRLA,#08JNZMAIN_5;到8次(实际是4次),则停止CLRWARNINGMOVWARNCNT,#0MAIN_6:SETBBEEPMAIN_5:MOVR6,#60LCALLDEL20_0;点亮时间(不能太长,否则影响秒指示,短则太暗)SJMPMAIN_12.主模块的语言实现以下代码为上述主模块的语言实现,该实现中没有闹铃时间设定功能。void main(void)sys_init();/* 系统初始化 */t0_init();/* 定时器初始化 */t1_init();uart_init();/* 串口初始化 */buf0=0x0a;/* P.的段码送显示缓冲区 */buf1=0x0b;buf2=0x0b;buf3=0x0b;display();/* 显示待机符P. */settime();/* 等待设置当前时间 */display();/* 带闪烁后要加显,否则会出现尾位不显的现象 */TR0=1;/* 设置完后开始走时,启动定时器T0 */ET0=1;/* 允许T0溢出中断 */while(1)if(fresh)/* 判是否要刷新显示(分或时变化) */buf0=hourh;/* 是,则新的时间送显示缓冲区 */buf1=hourl;buf2=minuh;buf3=minul;display();/* 显示刷新 */if(sec)/* 判秒指示要刷新否 */sec=0;/* 是,则刷新(闪烁) */L1=!L1;L2=!L2;delay20ms();/* 点亮时间不能太长,否则影响秒指示,短则太暗 */elseif(sec)sec=0;L1=!L1;L2=!L2;delay20ms();1.3.2 基本显示模块设计基本显示模块设计的重点是由显示代码取得相应的段码、显示段码数据的串行发送,程序流程如图所示。其中时个位的段码必须加上小数点,即带小数点显示时个位,目的是以小数点符代替时间分割符“:”(因为一般的数码管无法显示字符“:”)。将进制时分数据转化为显示代码关显示以免显示抖动通过串口将时十位段码送入对应的将时个位段码送入对应的(以小数点代:)将分十位和个位段码送入各自对应打开显示图基本显示模块的程序流程图1.基本显示模块的语言实现以下代码为基本显示模块的汇编语言实现。DISPLAY:LCALLHEX2BCD;数据转换DISPLAY1:SETBDISPCON;关闭显示MOVA,HOURH;取出小时数据ADDA,#30H;加上偏移量MOVCA,A+PC;取出段码MOVSBUF,A;送入74LS164DL1:JNBTI,DL1;等待发送完成CLRTIMOVA,HOURLADDA,#24HMOVCA,A+PCANLA,#0FEH;显示时分分隔符:(这里用.代替)MOVSBUF,ADL2:JNBTI,DL2CLRTIMOVA,MINUH;分ADDA,#16HMOVCA,A+PCMOVSBUF,ADL3:JNBTI,DL3CLRTIMOVA,MINULADDA,#0AHMOVCA,A+PCMOVSBUF,ADL4:JNBTI,DL4CLRTICLRDISPCON;打开显示RET;*;09的段码(共阳数码管);*;74LS164的3 4 5 6 10 11 12 13 对应数码管的A,B,C,D,E,F,G,DP;但是串口方式0发送的首位是最最低位,因此Q0Q7中的Q0其实是最高位,SEGTAB:DB03H,9FH,25H,0DH,99HDB49H,41H,1FH,01H,09HDB0FFH2.基本显示模块的语言实现以下代码为基本显示模块的语言实现。void display(void)uchar out;DISPCON=1;/* 关闭显示,防止传送数据期间闪烁 */out=segbuf0;/* 取出高位时段码 */SBUF=out;/* 送入74LS164 */while(!TI);/* 等待发送完成 */TI=0;out=segbuf1;/* 取出低位时段码 */out&=0xfe;/* 显示时分分隔符:(这里用.代替)*/SBUF=out;while(!TI);TI=0;out=segbuf2;/* 分*/SBUF=out;while(!TI);TI=0;out=segbuf3;SBUF=out;while(!TI);TI=0;DISPCON=0;/* 所有数据已送入后开显示*/1.3.3 当前编辑位闪烁功能的实现当前编辑位闪烁功能能使时间设定编辑模块的人机环境更加友善,其实现的原理是:利用定时器1每100ms的溢出中断,实现每0.5s将闪烁位标志求反;在时间设定模块中根据此标志的状态,分别显示当前时间参数或关闭显示,达到每0.5s亮灭交替的效果,即闪烁。上述思想用程序框图表示为图。定时器1的中断程序思想参见下面代码中的注释说明。将显示全灭段码送显示缓冲区将目前设定的时间参数送显示缓冲区闪烁标志为真?调用基本显示程序模块图当前编辑位闪烁功能实现的程序流程1.当前编辑位闪烁功能的语言实现以下代码为当前编辑位闪烁功能的汇编语言实现,是从时间设定模块中截取的一部分。SET_0:JNBSS,SET_06;判闪烁标志(一亮一灭)JNBHH,SET_02;为真,则当前位灭MOVHHBACK,#0AH;灭的代码MOVHLBACK,HOURL;其他显示位送该缓冲区MOVMHBACK,MINUHMOVMLBACK,MINULSJMPSET_01SET_02:JNBHL,SET_03MOVHHBACK,HOURHMOVHLBACK,#0AH;灭的代码MOVMHBACK,MINUHMOVMLBACK,MINULSJMPSET_01以下为定时器1的100ms定时溢出中断子程序。TIMER1:PUSHACCMOVTH1,#3CH;100ms定时常数MOVTL1,#0B0HINCCOUNT;中断次数加1MOVA,COUNTXRLA,#5;判到5次(0.5s)否,不到直接返回JZTIMER1_0POPACCRETITIMER1_0:CPLSS;ss闪烁标志求MOVCOUNT,#0POPACCRETI2.当前编辑位闪烁功能的语言实现以下代码为从时间设定模块截取的闪烁功能实现部分。buf0=hourh;/* 将目前设定的参数送显示缓冲区 */buf1=hourl;buf2=minuh;buf3=minul;if(ss) /* 这部分程序实现了当前位闪烁 */switch(setflag)/* 判当前设定位 */case 0x01: buf0=0x0b;/* 全暗代码 */break;case 0x02: buf1=0x0b;break;case 0x04: buf2=0x0b;break;case 0x08: buf3=0x0b;break;display();以下为定时器1的100ms定时溢出中断的代码:void timer1(void) interrupt 3 using 1 TH1=0x3c;/* 100ms定时常数 */TL1=0xb0;count+;/* 中断次数加1*/if(count!=5)/* 判到10次(1s)否,不到直接返回 */return;ss=!ss;/* ss闪烁标志求反 */count=0;1.3.4 时间设定模块设计时间设定模块的设计要点是按键的去抖处理与“一键多态”的处理。即只涉及个键完成了位时间参数的设定。软件法去抖动的实质是软件延时,即检测到某一键状态变化后延时一段时间,再检测该按键的状态是否还保持着,如是则作为按键处理,否则,视为抖动,不予理睬。去抖中的延时时间一般参考资料多描述为10ms左右,实际应用中,应大于20ms,否则,会导致按一次作多次处理,影响程序正常执行。“一键多态”即多功能键的实现思想是,根据按键时刻的系统状态,决定按键采取何种动作,即何种功能。其实现流程如图。设置键吗?设置模块初始化将在编参数送显示缓冲区闪烁标志为真?将当前位的显示代码置暗代码调基本显示模块刷新显示设置键吗?当前编辑位下移(下一位)当前编辑的是分各位?结束设定键吗?根据当前位的性质分别进行处理(含上下限判断)图时间设定模块流程图1.时间设定模块的语言实现时间设定模块的汇编语言程序实现如下,按键去抖问题在程序中已有清晰阐述,需要注意的是,这里的代码是基于12小时制的。SETTIME:LCALLS1KEY;先等待S1按键MOVSECOND,#00HMOVMINUTE,#00MOVHOUR,#00MOVHOURH,#00;00.00显示数据送缓冲区MOVHOURL,#00MOVMINUH,#00MOVMINUL,#00MOVSETFLAG,#00SETBHH;设置当前位标志CLRSS;闪烁标志初始化(清除)SETBTR1;启动定时器T1SETBET1;允许T1溢出中断MOVCOUNT,#0SET_0:JNBSS,SET_06;判闪烁标志(一亮一灭)JNBHH,SET_02;为真,则当前位灭MOVHHBACK,#0AH;灭的代码MOVHLBACK,HOURL;其他显示位送该缓冲区MOVMHBACK,MINUHMOVMLBACK,MINULSJMPSET_01SET_02:JNBHL,SET_03MOVHHBACK,HOURHMOVHLBACK,#0AH;灭的代码MOVMHBACK,MINUHMOVMLBACK,MINULSJMPSET_01SET_03:JNBMH,SET_04MOVHHBACK,HOURHMOVHLBACK,HOURLMOVMHBACK,#0AH;灭的代码MOVMLBACK,MINULSJMPSET_01SET_04:MOVHHBACK,HOURHMOVHLBACK,HOURLMOVMHBACK,MINUHMOVMLBACK,#0AH;灭的代码SET_01:MOVR0,#HHBACK;备份区数据送显SJMPSET_05SET_06:MOVR0,#HOURH;时钟数据送显SET_05:LCALLDISPLAYNEWJBS1,SET_1;循环扫描S1,S2键,并进行相应处理LCALLDELAY20MSJBS1,SET_1JBML,SET_00;当前位是分各位,按S1键则结束设定状态,开始走时MOVA,SETFLAGRLA;当前位右移1位(标志左移1位)MOVSETFLAG,A;回存(否则,标志位不改变导致编辑不移位)SJMPSET_0SET_00:CLRTR1;关T1及中断CLRET1LCALLSETVALUERETSET_1:JBS2,SET_0LCALLDELAY20MSJBS2,SET_0JNBHH,SET_2;根据当前位标志,对当前位变量进行+1处理INCHOURHMOVA,HOURHXRLA,#2;小时高位只能01JZSET_10LJMPSET_0SET_10:MOVHOURH,#0;否则,回0LJMPSET_0SET_2:JNBHL,SET_3INCHOURLMOVA,HOURHJNZSET_20MOVA,HOURLXRLA,#0AH;小时低位只能是02JZSET_21LJMPSET_0SET_21:MOVHOURL,#0;高于则回0LJMPSET_0SET_20:MOVA,HOURLXRLA,#03H;小时低位只能是02JZSET_22LJMPSET_0SET_22:MOVHOURL,#0;高于则回0LJMPSET_0SET_3:JNBMH,SET_4INCMINUHMOVA,MINUHXRLA,#6;分高位只能是05JZSET_30LJMPSET_0SET_30:MOVMINUH,#0LJMPSET_0SET_4:INCMINULMOVA,MINULXRLA,#0AHJZSET_40LJMPSET_0SET_40:MOVMINUL,#0LJMPSET_02.时间设定模块的语言实现以下代码为时间设定模块的语言程序实现。void settime(void)uchar i;while(S1);/* 等待S1键开始设置 */for(i=0;i4;i+)delay20ms();/* 延时去抖动 */while(S1);setflag=0;ss=0;hh=1;/* 设置当前位标志 */TR1=1;/* 启动定时器T1 */ET1=1;/* 允许T1溢出中断 */while(1)buf0=hourh;buf1=hourl;buf2=minuh;buf3=minul;/*/if(ss) /* 这部分程序实现了当前位闪烁 */switch(setflag)/* 判当前设定位 */case 0x01: buf0=0x0b;/* 全暗代码 */break;case 0x02: buf1=0x0b;break;case 0x04: buf2=0x0b;break;case 0x08: buf3=0x0b;break;/*/display();if(S1) goto sett_1;for(i=0;i4;i+)delay20ms();/* 延时去抖动 */if(S1) goto sett_1;if(ml) TR1=0;/* 关闭定时器T1 */ET1=0;/* 禁止T1溢出中断 */buf0=hourh;buf1=hourl;buf2=minuh;buf3=minul;return;/* 如果当前编辑的份低位,则按S1键结束设定 */setflag=1;/* 当前位右移(标志左移1位) */continue;sett_1:if(S2)continue;for(i=0;i4;i+)delay20ms();/* 延时去抖动 */if(S2)continue;if(!hh) goto sett_2;hourh+;/* 时高位加1处理 */if(hourh!=2) continue;hourh=0;/* 时高位只能是0,1 */continue;sett_2:if(!hl) goto sett_3;hourl+;/* 时低位加1处理,高位为0,可以是09,否则,只能02 */if(hourh) goto sett_20;if(hourl=10) goto sett_21;continue;sett_21:hourl=0;continue;sett_20:if(hourl=3) goto sett_22;continue;sett_22:hourl=0;continue;sett_3:if(!mh)goto sett_4;minuh+;/* 分高位加1处理,只能是05 */if(minuh=6) goto sett_30;continue;sett_30:minuh=0;continue;sett_4:minul+;/* 分低位加1处理,只能是09 */if(minul=10) goto sett_40;continue;sett_40:minul=0;continue;1.3.5 秒脉冲发生器原理与走时处理软件秒脉冲发生器其实质是利用了定时器0的定时溢出中断,将它设定为100ms溢出中断,则10次中断的时间正好为1s。将时间参数设计为100ms的原因有两个:)根据系统时钟主频为6M的特点,16位定时器最大定时时间为655362M(M为机器周期,这里是2),即131ms,取整数100便于计次数;)如取的太短,如10ms,则定时器频繁中断,干扰系统正常运行效果。有了秒脉冲发生器,10次中断为1s,秒指示灯闪亮1次,秒变量单元加1,60后分变量单元加1,如果为60分则时变量单元加1。任何一个变量的变化,则显示刷新一次(更新)。上述思想的实现均集成在定时器0的中断子程序中,流程见图。重装定时时间常数中断次数加1中断返回到10次吗?秒变量+1到60s了吗?中断返回秒变量回00,分变量+1到60M了吗?中断返回分变量回00,时变量+1到24H了吗?中断返回时变量回00闹铃判别闹铃判别闹铃判别图的中断子程序流程1.秒脉冲的发生器与走时处理的语言实现秒脉冲发生器与走时处理的汇编语言实现如下:TIMER0:PUSHACC;A压栈保护CLRFRESH;清刷新标志CLRSEC;清秒指示标志MOVTH0,#3CH;100ms定时常数MOVTL0,#0B0HINCCOUNTMOVA,COUNTJBTFIX,T0_00;如要修正时间,则将计次调整为NXRLA,#10SJMPT0_01T0_00:XRLA,#N;T0_01:JZT0_1POPACCRETIT0_1:CLRTFIX;修正后清除修正标志SETBSEC;设置秒指示MOVCOUNT,#00HINCSECONDMOVA,SECONDXRLA,#60JZT0_2POPACCRETIT0_2:SETBFRESH;设置刷新标志(分或时发生变化)MOVSECOND,#00HINCMINULMOVA,MINULXRLA,#0AHJZT0_3LJMPADJUSTT0_3:MOVMINUL,#00HINCMINUHMOVA,MINUHXRLA,#06JZT0_30LJMPADJUSTT0_30:MOVMINUH,#00HINCHOURL;判小时高位,如为0,则小时低位可以到9,否则,只能是02MOVA,HOURHJZT0_300MOVA,HOURLXRLA,#03JZT0_4LJMPADJUSTT0_300:MOVA,HOURLXRLA,#0AHJZT0_4LJMPADJUSTT0_4:MOVHOURL,#00INCHOURHMOVA,HOURHXRLA,#02JZT0_40
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026事业单位工勤技能-河北-河北家禽饲养员四级(中级工)历年参考题库含答案详解
- 2026事业单位工勤技能-江西-江西水利机械运行维护工二级(技师)历年参考题库含答案详解
- 2026事业单位工勤技能-江苏-江苏环境监测工二级(技师)历年参考题库含答案详解
- 2026事业单位工勤技能-天津-天津仓库管理员一级(高级技师)历年参考题库含答案详解
- 2026年搅拌站技术负责人考试试题及答案
- 某化妆品厂卫生生产办法
- 五年级语文学困生家长指导计划
- 某电子厂线路板清洗办法
- 某汽车制造厂工艺纪律规定
- 建筑工地应急办法
- DB44∕T 2741-2025 市政基础设施用地节约集约化利用标准
- GB/T 46601-2025热喷涂采用横向划痕试验评估热喷涂陶瓷涂层的结合力和内聚力
- 创伤性应激障碍课件
- 2026年秋学期人教版初中语文九年级上册教学进度表
- 2025鄂尔多斯市城市建设投资集团招聘92人笔试历年参考题库附带答案详解(3卷合一)
- DB65∕T 4747-2024 地表水自压滴灌工程设计规范
- 2025年乡镇禁毒办禁毒社工招聘笔试题库附答案
- 中职会计统计讲解
- 科研诚信教育讲座
- 《家务劳动与管理》职业教育现代家政服务与管理专业全套教学课件
- 性别与社会政策的性别平等-洞察及研究
评论
0/150
提交评论