基于at89c2051的电子闹钟设计_第1页
基于at89c2051的电子闹钟设计_第2页
基于at89c2051的电子闹钟设计_第3页
基于at89c2051的电子闹钟设计_第4页
基于at89c2051的电子闹钟设计_第5页
已阅读5页,还剩73页未读 继续免费阅读

下载本文档

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

文档简介

基于AT89C2051的电子闹钟11电子闹钟的功能与设计方案111电子闹钟的功能与设计要求1111电子闹钟的实现形式电子闹钟既可以通过纯硬件实现,也可以通过软硬件结合实现,根据电子时钟中核心部件秒信号的产生原理,通常有以下三种形式采用NE555时基电路的实现形式采用NE555时基电路或其他振荡电路产生秒脉冲信号,作为秒加法电路的时钟信号或微处理器的外部中断输入信号,可构成电子钟。由555构成的秒脉冲发生器电路见图。输出的脉冲信号V的频率F1443(RA2RB)C,可通过调节这3个参数,使输出V的频率为精确的1Z。TRIG2Q3R4CVOLT5THR6DIS7VCC8GND1U1555RARBCC1VCCVO图基于的秒脉冲发生器采用石英钟专用芯片的实现形式采用石英钟专用计时芯片实现的电子钟,具有实现简单、计时精度高的特点。石英计时芯片(简称“机芯”)比较多,常见型号的有STP5512F、SM5546A和D60400等。现结合康巴丝石英钟常用的5512F型为例作一简单介绍。利用5512F的2秒输出信号作为秒加法电路的计数脉冲,可实现电子时钟。5512F的引脚图如图所示SC17V1AK2MO3M14GND5BP6SC285512F图的引脚图其中,引脚7、8为外接晶振及振荡电路,引脚接电源正极,电源为15,引脚3、4原为指针用步进电机线圈的输出驱动,这里可用脚作为脉冲输出,频率决定于外接晶振的频率。采用基于微处理器的实现形式利用微处理器的智能性,可方便实现具有智能的电子钟。由于微处理器均具有时钟振荡系统,利用系统时钟借助微处理器的定时计数器可实现电子钟功能。虽然,系统时钟的误差较大,电子钟的累积误差也可能较大,但可以通过误差修正软件加以修正。本章讨论的电子钟就是采用这种形式。1112电子闹钟的功能与设计要求就电子闹钟而言,一般应具有以下基本功能要求能随意设定走时起始时间。对电子钟而言,最基本的功能是具有对时功能,即能随意设定走时起始时间。能设定闹铃时间。电子钟一般都具有闹铃功能,即预设定一个时间,一旦走时到该时间,电子钟能以声或光的形式告警提示(俗称“闹铃”、“打铃”)。能指示秒节奏,即秒指示。12小时24小时两种制式可选,以适应不同的需要。采用交直流供电电源。与石英钟不同的是,电子钟一般采用数码管等显示介质,因而必须以交流供电为主,以直流电源为后备辅助电源,并能自动切换。具有走时误差修正能力。112设计方案的确定从以下几个方面来确定电子闹钟的设计方案1微处理器采用ATMEL的AT89C2051微处理器,是基于以下几个因素189C2051为51内核,仿真调试软硬件资源丰富;2性价比高,货源充足;3DIP20封装,体积小,便于产品小型化;4为EEPROM程序存储介质,1000次以上擦写周期,便于编程调试;5具有IDLE和POWERDOWN两种工作模式,便于进行低功耗设计;6工作电压范围宽276,便于交直流供电。2显示电路就时钟而言,通常可采用液晶显示或数码管显示。由于一般的段式液晶屏,需要专门的驱动电路,而且液晶显示作为一种被动显示,可视性相对较差;对于具有驱动电路和微处理器接口的液晶显示模块(字符或点阵),一般多采用并行接口,对微处理器的接口要求较高,占用资源多。另外,89C2051本身无专门的液晶驱动接口,因此,本时钟采用数码管显示方式。数码管作为一种主动显示器件,具有亮度高、价格便宜等优点,而且市场上也有专门的时钟显示组合数码管。3按键电路考虑到对时和设定闹铃时间这两种操作的使用频率不是很高,为了精简系统和节省成本,本时钟系统只设两个按键1键,对应系统的不同工作状态,具有3个功能在复位后的待机状态下,用于启动设定时间参数(对时或定闹);在设定时间参数状态而且不是设定最低位(即分个位)的状态下,用于结束当前位的设定,当前设定位下移;在设定最低位(分个位)的状态下,用于结束本次时间设定。2键,用于对当前设定位(编辑位)进行加1操作,根据1224小时工作模式和正在编辑的当前位的含义(时十位、时个位、分十位、分个位)自动进行数据的上限和下限判断。例如,对12小时制,小时的十位只能是0、1,如果当前值为0,则按1键后为1,再按1键则又回复到0。12电子闹钟的硬件系统设计电子闹钟至少应包括秒信号发生器、时间显示电路、按键电路、供电电源以及闹铃指示电路等几部分。121电子闹钟的硬件系统框架电子闹钟的系统框架如图示。在系统中,除了按键电路以外,还设计了“是否设定闹铃”、“1224小时制选择”等按钮电路。图时钟系统电路原理框图122电子闹钟的主机电路设计电子闹钟的主电路指的是图中虚线框内部分,主要涉及到微处理器电路和按键按钮电路。主机的设计具体地说有)系统时钟电路设计;)系统复位电路设计;)按键与按钮电路设计;)闹铃声光指示电路设计。以下分别讨论按键与按钮电路复位等辅助电路位数码管显示电路闹铃声光指示电路电源系统1系统时钟电路设计系统时钟电路的设计如图。对于时间要求不是很高的系统,只要按图进行设计就能使系统可靠起振并稳定运行。但由于图中的C1、C2电容起着系统时钟频率微调和稳定的作用,因此,在本闹钟系统的实际应用中一定要注意正确选择参数(3010PF),并保证对称性(尽可能匹配),选用正牌厂家生产的瓷片或云母电容,如果可能的话,温度系数要尽可能低。实验表明,这2个电容元件对闹钟的走时误差有较大关系。C127PFC227PFXTAL1XTAL2图系统时钟电路2系统复位电路设计智能系统一般应有手动或上电复位电路。复位电路的实现通常有两种方式)RC复位电路;)专用监控电路。前者实现简单,成本低,但复位可靠性相对较低;后者成本较高,但复位可靠性高,尤其是高可靠重复复位。对于复位要求高、并对电源电压进行监视的场合,大多采用这种方式。专用监控电路专用监控电路又称电源监视电路,具有上电时可靠产生复位信号和电源电压跌落到“门槛值”时可靠产生复位信号等功能。按有效电平分,有高电平输出、低电平输出两种;按功能分,有简单的电源监视复位电路、带“看门狗”定时器(WATCHDOG,又简称“WDT”)的监控电路、和WDTEEPROM的监控电路等多种类型。比较常见的生产厂家有MAXIM、PHILIPS、IMP以及DALLS等,系列微处理器中常用的型号有MAX813L、MAX809、X25043/5等。RC复位电路本系统采用的是这种复位方式。RC复位电路的实质是一阶充放电电路,现结合图说明这种复位电路的特点。系统上电时该电路提供有效的复位信号RST(高电平)直至系统电源稳定后撤销复位信号(低电平)。理论上说,系列单片机复位引脚只要外加2个机器周期的有效信号即可复位,即只要保证TRC2M(机器周期)便可,但实际设计中,通常取C1为10以上,R1通常取10K左右。实践发现R1如果取值太小,例如1,则会导致RST信号驱动能力变差而无法使系统可靠复位。另外,从图的复位信号波形图可以明显看出,图中的虚线所接的续流二极管D1对于改善复位性能,起到了重要作用,它的作用是在电源电压瞬间下降时使电容迅速放电,因此一定宽度的电源毛刺(如波形中A点)也可令系统可靠复位。图为未加二极管和加二极管的复位信号特性对比。C122UFR110KD14148VCCRST图复位电路图加二极管前后的复位信号特性对比3按键与按钮电路设计按键与按钮电路的设计参见系统电原理图中的S1、S2和S3对应部分。按键与按钮电路设计中关键要考虑的就是按键去抖动问题(简称“去抖”),一般有硬件去抖和软件去抖两种方式。过去硬件去抖电路通常采用分立元件或触发器实现,目前市场上已有硬件去抖专用接口芯片,例如MAXIM公司MAX68166818,均为单电源供电,电压为2755,分别为单输入、双输入和八输入,输出端具有欠压锁定功能。这里考虑到系统的硬件简化和成本没有采用硬件去抖,而采用软件去抖。4闹铃指示电路设计闹铃指示可以有声或光两种形式。本系统采用声音指示。关键元件是蜂鸣器。蜂鸣器有无源和有源两种,前者需要输入声音频率信号才能正常发声,后者则只需外加适当直流电源电压即可,元件内部已封装了音频振荡电路,在得电状态下即起振发声。市场上的有源蜂鸣器分为3、5、6等系列,以适应不同的应用需要。其电路设计参见系统电原理图。其中PNP小功率三极管Q2采用9012,其最大集电极电流为800M,完全满足蜂鸣器驱动的需要。适当调节基极电阻可改变蜂鸣器的发声功率(即响度)。123电子闹钟的显示电路设计显示采用共阳数码管,其目的是为了简化限流电路的设计和实现亮度可调的要求。4位数码管显示电路见图。从图中可知,该显示电路采用了与一般的段电流电阻限流方式不同的实现方式,由此减少了4832个限流电阻,简化了硬件系统。每一笔画段二极管正常发光时的电流一般为10M左右(当然,电流大小取决于选用的数码管是普亮、高亮还是超高亮类型的不同),其两端压降约为20,也就是说,只要数码管的公共端(COM)加20以上电压,即可满足每笔画段发光二极管的发光要求,而且适当调节此电压值即可改变发光二极管的电流,从而达到调节亮度的目的。此电压采用三端可调稳压电路W1(LM317)来实现。其输入为5,按照图中参数,其输出电压由公式决定()6412RG1F2COM3E4D5DP6C7COM8B9A10M0R72KR6100R5200R4220Q1901355VIN3ADJ1VOUT2W1LM317TA1B2Q03Q14Q25Q36Q410Q511Q612Q713CLK8MR9U274LS164A1B2Q03Q14Q25Q36Q410Q511Q612Q713CLK8MR9U3A1B2Q03Q14Q25Q36Q410Q511Q612Q713CLK8MR9U4A1B2Q03Q14Q25Q36Q410Q511Q612Q713CLK8MR9U52Q02Q12Q22Q32Q42Q52Q6P31P302Q02Q12Q22Q32Q42Q52Q6P0P0P1P2P32图位共阳数码管显示电路式中,R5为200,R6可调,R4为220,因此输出电压为217263。但由于输入输出压差至少为25,因此极限电压为25。为了节约CPU的口线,显示采用了串行通信口的串行显示接口方式,利用串口的0工作方式在发送TXD端口(P31)的时钟信号的作用下通过接收RXD端口(P30)将显示段码串行数据送入8位串入并出移位寄存器74LS164,控制相应的数码管。图只画出了一个数码管的连接。端口P32的作用是通过LM317控制数码管显示的开启与关闭,当P32为低电平时Q1关断,317的输出电压低于15,不足以发光,避免了在显示数据刷新时显示的抖动现象。124电源设计由于89C2051通常有12和24两种型号,对应的时钟频率分别为12M和24MZ,前者的工作电压为26,后者的工作电压为46,这点在设计选用时应当予以注意。考虑到交直流两用的要求和三端稳压电路选用的方便(通常的系列为5,6,),选择工作电压为5。电源系统设计如图示。1000UF103VIN1GND25V3LM7805CT100UF104125D40016V2209图闹钟的电源系统原理图应当说明的是,尽管有很多型号的7805三端稳压集成芯片,其标称最大输出电流均为15,但在实际应用中,该最大输出电流值往往取决于两个方面)足够的散热面积;)不同的生产厂家。按照很多开发者的经验,公司的7805三端稳压芯片能接近标称值。在设计中,必须保证7805的输入电压I和输出电压O的压差大于25,即IO25,否则失去稳压能力,同时考虑到功耗问题,此压差又不宜太,太大则增加7805本身的功率消耗,增加芯片的温升,不利于安全。因此,选为。当交流电源失电或失效时,电压为的直流电源(电池组或蓄电池)通过二极管投入作用,硅二极管的导通电压降约为02左右,因此满足系统的电源要求。125硬件电原理图系统的硬件电原理图见图。5C501C4100UF51234CZ14PING1F2COM3E4D5DP6C7COM8B9A10M3SMGSG1F2COM3E4D5DP6C7COM8B9A10M2SMGSG1F2COM3E4D5DP6C7COM8B9A10M1SMGSG1F2COM3E4D5DP6C7COM8B9A10M0SMGSS3R72KR6100R5200R4220Q1901355VIN3ADJ1VOUT2W1LM317TRST1P302P313X24X15P326P337P348P359GND10P3711P1012P1113P1214P1315P1416P1517P1618P1719520U189C2051X16MC127PC227PR110KC310UF55A1B2Q03Q14Q25Q36Q410Q511Q612Q713CLK8MR9U274LS164A1B2Q03Q14Q25Q36Q410Q511Q612Q713CLK8MR9U3A1B2Q03Q14Q25Q36Q410Q511Q612Q713CLK8MR9U4A1B2Q03Q14Q25Q36Q410Q511Q612Q713CLK8MR9U5R21KR31KL1L25S1S2R81KQ29012B15P34P33P34P33P3P2P1P0P0P1P2P3图电子闹钟的系统电原理图13电子闹钟的软件系统设计软件设计的重点在于秒脉冲信号的产生、显示的实现、以及按键的处理等方面。关于显示实现和按键处理的软件设计参见本节相应小节。这里主要讨论秒脉冲的产生原理。基于软件的秒脉冲信号通常有延时法和定时中断法。延时法一般采用查询方式,在延时子程序前后必然需要查询和处理的程序,导致误差的产生,因此其秒脉冲的精度不高;中断法的原理是,利用单片机内部的定时器溢出中断来实现。例如,设定某定时器每100MS中断1次,则10次的周期为1S。这种实现法的特点是精度高,秒脉冲的发生和其他处理可以并行进行。本系统采用这种方式,实现的关键是定时器工作方式的选择和定时参数的计算设定。具体内容参见源程序中的相关说明。本系统中所使用的晶振频率为6MZ。131软件系统中的主模块设计主模块是系统软件的主框架。结构化程序设计一般有“自上而下”和“自下而上”两种方式,“自上而下”法的核心就是主框架的构建。它的合理与否关系到程序最终的功能的多少和性能的好坏。本系统的主模块的程序框图用图的表示。具体代码实现以下分别讨论,注意,代码中的有关变量的含义和作用要参阅源程序清单部分的说明。图主程序流程框图1主模块的汇编语言实现以下程序为上述主模块的汇编语言实现,有关设计思想在程序中均作了详细分析说明。MAINMOVSP,60H堆栈设置LCALLSYS_INIT系统初始化LCALLT0_INIT定时器初始化LCALLT1_INIT闪烁用定时器初始化LCALLUART_INIT串口初始化LCALLDISPLAYP显示待机符PLCALLSETTIME等待设置当前时间JBS3,MAIN_00判是否设置闹铃LCALLSETWARN是,则设定闹铃时间系统初始化定时器初始化定时器初始化串口初始化显示待机指示符设定闹铃时间判设置闹铃时间否显示刷新启动走时有关变量初始化刷新显示判时或分变化否秒指示判秒到否闹铃判是否到闹铃时间延时YYYYSETBWARNSETTED设置已设定闹铃时间标志MOVWARNCNT,0闹铃次数清0否则会闹1分钟CLRTFIX误差开始修正标志初始化MOVCOUNT,0MAIN_00LCALLDISPLAY1必须再次刷新,否则会出现尾位不显示的情况MAIN_0SETBTR0设置完后开始走时,启动定时器T0SETBET0允许T0溢出中断MAIN_1JBFRESH,MAIN_2时分有变化,则刷新显示SJMPMAIN_3否则,不更新显示MAIN_2LCALLDISPLAY1先对时分数据进行HEX2BCD转换后显示SJMPMAIN_3进入死循环,只有复位才能重新设置MAIN_3JBCSEC,MAIN_4判秒到否SJMPMAIN_1MAIN_4CPLL1到则进行秒指示CPLL2JNBWARNING,MAIN_5CPLBEEP开始闹铃INCWARNCNT闹铃次数1MOVA,WARNCNTXRLA,08JNZMAIN_5到8次(实际是4次),则停止CLRWARNINGMOVWARNCNT,0MAIN_6SETBBEEPMAIN_5MOVR6,60LCALLDEL20_0点亮时间不能太长,否则影响秒指示,短则太暗SJMPMAIN_12主模块的语言实现以下代码为上述主模块的语言实现,该实现中没有闹铃时间设定功能。VOIDMAINVOIDSYS_INIT/系统初始化/T0_INIT/定时器初始化/T1_INITUART_INIT/串口初始化/BUF00X0A/“P“的段码送显示缓冲区/BUF10X0BBUF20X0BBUF30X0BDISPLAY/显示待机符P/SETTIME/等待设置当前时间/DISPLAY/带闪烁后要加显,否则会出现尾位不显的现象/TR01/设置完后开始走时,启动定时器T0/ET01/允许T0溢出中断/WHILE1IFFRESH/判是否要刷新显示分或时变化/BUF0HOURH/是,则新的时间送显示缓冲区/BUF1HOURLBUF2MINUHBUF3MINULDISPLAY/显示刷新/IFSEC/判秒指示要刷新否/SEC0/是,则刷新闪烁/L1L1L2L2DELAY20MS/点亮时间不能太长,否则影响秒指示,短则太暗/ELSEIFSECSEC0L1L1L2L2DELAY20MS132基本显示模块设计基本显示模块设计的重点是由显示代码取得相应的段码、显示段码数据的串行发送,程序流程如图所示。其中时个位的段码必须加上小数点,即带小数点显示时个位,目的是以小数点符代替时间分割符“”(因为一般的数码管无法显示字符“”)。图基本显示模块的程序流程图1基本显示模块的语言实现以下代码为基本显示模块的汇编语言实现。DISPLAYLCALLHEX2BCD数据转换DISPLAY1SETBDISPCON关闭显示MOVA,HOURH取出小时数据ADDA,30H加上偏移量MOVCA,APC取出段码MOVSBUF,A送入74LS164DL1JNBTI,DL1等待发送完成将进制时分数据转化为显示代码关显示以免显示抖动通过串口将时十位段码送入对应的将时个位段码送入对应的(以小数点代)将分十位和个位段码送入各自对应打开显示CLRTIMOVA,HOURLADDA,24HMOVCA,APCANLA,0FEH显示时分分隔符(这里用代替)MOVSBUF,ADL2JNBTI,DL2CLRTIMOVA,MINUH分ADDA,16HMOVCA,APCMOVSBUF,ADL3JNBTI,DL3CLRTIMOVA,MINULADDA,0AHMOVCA,APCMOVSBUF,ADL4JNBTI,DL4CLRTICLRDISPCON打开显示RET09的段码共阳数码管74LS164的345610111213对应数码管的A,B,C,D,E,F,G,DP但是串口方式0发送的首位是最最低位,因此Q0Q7中的Q0其实是最高位,SEGTABDB03H,9FH,25H,0DH,99HDB49H,41H,1FH,01H,09HDB0FFH2基本显示模块的语言实现以下代码为基本显示模块的语言实现。VOIDDISPLAYVOIDUCHAROUTDISPCON1/关闭显示,防止传送数据期间闪烁/OUTSEGBUF0/取出高位时段码/SBUFOUT/送入74LS164/WHILETI/等待发送完成/TI0OUTSEGBUF1/取出低位时段码/OUT/显示时分分隔符(这里用代替)/SBUFOUTWHILETITI0OUTSEGBUF2/分/SBUFOUTWHILETITI0OUTSEGBUF3SBUFOUTWHILETITI0DISPCON0/所有数据已送入后开显示/133当前编辑位闪烁功能的实现当前编辑位闪烁功能能使时间设定编辑模块的人机环境更加友善,其实现的原理是利用定时器1每100MS的溢出中断,实现每05S将闪烁位标志求反;在时间设定模块中根据此标志的状态,分别显示当前时间参数或关闭显示,达到每05S亮灭交替的效果,即闪烁。上述思想用程序框图表示为图。定时器1的中断程序思想参见下面代码中的注释说明。图当前编辑位闪烁功能实现的程序流程1当前编辑位闪烁功能的语言实现以下代码为当前编辑位闪烁功能的汇编语言实现,是从时间设定模块中截取的一部分。将显示全灭段码送显示缓冲区将目前设定的时间参数送显示缓冲区闪烁标志为真调用基本显示程序模块SET_0JNBSS,SET_06判闪烁标志(一亮一灭)JNBHH,SET_02为真,则当前位灭MOVHHBACK,0AH灭的代码MOVHLBACK,HOURL其他显示位送该缓冲区MOVMHBACK,MINUHMOVMLBACK,MINULSJMPSET_01SET_02JNBHL,SET_03MOVHHBACK,HOURHMOVHLBACK,0AH灭的代码MOVMHBACK,MINUHMOVMLBACK,MINULSJMPSET_01以下为定时器1的100MS定时溢出中断子程序。TIMER1PUSHACCMOVTH1,3CH100MS定时常数MOVTL1,0B0HINCCOUNT中断次数加1MOVA,COUNTXRLA,5判到5次05S否,不到直接返回JZTIMER1_0POPACCRETITIMER1_0CPLSSSS闪烁标志求MOVCOUNT,0POPACCRETI2当前编辑位闪烁功能的语言实现以下代码为从时间设定模块截取的闪烁功能实现部分。BUF0HOURH/将目前设定的参数送显示缓冲区/BUF1HOURLBUF2MINUHBUF3MINULIFSS/这部分程序实现了当前位闪烁/SWITCHSETFLAG/判当前设定位/CASE0X01BUF00X0B/全暗代码/BREAKCASE0X02BUF10X0BBREAKCASE0X04BUF20X0BBREAKCASE0X08BUF30X0BBREAKDISPLAY以下为定时器1的100MS定时溢出中断的代码VOIDTIMER1VOIDINTERRUPT3USING1TH10X3C/100MS定时常数/TL10XB0COUNT/中断次数加1/IFCOUNT5/判到10次1S否,不到直接返回/RETURNSSSS/SS闪烁标志求反/COUNT0134时间设定模块设计时间设定模块的设计要点是按键的去抖处理与“一键多态”的处理。即只涉及个键完成了位时间参数的设定。软件法去抖动的实质是软件延时,即检测到某一键状态变化后延时一段时间,再检测该按键的状态是否还保持着,如是则作为按键处理,否则,视为抖动,不予理睬。去抖中的延时时间一般参考资料多描述为10MS左右,实际应用中,应大于20MS,否则,会导致按一次作多次处理,影响程序正常执行。“一键多态”即多功能键的实现思想是,根据按键时刻的系统状态,决定按键采取何种动作,即何种功能。其实现流程如图。图时间设定模块流程图1时间设定模块的语言实现时间设定模块的汇编语言程序实现如下,按键去抖问题在程序中已有清晰阐述,需要注意的是,这里的代码是基于12小时制的。SETTIMELCALLS1KEY先等待S1按键MOVSECOND,00HMOVMINUTE,00MOVHOUR,00MOVHOURH,000000显示数据送缓冲区MOVHOURL,00MOVMINUH,00MOVMINUL,00MOVSETFLAG,00SETBHH设置当前位标志CLRSS闪烁标志初始化(清除)SETBTR1启动定时器T1SETBET1允许T1溢出中断设置键吗设置模块初始化将在编参数送显示缓冲区闪烁标志为真将当前位的显示代码置暗代码调基本显示模块刷新显示设置键吗当前编辑位下移(下一位)当前编辑的是分各位结束设定键吗根据当前位的性质分别进行处理(含上下限判断)MOVCOUNT,0SET_0JNBSS,SET_06判闪烁标志(一亮一灭)JNBHH,SET_02为真,则当前位灭MOVHHBACK,0AH灭的代码MOVHLBACK,HOURL其他显示位送该缓冲区MOVMHBACK,MINUHMOVMLBACK,MINULSJMPSET_01SET_02JNBHL,SET_03MOVHHBACK,HOURHMOVHLBACK,0AH灭的代码MOVMHBACK,MINUHMOVMLBACK,MINULSJMPSET_01SET_03JNBMH,SET_04MOVHHBACK,HOURHMOVHLBACK,HOURLMOVMHBACK,0AH灭的代码MOVMLBACK,MINULSJMPSET_01SET_04MOVHHBACK,HOURHMOVHLBACK,HOURLMOVMHBACK,MINUHMOVMLBACK,0AH灭的代码SET_01MOVR0,HHBACK备份区数据送显SJMPSET_05SET_06MOVR0,HOURH时钟数据送显SET_05LCALLDISPLAYNEWJBS1,SET_1循环扫描S1,S2键,并进行相应处理LCALLDELAY20MSJBS1,SET_1JBML,SET_00当前位是分各位,按S1键则结束设定状态,开始走时MOVA,SETFLAGRLA当前位右移1位标志左移1位MOVSETFLAG,A回存(否则,标志位不改变导致编辑不移位)SJMPSET_0SET_00CLRTR1关T1及中断CLRET1LCALLSETVALUERETSET_1JBS2,SET_0LCALLDELAY20MSJBS2,SET_0JNBHH,SET_2根据当前位标志,对当前位变量进行1处理INCHOURHMOVA,HOURHXRLA,2小时高位只能01JZSET_10LJMPSET_0SET_10MOVHOURH,0否则,回0LJMPSET_0SET_2JNBHL,SET_3INCHOURLMOVA,HOURHJNZSET_20MOVA,HOURLXRLA,0AH小时低位只能是02JZSET_21LJMPSET_0SET_21MOVHOURL,0高于则回0LJMPSET_0SET_20MOVA,HOURLXRLA,03H小时低位只能是02JZSET_22LJMPSET_0SET_22MOVHOURL,0高于则回0LJMPSET_0SET_3JNBMH,SET_4INCMINUHMOVA,MINUHXRLA,6分高位只能是05JZSET_30LJMPSET_0SET_30MOVMINUH,0LJMPSET_0SET_4INCMINULMOVA,MINULXRLA,0AHJZSET_40LJMPSET_0SET_40MOVMINUL,0LJMPSET_02时间设定模块的语言实现以下代码为时间设定模块的语言程序实现。VOIDSETTIMEVOIDUCHARIWHILES1/等待S1键开始设置/FORI0I“文件添加”添加到项目文件SSS;STEP5通过“项目管理”“编译汇编”汇编该项目;STEP6通过“查看”“数据区DATA”,打开下列片内数据区编辑窗口,如图所示。STEP7单步执行到RET语句后,结果如图。如果正确,则说明程序正确;否则,在单步执行中及时可以发现何处存在问题。图MEDWIN的数据区查看设定窗口143系统实物1系统主板的印刷电路板用TANGO软件设计的印刷电路板如下,比例为11。1元件层(TOPLAYOUT)十六进制入口参数转换后的非压缩码图层印刷电路图2焊接层(BOTTOMLAYOUT)图层印刷电路图2样机实物照片考虑到系统比较简单,从锻炼的角度看,采用通用实验板直接搭焊不失为一种好办法。以下图为采用市场上常见的12585(MM)的实验板制作的系统实物照片。15电子闹钟系统中可以进一步探讨的问题本闹钟系统值得进一步探讨的问题还有许多,例如远程控制问题、时间自校准问题、低功耗问题、以及功能提升问题。这里只讨论温度计功能实现问题和低功耗设计问题。图样机实物151温度计功能的实现现行温度测量通常有两类方式)基于模拟传感器的测量。模拟温度传感器种类较多,如NTC电阻、热敏二极管、AD590等,特点是精度较高,但由于存在非线性等问题,实现比较复杂。)基于数字集成传感器的测量。目前,数字集成温度传感器型号众多,常见的有DS1820、LM75、以及TC77等等,这类温度传感器直接输出代表温度的数字信号,便于与计算机接口,部分还带上下限控制功能。这里讨论基于TC77的温度计实现问题。TC77集成温度传感器具有以下特性采用5PIN的SOT23A或8PIN的SOIC封装形式;数字温度传感器,13位精度(最高位为符号位);SPI或MICROWIRE接口兼容;最大2的精度(4085);工作电压范围宽2755;功耗低250,在连续转换模式时01,在关闭模式时。依据工作电压,TC77有两种规格,TC33和TC50,前者为33,后者为5。TC77的引脚图如图。图TC77的引脚图152基于TC77的温度计的硬件设计这里选用TC775,其与的三线接口如图所示,利用了闹钟系统尚未使用的P14、P11、P10,只是按照89C2051的要求,P11、P10必须接上拉电阻,因为这两引脚是模拟比较器的输入端,内部无弱上拉。需要指出是,在TC77的电源引脚、间应并接去藕高频瓷片或云母电容,容量可为00101,以保证测量的稳定性和精度。图TC77与89C2051的接口153温度计的软件设计VDDVSS/CSSCKSIOP10P11P14510K2TC77CPUP35温度显示增加温度计功能后,软件设计的主要内容有两项一是如何与原系统软件接口设计;二是温度传感器TC77的读写模块设计。1温度传感器TC77的读写模块设计TC77内部有三个寄存器,分别是设置寄存器(CONFIG)、温度结果寄存器(TEMP)、和制造商ID寄存器(M_ID),其中第一个为仅写,后两个为仅读。上电复位后TC77的工作模式为连续转换。所有数据的输入输出均为高位在先,并且在时钟信号的上升沿有效。16位温度寄存器的最低两位无效,采用补码形式,D2位反映首次转换完成的状态,1表示转换结束;0表示转换正在进行。/TC77读写TC77温度值存放在变量TMH,TML中,为补码形式/SBITCS77P10/片选信号,低电平有效/SBITSCK77P11/时钟信号,上升沿有效/SBITSIO77P14/串行数据/SBITWDDISPP35/显示温度按键/UNSIGNEDCHARFLAG/标志字节/SBITFUHAOFLAG0/温度的正负符号,1,表示为负/UNSIGNEDCHARTMH,TML/读出温度高字节、低字节/UNSIGNEDINTTEMP/对读出的温度值求补后(即原码)的存放单元/UNSIGNEDCHARWDBUF3/转换成BCD码的温度缓冲区(供显示用)/VOIDTC77VOIDUCHARI,TMBITCCTM0TMH0TML0SCK770/时钟先为低,为产生上升沿作准备/CS771/片选的下降沿启动A/D/_NOP_CS770FORI0I4/取高4位存入高字节/TMLTM4/取高4位作为12位有效数据的低4位/TMLTML|TM/与已得到的高4位拼装成8位字节/TMLTML/屏蔽低3位/CS771/使片选无效/求补码函数BM对读出的温度值TEMP求补码函数,得到原码符号除外/VOIDBMVOIDUNSIGNEDINTTTTTTMHTT0/ELSEBM/将负的温度值求补码得到原码符号单独处理/TPTEMP00625/温度0/FUHAO1/设置温度为负标志/TPTP100000/为了便于单片机处理将数值放大10000倍/TMPTP/截取整数,将小数点定在十位上,即为实际温度/WDBUF0TMP/100000/温度为999999,因此,只取高3位/TMPTMP100000WDBUF1TMP/10000TMPTMP10000WDBUF2TMP/10002与原系统软件的接口设计增加温度计功能后,如何实现与原系统程序的无缝接口,这是关键。解决问题的思路是,首先要解决利用原位显示器实现温度显示与时间显示的矛盾;其次,要解决何时显示温度的问题。为了第二个问题,比较妥当的办法是增设一个温度显示按键,如图所示。当按下该键1秒以上,则显示当前温度,持续1分钟时间后自动回复显示时间。实现这些功能的程序模块与原系统软件的接口如图。温度计功能模块的程序流程也在图中一并表示。系统初始化定时器初始化定时器初始化串口初始化显示待机指示符设定闹铃时间判设置闹铃时间否显示刷新启动走时有关变量初始化刷新显示判时或分变化否秒指示判秒到否闹铃判是否到闹铃时间延时YYYY显示温度吗设置显示温度标志N插入此处根据温度显示标志,分别正常显示温度或读取温度并显示此框改为图温度计功能模块与原系统程序

温馨提示

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

评论

0/150

提交评论