您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 基于AT89C2051的电子闹钟设计
基于AT89C2051的电子闹钟设计电子闹钟的电路基本应包括秒指示电路、时间显示电路、按键电路、供电电源以及闹铃指示电路等几部分。4.1电子闹钟的硬件系统框架电子闹钟的系统框架如图4-1示。图4-1时钟系统电路原理框图4.2电子闹钟电路的设计及原理电子闹钟电路的设计具体地说有:1.闹铃指示电路设计;2.系统时钟电路设计;3.电子闹钟的显示电路设计;4.系统复位电路设计。以下分别讨论:4.2.1闹铃指示电路的设计闹铃指示可以有声或光两种形式。本系统采用声音指示,其电路如图4-2所示。其关键元件是蜂鸣器。蜂鸣器有无源和有源两种,前者需要输入声音频率信号才能正常发声,后者则只需外加适当直流电源电压即可,元件内部已封装了音频振荡电路,在得电状态下即起振发声。给予本电路的特点及实现功能的要求,我们选用有源的蜂鸣器。4.2.2系统时钟电路设计振荡电路用于产生单片机工作所需要的时钟信号。单片机内部有一个高增益反相放大器,其输入端为芯片引脚XTAL1,输出端为引脚XTAL2。在芯片的图4-2闹铃指示电路CPU按键与按钮电路复位等辅助电路4位数码管显示电路闹铃声光指示电路电源系统外部有XTAL1和XTAL2之间跨接的晶体振荡器和微调电容,共同构成了一个稳定的自激振荡器。图中的C1、C2电容起着系统时钟频率微调和稳定的作用,因此,应正确选择参数(30±10pF),并保证其对称性。实验表明,这2个电容元件对闹钟的±走时误差有较大关系。。图4-3系统时钟电路4.2.3电子闹钟的显示电路设计译码是编码的逆过程,在编码时,每一种二进制代码状态都赋予了特定的含义,即都表示了一个确定的信号或者对象。把代码状态的特定含义“翻译”出来的过程叫做译码,实现译码操作的电路称为译码器。本设计采用显示译码器作为译码电路。在数字系统和装置中,显示器和译码器配合使用,或者直接利用译码器驱动显示器,这类译码器叫做显示译码器。本设计采用74LS47译码电路。图4-474LS47引脚图中规模集成电路74LS47,是一种常用的七段显示译码器,该电路的输出为低电平有效,即输出为0时,对应字段点亮;输出为1时对应字段熄灭。该译码器能够驱动七段显示器显示0~15共16个数字的字形。输入A3、A2、A1和A0接收4位二进制码,输出Qa、Qb、Qc、Qd、Qe、Qf和Qg分别驱动七段显示器的a、b、c、d、e、f和g段。74LS47是输出低电平有效的七段字形译码器,它在这里与数码管配合使用。在数字钟电路中,译码器的输入信号就是计数器的输出信号,它的输出端接至数码管。计数器输出的四位BCD码经译码后,变成某个十进制数字对应的控制电平,去驱动数码管各段发光,从而把该数字显示出来。8421BCD码译码器74LS47真值表见表4-1。由表可看出,74LS47的输出为一组七位二进制代码,有效信号为低电平。而共阳极数码管,要求输入为低电平,正好与74LS47的输出电平极性相适配。不必另加反相器。部分引脚功能LT:试灯输入,是为了检查数码管各段是否能正常发光而设置的。当LT=0时,无论输入A3,A2,A1,A0为何种状态,译码器输出均为低电平,若驱动的数码管正常,是显示8。BI:灭灯输入,是为控制多位数码显示的灭灯所设置的。BI=0时。不论LT和输入A3,A2,A1,A0为何种状态,译码器输出均为高电平,使共阳极7段数码管熄灭。RBI:灭零输入,它是为使不希望显示的0熄灭而设定的。当对每一位A3=A2=A1=A0=0时,本应显示0,但是在RBI=0作用下,使译码器输出全1。其结果和加入灭灯信号的结果一样,将0熄灭。RBO:灭零输出,它和灭灯输入BI共用一端,两者配合使用,可以实现多位数码显示的灭零控制。表4-174LS47真值表字型输入输出NA4A3A2A1abcdefg000000000001100011001111200100010010300110000110401001001100501010100100601010100000701100001111810000000000910010000100最终的显示部分电路图如图所示图4-5时钟电路的显示电路4.2.4系统复位电路的设计复位电路通常有:1)RC复位电路;2)专用µP监控电路。本设计采用的是RC上电复位电路。RC上电复位电路的实质是一阶充放电电路,系统上电时该电路提供有效的复位信号RST(高电平)直至系统电源稳定后撤销复位信号(低电平)。图4-6RC复位电路4.3电源设计图4-7闹钟的电源系统原理图AT89C2051通常有12v和24v两种型号,对应的时钟频率分别为12MHz和24MHz。考虑到交直流两用的要求和三端稳压电路选用的方便,选择工作电压为5V。ST公司的7805三端稳压芯片最接近标称值(最大输出电流为1.5A)。在设计中,必须保证7805的输入电压Vi和输出电压Vo满足Vi-Vo≥2.5V,否则失去稳压能力,从功耗角度,此压差太大则增加7805本身功率消耗。因此,选为9V。交流220V电压经TR1降压后,经BR1整流、C3和C6滤波及7805稳压后输出。当交流电源失电或失效时,则自动启用电池组作为备用电源。电压为6V的直流电源通过二极管作用。4.4电子闹钟硬件系统原理图P3.0口接时+键,来控制显示小时的设置。P3.0初始状态为1,每按一次按键,此时显示的时个位加1。P3.1口接分+键,来控制显示分钟的设置。P3.1初始状态为1,每按一次按键,此时显示的分个位加1。P3.2口接定时按键。在电子钟正常走时状态下,P3.2为高电平,按定时键,P3.2变为低电平,触发定时系统,此时可以设置闹铃时间,设置完成后再按确定/叫停键即可。P3.3口接12小时/24小时开关,来根据需求选择合适的时间制式。未按开关时,P3.3为高电平,此时为12小时制式;按下开关,P3.3变为低电平,此时为24小时制式。P3.4口接蜂鸣器。P3.4初始状态为1,此时蜂鸣器不响。当到达闹铃时间后P3.4置0,蜂鸣器发出警报。P3.5接秒指示。初始状态为1,每走1s,P3.5取反,以此来进行秒指示。图4-9闹钟的电源系统原理图图4-8电子闹钟硬件系统电路原理图5电子闹钟的软件系统本设计主要由主模块、基本显示模块、时间设置模块、系统走时模块以及闹铃判断模块等组成,下面依次进行介绍:5.1主模块设计主模块是系统软件的主框架。结构化程序设计一般有“自上而下”和“自下而上”两种方式,基于本设计的思路,我们采用“自上而下”的方法来设计程序。“自上而下”法的核心就是主框架的构建。它的合理与否关系到程序最终的功能的多少和性能的好坏。程序中,对于程序何时跳转、程序何时调用,都要慎重安排。最终确定以下的顺序:图5-1主流程图单片机数据缓存单元分配如下:走时时间存储单元:R4、R5、R6定时时间存储单元:R0、R1分别存储时钟时间分位、时位设置蜂鸣器,秒指示寄存器清零外部输出置1显示初状态0000设置当前时间启动走时CPU初始化P3.2=0N设置闹铃时间启动走时设置闹铃标志清零,蜂鸣器报警,闹铃存储清零延时闹铃小时到了吗?闹铃分到了吗?Y显示刷新NN闹铃时间存储单元:38H、39H分别存储第一次闹钟时间分位、时位,40H、41H分别存储第二次闹钟时间分位、时位。主程序清单如下:ORG00H;开始地址AJMPSTART1;跳转到开始程序ORG03H;外部中断0入口地址LJMPCLOCK1;跳转到闹钟设置程序START1:MOVR0,#00H;分钟数据BCD码MOVR1,#00H;小时数据BCD码SETBP3.4;关闭蜂鸣器SETBP3.5;秒指示置1SETBP3.0;按键初始化SETBP3.1SETBP3.2SETBP3.7START:MOVA,R0;更新显示LCALLXSMOVA,R1LCALLXS15.2基本显示模块AT89C2051中P1为输出口,低四位P1.0-P1.3为要显示的数据的二进制码,高四位P1.4-P1.7为片选口,用来选择具体令哪一个数码管亮。例如想要显示时间10点51分。先显示分位,51经BCD码调整后变为01010001,存入累加器A中,累加器A先压栈,目的为保护原累加器A中内容,累加器A与00001111相与变为00000001,此操作意为保护低位即要显示的数据。此时00000001与10000000相加为10000001,即最终P1口输出的数据位10000001.高四位1000控制数码管的显示,P1.7、P1.6、P1.5、P1.4分别控制第四个、第三个、第二个、第一个数码管的亮灭,此时P1.7为高电平,所以第四个数码管亮,其余灭。低四位0001送入74LS47,74LS47输入为0001,译码后输出信号为1001111,数码管为共阳极相接,所以最终为第四个数码管显示为1,即分个位为1。释放累加器A,此时交换累加器A中高半字节与低半字节的内容,最终内容变为00010101,再同00001111相与,然后同00100000相加,最终结果为00100101。经片选、74LS47译码后,最终第三个数码管显示为5,即分十位为5。时个位与时十位的显示原理与分个位显示原理相似,唯一不同之处是时个位显示中与累加器A相加的为00100000,时十位显示中与累加器A相加的为00010000,即第一个数码管的片选信号为0001,第二个数码管的片选信号为0010。每一个数码管显示一个数,调用延时,四个数码管循环点亮,由于调用延时时间为20ms,利用人的视觉暂留生理特性,所以最终看到的为1051,表示10点51分。显示模块程序清单如下:XS:PUSHACC;进栈ANLA,#0FH;保护低位MOVR3,#80H;设置片选信号ADDA,R3;加片选信号DAA;累加器内容十进制调整MOVP1,A;输出数据LCALLFILTER;调用延时子程序POPACC;出栈SWAPA;累加器交换高半字节与低半字节内容ANLA,#0FH;保护低位MOVR3,#40H;设置片选信号ADDA,R3;加片选信号MOVP1,A;输出数据LCALLFILTERRETXS1:PUSHACC;进栈ANLA,#0FH;保护低位MOVR3,#20H;设置片选信号ADDA,R3;加片选信号MOVP1,A;输出数据LCALLFILTERPOPACC;出栈SWAPAANLA,#0FHMOVR3,#10H;设置片选信号ADDA,R3MOVP1,ALCALLFILTERRET5.3时间设定模块初始状态为0000,用累加器存储总的按键次数,累加器内容给R1,从AT89C2051P1口输出,高四位进行片选,低四位送入74ls47经译码后输出,显示其间有一个上下线的判断。具体如下:小时的设置:每按一次时‘+’键,R1内容自动加1,把R1内容给A。A进行BCD调整,判断P3.3的状态,若P3.3等于0,则系统为24小时制式,此时比较A中内容是否满24,满24后A清零,最终输出显示,表示时十位、时个位为00。否则直接输出显示。流程图如下:分的设置:刷新显示,每按一次分‘+’键R0内容自动加1,把R0内容给A。A进行BCD调整,此时比较A中内容是否满60,满60后A清零,然后输出显示,表示分十位、分个位为00,否则直接输出显示。流程图如下所示:按分+键,P3.1为0分满60分显示分位寄存器加1分数据BCD码调整分清零YN刷新显示N时+键为0时位寄存器加1时数据BCD码调整显示时清零显示判断P3.3=1更新显示NNY满13满24显示时置1显示NYYN图5-2小时的设置的流程图图5-3分钟设置的流程图时间设置模块的程序清单如下:MADD:JBP3.1,HADD;判断分+1按键是否操作JNBP3.1,$;等待释放按键INCR0;内容自加1MM1:MOVA,R0;设定分ADDA,#00HDAA;十进制调整CJNEA,#60H,M1MOVA,#00HM1:MOVR0,ALCALLXSMOVA,R1LCALLXS1HADD:MOVA,R0;更新显示LCALLXSMOVA,R1LCALLXS1JBP3.0,OK;设置小时数据JNBP3.0
本文标题:基于AT89C2051的电子闹钟设计
链接地址:https://www.777doc.com/doc-7290789 .html