基于at89c的电子闹钟设计.docx

上传人:b****5 文档编号:6807075 上传时间:2023-01-10 格式:DOCX 页数:89 大小:1.21MB
下载 相关 举报
基于at89c的电子闹钟设计.docx_第1页
第1页 / 共89页
基于at89c的电子闹钟设计.docx_第2页
第2页 / 共89页
基于at89c的电子闹钟设计.docx_第3页
第3页 / 共89页
基于at89c的电子闹钟设计.docx_第4页
第4页 / 共89页
基于at89c的电子闹钟设计.docx_第5页
第5页 / 共89页
点击查看更多>>
下载资源
资源描述

基于at89c的电子闹钟设计.docx

《基于at89c的电子闹钟设计.docx》由会员分享,可在线阅读,更多相关《基于at89c的电子闹钟设计.docx(89页珍藏版)》请在冰豆网上搜索。

基于at89c的电子闹钟设计.docx

基于at89c的电子闹钟设计

基于AT89C2051的电子闹钟

1.1电子闹钟的功能与设计方案

1.1.1电子闹钟的功能与设计要求

1.1.1.1电子闹钟的实现形式

电子闹钟既可以通过纯硬件实现,也可以通过软硬件结合实现,根据电子时钟中核心部件——秒信号的产生原理,通常有以下三种形式:

1.采用NE555时基电路的实现形式

  采用NE555时基电路或其他振荡电路产生秒脉冲信号,作为秒加法电路的时钟信号或微处理器的外部中断输入信号,可构成电子钟。

由555构成的秒脉冲发生器电路见图1-1。

输出的脉冲信号VO的频率F=1.443/(RA+2RB)×C,可通过调节这3个参数,使输出VO的频率为精确的1Hz。

           

图1-1 基于555的秒脉冲发生器

      

2.采用石英钟专用芯片的实现形式

采用石英钟专用计时芯片实现的电子钟,具有实现简单、计时精度高的特点。

石英计时芯片(简称“机芯”)比较多,常见型号的有STP5512F、SM5546A和D60400等。

现结合康巴丝石英钟常用的5512F型为例作一简单介绍。

利用5512F的2秒输出信号作为秒加法电路的计数脉冲,可实现电子时钟。

5512F的引脚图如图1-2所示:

               

图1-2 5512F的引脚图

其中,引脚7、8为外接晶振及振荡电路,引脚1接电源正极,电源为1.5V,引脚3、4原为指针用步进电机线圈的输出驱动,这里可用3脚作为脉冲输出,频率决定于外接晶振的频率。

3.采用基于微处理器的实现形式

利用微处理器的智能性,可方便实现具有智能的电子钟。

由于微处理器均具有时钟振荡系统,利用系统时钟借助微处理器的定时/计数器可实现电子钟功能。

虽然,系统时钟的误差较大,电子钟的累积误差也可能较大,但可以通过误差修正软件加以修正。

本章讨论的电子钟就是采用这种形式。

1.1.1.2电子闹钟的功能与设计要求

就电子闹钟而言,一般应具有以下基本功能要求:

1.能随意设定走时起始时间。

对电子钟而言,最基本的功能是具有对时功能,即能随意设定走时起始时间。

2.能设定闹铃时间。

电子钟一般都具有闹铃功能,即预设定一个时间,一旦走时到该时间,电子钟能以声或光的形式告警提示(俗称“闹铃”、“打铃”)。

3.能指示秒节奏,即秒指示。

4.12小时/24小时两种制式可选,以适应不同的需要。

5.采用交直流供电电源。

与石英钟不同的是,电子钟一般采用数码管等显示介质,因而必须以交流供电为主,以直流电源为后备辅助电源,并能自动切换。

6.具有走时误差修正能力。

1.1.2设计方案的确定

从以下几个方面来确定电子闹钟的设计方案:

1.微处理器

采用ATMEL的AT89C2051微处理器,是基于以下几个因素:

1)89C2051为51内核,仿真调试软硬件资源丰富;

2)性价比高,货源充足;

3)DIP20封装,体积小,便于产品小型化;

4)为EEPROM程序存储介质,1000次以上擦/写周期,便于编程调试;

5)具有IDLE和POWER-DOWN两种工作模式,便于进行低功耗设计;

6)工作电压范围宽:

2.7~6V,便于交直流供电。

2.显示电路

就时钟而言,通常可采用液晶显示或数码管显示。

由于一般的段式液晶屏,需要专门的驱动电路,而且液晶显示作为一种被动显示,可视性相对较差;对于具有驱动电路和微处理器接口的液晶显示模块(字符或点阵),一般多采用并行接口,对微处理器的接口要求较高,占用资源多。

另外,89C2051本身无专门的液晶驱动接口,因此,本时钟采用数码管显示方式。

数码管作为一种主动显示器件,具有亮度高、价格便宜等优点,而且市场上也有专门的时钟显示组合数码管。

3.按键电路

考虑到对时和设定闹铃时间这两种操作的使用频率不是很高,为了精简系统和节省成本,本时钟系统只设两个按键:

1)SET键,对应系统的不同工作状态,具有3个功能:

●在复位后的待机状态下,用于启动设定时间参数(对时或定闹);

●在设定时间参数状态而且不是设定最低位(即分个位)的状态下,用于结束当前位的设定,当前设定位下移;

●在设定最低位(分个位)的状态下,用于结束本次时间设定。

2)+1键,用于对当前设定位(编辑位)进行加1操作,根据12/24小时工作模式和正在编辑的当前位的含义(时十位、时个位、分十位、分个位)自动进行数据的上限和下限判断。

例如,对12小时制,小时的十位只能是0、1,如果当前值为0,则按+1键后为1,再按+1键则又回复到0。

1.2电子闹钟的硬件系统设计

  电子闹钟至少应包括秒信号发生器、时间显示电路、按键电路、供电电源以及闹铃指示电路等几部分。

1.2.1电子闹钟的硬件系统框架

电子闹钟的系统框架如图1-3示。

在系统中,除了按键电路以外,还设计了“是否设定闹铃”、“12/24小时制选择”等按钮电路。

 

图1-3 时钟系统电路原理框图

1.2.2电子闹钟的主机电路设计

电子闹钟的主电路指的是图1-3中虚线框内部分,主要涉及到微处理器电路和按键按钮电路。

主机的设计具体地说有:

1)系统时钟电路设计;2)系统复位电路设计;3)按键与按钮电路设计;4)闹铃声光指示电路设计。

以下分别讨论:

1.系统时钟电路设计

系统时钟电路的设计如图1-4。

对于时间要求不是很高的系统,只要按图进行设计就能使系统可靠起振并稳定运行。

但由于图中的C1、C2电容起着系统时钟频率微调和稳定的作用,因此,在本闹钟系统的实际应用中一定要注意正确选择参数(30±10PF),并保证对称性(尽可能匹配),选用正牌厂家生产的瓷片或云母电容,如果可能的话,温度系数要尽可能低。

实验表明,这2个电容元件对闹钟的±走时误差有较大关系。

              

图1-4 系统时钟电路

2.系统复位电路设计

智能系统一般应有手动或上电复位电路。

复位电路的实现通常有两种方式:

1)RC复位电路;2)专用µP监控电路。

前者实现简单,成本低,但复位可靠性相对较低;后者成本较高,但复位可靠性高,尤其是高可靠重复复位。

对于复位要求高、并对电源电压进行监视的场合,大多采用这种方式。

●专用µP监控电路

专用µP监控电路又称电源监视电路,具有上电时可靠产生复位信号和电源电压跌落到“门槛值”时可靠产生复位信号等功能。

按有效电平分,有高电平输出、低电平输出两种;按功能分,有简单的电源监视复位电路、带“看门狗”定时器(WATCHDOG,又简称“WDT”)的监控电路、和WDT+EEPROM的监控电路等多种类型。

比较常见的生产厂家有MAXIM、PHILIPS、IMP以及DALLS等,51系列微处理器中常用的型号有MAX813L、MAX809、X25043/5等。

●RC复位电路

本系统采用的是这种复位方式。

RC复位电路的实质是一阶充放电电路,现结合图1-5说明这种复位电路的特点。

系统上电时该电路提供有效的复位信号RST(高电平)直至系统电源稳定后撤销复位信号(低电平)。

理论上说,51系列单片机复位引脚只要外加2个机器周期的有效信号即可复位,即只要保证t=RC>2M(机器周期)便可,但实际设计中,通常取C1为10µF以上,R1通常取10K左右。

实践发现R1如果取值太小,例如1K,则会导致RST信号驱动能力变差而无法使系统可靠复位。

另外,从图1-6的复位信号波形图可以明显看出,图1-5中的虚线所接的续流二极管D1对于改善复位性能,起到了重要作用,它的作用是在电源电压瞬间下降时使电容迅速放电,因此一定宽度的电源毛刺(如波形中A点)也可令系统可靠复位。

图1-6为未加二极管和加二极管的复位信号特性对比。

      

图1-5 RC复位电路

图1-6 加二极管前后的复位信号特性对比

3.按键与按钮电路设计

按键与按钮电路的设计参见系统电原理图中的S1、S2和S3对应部分。

按键与按钮电路设计中关键要考虑的就是按键去抖动问题(简称“去抖”),一般有硬件去抖和软件去抖两种方式。

过去硬件去抖电路通常采用分立元件或触发器实现,目前市场上已有硬件去抖专用接口芯片,例如:

MAXIM公司MAX6816~6818,均为单电源供电,电压为+2.7~5.5V,分别为单输入、双输入和八输入,输出端具有欠压锁定功能。

这里考虑到系统的硬件简化和成本没有采用硬件去抖,而采用软件去抖。

4.闹铃指示电路设计

闹铃指示可以有声或光两种形式。

本系统采用声音指示。

关键元件是蜂鸣器。

蜂鸣器有无源和有源两种,前者需要输入声音频率信号才能正常发声,后者则只需外加适当直流电源电压即可,元件内部已封装了音频振荡电路,在得电状态下即起振发声。

市场上的有源蜂鸣器分为3V、5V、6V等系列,以适应不同的应用需要。

其电路设计参见系统电原理图。

其中PNP小功率三极管Q2采用9012,其最大集电极电流为800mA,完全满足蜂鸣器驱动的需要。

适当调节基极电阻可改变蜂鸣器的发声功率(即响度)。

1.2.3电子闹钟的显示电路设计

显示采用共阳数码管,其目的是为了简化限流电路的设计和实现亮度可调的要求。

4位数码管显示电路见图1-7。

从图中可知,该显示电路采用了与一般的段电流电阻限流方式不同的实现方式,由此减少了4×8=32个限流电阻,简化了硬件系统。

每一笔画段二极管正常发光时的电流一般为10mA左右(当然,电流大小取决于选用的数码管是普亮、高亮还是超高亮类型的不同),其两端压降约为2.0V,也就是说,只要数码管的公共端(COM)加+2.0V以上电压,即可满足每笔画段发光二极管的发光要求,而且适当调节此电压值即可改变发光二极管的电流,从而达到调节亮度的目的。

此电压采用三端可调稳压电路W1(LM317)来实现。

其输入为+5V,按照图中参数,其输出电压由公式1-1决定:

 

                  (1-1)

图1-7 4位共阳数码管显示电路

式1-1中,R5为200Ω,R6可调,R4为220Ω,因此输出电压为2.17~2.63V。

但由于输入输出压差至少为2.5V,因此极限电压为2.5V。

为了节约CPU的口线,显示采用了串行通信口的串行显示接口方式,利用串口的0工作方式在发送TXD端口(P31)的时钟信号的作用下通过接收RXD端口(P30)将显示段码串行数据送入8位串入并出移位寄存器74LS164,控制相应的数码管。

图1-7只画出了一个数码管的连接。

端口P32的作用是通过LM317控制数码管显示的开启与关闭,当P32为低电平时Q1关断,317的输出电压低于1.5V,不足以发光,避免了在显示数据刷新时显示的抖动现象。

1.2.4电源设计

由于89C2051通常有-12和-24两种型号,对应的时钟频率分别为12M和24MHz,前者的工作电压为2~6V,后者的工作电压为4~6V,这点在设计选用时应当予以注意。

考虑到交直流两用的要求和三端稳压电路选用的方便(通常的系列为5V,6V,…),选择工作电压为5V。

电源系统设计如图1-8示。

图1-8 闹钟的电源系统原理图

应当说明的是,尽管有很多型号的7805三端稳压集成芯片,其标称最大输出电流均为1.5A,但在实际应用中,该最大输出电流值往往取决于两个方面:

1)足够的散热面积;2)不同的生产厂家。

按照很多开发者的经验,ST公司的7805三端稳压芯片能接近标称值。

在设计中,必须保证7805的输入电压Vi和输出电压Vo的压差大于2.5V,即Vi-Vo≥2.5V,否则失去稳压能力,同时考虑到功耗问题,此压差又不宜太,太大则增加7805本身的功率消耗,增加芯片的温升,不利于安全。

因此,选为9V。

当交流电源失电或失效时,电压为6V的直流电源(电池组或蓄电池)通过二极管投入作用,硅二极管的导通电压降约为0.2V左右,因此满足系统的电源要求。

1.2.5硬件电原理图

系统的硬件电原理图见图1-9。

 

图1-9 电子闹钟的系统电原理图

1.3电子闹钟的软件系统设计

软件设计的重点在于秒脉冲信号的产生、显示的实现、以及按键的处理等方面。

关于显示实现和按键处理的软件设计参见本节相应小节。

这里主要讨论秒脉冲的产生原理。

基于软件的秒脉冲信号通常有延时法和定时中断法。

延时法一般采用查询方式,在延时子程序前后必然需要查询和处理的程序,导致误差的产生,因此其秒脉冲的精度不高;中断法的原理是,利用单片机内部的定时器溢出中断来实现。

例如,设定某定时器每100ms中断1次,则10次的周期为1s。

这种实现法的特点是精度高,秒脉冲的发生和其他处理可以并行进行。

本系统采用这种方式,实现的关键是定时器工作方式的选择和定时参数的计算设定。

具体内容参见源程序中的相关说明。

本系统中所使用的晶振频率为6MHz。

1.3.1软件系统中的主模块设计

主模块是系统软件的主框架。

结构化程序设计一般有“自上而下”和“自下而上”两种方式,“自上而下”法的核心就是主框架的构建。

它的合理与否关系到程序最终的功能的多少和性能的好坏。

本系统的主模块的程序框图用图1-10的表示。

具体代码实现以下分别讨论,注意,代码中的有关变量的含义和作用要参阅源程序清单部分的说明。

                  

                    

                      

                     

                     

                       

 

                       

                         

图1-10 主程序流程框图

1.主模块的ASM51汇编语言实现

以下程序为上述主模块的51汇编语言实现,有关设计思想在程序中均作了详细分析说明。

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,#0

MAIN_00:

LCALLDISPLAY1;必须再次刷新,否则会出现尾位不显示的情况

MAIN_0:

SETBTR0;设置完后开始走时,启动定时器T0

SETBET0;允许T0溢出中断

MAIN_1:

JBFRESH,MAIN_2;时(分)有变化,则刷新显示

SJMPMAIN_3;否则,不更新显示

MAIN_2:

LCALLDISPLAY1;先对时分数据进行HEX2BCD转换后显示

SJMPMAIN_3;进入死循环,只有复位才能重新设置

MAIN_3:

JBCSEC,MAIN_4;判秒到否

SJMPMAIN_1

MAIN_4:

CPLL1;到则进行秒指示

CPLL2

JNBWARNING,MAIN_5

CPLBEEP;开始闹铃

INCWARNCNT;闹铃次数+1

MOVA,WARNCNT

XRLA,#08

JNZMAIN_5;到8次(实际是4次),则停止

CLRWARNING

MOVWARNCNT,#0

MAIN_6:

SETBBEEP

MAIN_5:

MOVR6,#60

LCALLDEL20_0;点亮时间(不能太长,否则影响秒指示,短则太暗)

SJMPMAIN_1

 

2.主模块的C51语言实现

以下代码为上述主模块的C51语言实现,该实现中没有闹铃时间设定功能。

voidmain(void)

{

sys_init();/*系统初始化*/

t0_init();/*定时器初始化*/

t1_init();

uart_init();/*串口初始化*/

buf[0]=0x0a;/*"P."的段码送显示缓冲区*/

buf[1]=0x0b;

buf[2]=0x0b;

buf[3]=0x0b;

display();/*显示待机符P.*/

settime();/*等待设置当前时间*/

display();/*带闪烁后要加显,否则会出现尾位不显的现象*/

TR0=1;/*设置完后开始走时,启动定时器T0*/

ET0=1;/*允许T0溢出中断*/

while

(1)

{

if(fresh)/*判是否要刷新显示(分或时变化)*/

{

buf[0]=hourh;/*是,则新的时间送显示缓冲区*/

buf[1]=hourl;

buf[2]=minuh;

buf[3]=minul;

display();/*显示刷新*/

if(sec)/*判秒指示要刷新否*/

{

sec=0;/*是,则刷新(闪烁)*/

L1=!

L1;

L2=!

L2;

delay20ms();/*点亮时间不能太长,否则影响秒指示,短则太暗*/

}

}

else

{

if(sec)

{

sec=0;

L1=!

L1;

L2=!

L2;

delay20ms();

}

}

}

}

1.3.2基本显示模块设计

基本显示模块设计的重点是由显示代码取得相应的段码、显示段码数据的串行发送,程序流程如图1-11所示。

其中时个位的段码必须加上小数点,即带小数点显示时个位,目的是以小数点符代替时间分割符“:

”(因为一般的数码管无法显示字符“:

”)。

 

图1-11 基本显示模块的程序流程图

1.基本显示模块的ASM51语言实现

以下代码为基本显示模块的51汇编语言实现。

DISPLAY:

LCALLHEX2BCD;数据转换

DISPLAY1:

SETBDISPCON;关闭显示

MOVA,HOURH;取出小时数据

ADDA,#30H;加上偏移量

MOVCA,@A+PC;取出段码

MOVSBUF,A;送入74LS164

DL1:

JNBTI,DL1;等待发送完成

CLRTI

MOVA,HOURL

ADDA,#24H

MOVCA,@A+PC

ANLA,#0FEH;显示时分分隔符:

(这里用.代替)

MOVSBUF,A

DL2:

JNBTI,DL2

CLRTI

MOVA,MINUH;分

ADDA,#16H

MOVCA,@A+PC

MOVSBUF,A

DL3:

JNBTI,DL3

CLRTI

MOVA,MINUL

ADDA,#0AH

MOVCA,@A+PC

MOVSBUF,A

DL4:

JNBTI,DL4

CLRTI

CLRDISPCON;打开显示

RET

;****************************************************************

;0~9的段码(共阳数码管)

;****************************************************************

;74LS164的345610111213对应数码管的A,B,C,D,E,F,G,DP

;但是串口方式0发送的首位是最最低位,因此Q0~Q7中的Q0其实是最高位,

SEGTAB:

DB03H,9FH,25H,0DH,99H

DB49H,41H,1FH,01H,09H

DB0FFH

2.基本显示模块的C51语言实现

以下代码为基本显示模块的C51语言实现。

voiddisplay(void)

{

ucharout;

DISPCON=1;/*关闭显示,防止传送数据期间闪烁*/

out=seg[buf[0]];/*取出高位时段码*/

SBUF=out;/*送入74LS164*/

while(!

TI);/*等待发送完成*/

TI=0;

out=seg[buf[1]];/*取出低位时段码*/

out&=0xfe;/*显示时分分隔符:

(这里用.代替)*/

SBUF=out;

while(!

TI);

TI=0;

out=seg[buf[2]];/*分*/

SBUF=out;

while(!

TI);

TI=0;

out=seg[buf[3]];

SBUF=out;

while(!

TI);

TI=0;

DISPCON=0;/*所有数据已送入后开显示*/

}

1.3.3当前编辑位闪烁功能的实现

当前编辑位闪烁功能能使时间设定编辑模块的人机环境更加友善,其实现的原理是:

利用定时器1每100ms的溢出中断,实现每0.5s将闪烁位标志求反;在时间设定模块中根据此标志的状态,分别显示当前时间参数或关闭显示,达到每0.5s亮-灭交替的效果,即闪烁。

上述思想用程序框图表示为图1-12。

定时器1的中断程序思想参见下面代码中的注释说明。

 

图1-12 当前编辑位闪烁功能实现的程序流程

1.当前编辑位闪烁功能的ASM51语言实现

以下代码为当前编辑位闪烁功能的51汇编语言实现,是从时间设定模块中截取的一部分。

SET_0:

JNBSS,SET_06;判闪烁标志(一亮一灭)

JNBHH,SET_02;为真,则当前位灭

MOVHHBACK,#0AH;灭的代码

MOVHLBACK,HOURL;其他显示位送该缓冲区

MOVMHBACK,MINUH

MOVMLBACK,MINUL

SJMPSET_01

SET_02:

JNBHL,SET_03

MOVHHBACK,HOURH

MOVHLBACK,#0AH;灭的代码

MOVMHBACK,MINUH

MOVMLBACK,MINUL

SJMPSET_01

以下为定时器1的100ms定时溢出中断子程序。

TIMER1:

PUSHACC

MOVTH1,#3CH;100ms定时常数

MOVTL1,#0B0H

INCCOUNT;中断次数加1

MOVA,COUNT

XRLA,#5;判到5

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 动态背景

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1