您现在的位置是:首页 > 电路图 > 电路图

带闹钟智能电子钟

转载来源:电子技术应用-AET chinaaet.com 电子发烧友 elecfans.com2017-03-16

简介电路特点 以一片AT89C2051单片机为主体,其显示数据从P3.0-P3.7口输出,P1口输出对应的六位位选信号。电子钟程序设计时使用了T0作为计时,T1为调整时显示用。只要对程序稍加更改,可以

电路特点

以一片AT89C2051单片机为主体,其显示数据从P3.0-P3.7口输出,P1口输出对应的六位位选信号。电子钟程序设计时使用了T0作为计时,T1为调整时显示用。只要对程序稍加更改,可以很容易的实现8路定时功能。

电子钟只用一个轻触式按键来完成所有的设置。为了使闹钟音量足够大,采用了PNP型三极管8550来驱动蜂鸣器,驱动电阻用1K的,蜂鸣器为5V小型蜂鸣器。若用NPN来驱动蜂鸣器音量要小一点。LED数码管位驱动用8850,电子钟采用自制的3A开关电源供电。如图1。供电效率高,可和7-24V的直流电源直接连接,电子钟工作电流20MA左右。

LM2576做的3A电源

电子钟功能

一、时间显示:

六位LED数码管显示时间,按24小时制分别显示“时时:分分:秒秒”,最小单位为秒。精确度5秒/月(与晶振有关,可加电容调整)。

二.走时调整:

长按按键0。5秒钟以上,可以进入闹钟和时间设置状态,按“闹钟分”、“闹钟时”、“走时分”、“走时时”的顺序进行设置。

设置方法为:

1、  走时和闹钟调整:

走时状态,长按按键0。5秒钟以上后松开按键,“闹钟分”以0。3秒的速度闪烁显示,再次按下按键不要松开,“闹钟分”会快速的从00到59之间变化,从而达到快速设定时间的目的。当显示到需要的时间时松开按键,会自动进入到设置“闹钟时”的状态,可以同样的方法设置“闹钟时”。当松开按键后此时有两种选择,一是长按按键退出闹钟设置状态,返回到正常走时;二是短按一下按键进入继续设置时间的状态。设置方法相同。

注意:为了对只要设置闹钟时不影响电子钟的走时精确度,在设置闹钟的时候,秒钟位走时不停止,正常显示,但对闹钟设置无任何影响。在进入走时设置后自动把秒设置为00秒,以确保可以在设置后从00秒开始走时,有利于提高我们调时的准确性。

2、  闹钟开关设置:只要短按一下按键即可开启或关闭闹钟。

走时状态,短按一下按键可以查询闹钟时间,约显示两秒钟后,自动设置闹钟开关。其中00为闹钟关闭状态、01为闹钟开启状态。设置完毕自动退出。

注意:如果原来闹钟为开启状态则关闭闹钟,反之,开启闹钟。第一次通电工作时默认为闹钟开启。

硬件电路实现

电路如图2所示,因有秒钟位,末设置秒点闪烁,如果要秒位可在VCC与数码管的DP之间接一个1K电阻即可达到12:00显示的效果。

图2  电子钟原理图

电路所用的元件较少,根据实际情况可以调整R8的阻值来改变数码管亮度。

本人所做的实物如图3所示。


 

图3         实物图

源程序

源程序如下:      ORG       0000H              ;程序开始入口

                  LJMP      START

                  ORG       0003H              ;外中断0中断程序入口

                  RETI

                  ORG       000BH              ;定时器T0中断程序入口

                  LJMP      INTT0              ;跳至INTTO执行

          ORG       0013H              ;外中断1中断程序入口

          RETI

          ORG       001BH              ;定时器T1中断程序入口

          LJMP      INTT1

          ORG       0023H              ;串行中断程序入口地址

                  RETI

;---------------主程序----------------------;

             START:MOV     R0,#70H             ;70给R0,清70-7FH显示内存

                   MOV     R7,#0FH

         CLEARDISP:MOV     @R0,#00H            ;0给R0中的数为地址的内存中存放(70H)

                   INC     R0

                   DJNZ    R7,CLEARDISP

                   MOV     78H,#2              ;默认时间为12:00,闹钟5:00

                   MOV     79H,#1

                   MOV     74H,#2              ;防止上电时数码管显示00小时

                   MOV     75H,#1

                   MOV     66H,#1              ;中断退出时66H为1时,分、时计时单元数据移入显存标志

                   MOV     68H,#1              ;上电默认闹钟开状态

                   MOV     7DH,#6              ;闹钟时十位

                   MOV     7CH,#3

                   MOV     69H,#0

                   MOV     7AH,#0AH            ;放入"熄灭符"数据

                   MOV     TMOD,#11H           ;设T0、T1为16位定时器

                   MOV     TL0,#0B0H           ;50MS定时初值(T0计时用)

                   MOV     TH0,#3CH

                   SETB    EA                  ;总中断开放

                   SETB    ET0                 ;允许T0中断

                   SETB    TR0                 ;T0定时器开始计时

                   MOV     R4,#14H             ;1秒定时用初值(50MS×20)

           START1:LCALL   DISPLAY             ;显示子程序

                   LCALL   BEEP                ;闹钟查询

                   JNB      P1.7,SETTIME        ;P1.7口为0时转时间调整程序

                   JMP     START1              ;P1.7口为1时跳回START1

;-----------------------时间闹钟调整系统--------------------------;

             NFLAG:MOV          A,68H           ;设置闹钟开关状态

                   CJNE         A,#1,BEE68

                   MOV          68H,#0

                   JMP          E6

             BEE68:MOV          68H,#1

                E6:MOV          66H,#8          ;中断退出66H不为1时分、时计时单元数据移入显存标志

                   MOV          72H,7BH

                   MOV          73H,7CH

                   MOV          74H,7DH

                   MOV          75H,7EH

                   LCALL        DDL

                   LCALL        DDL

                   MOV          72H,68H

                   MOV          73H,69H

                   MOV          74H,7AH

                   MOV          75H,7AH

                   LCALL        DDL

                   LCALL        DDL

                   MOV          66H,#1

                   LJMP       START1

           SETTIME:LCALL        DDL

                   JB             P1.7,NFLAG     ;键按下时间小于1秒,设置闹钟开关状态并查看闹钟时间,不关走时,确保准确,大于1秒调时

                   MOV          TL1,#0B0H      ;T1闪烁定时初值

                   MOV          TH1,#3CH

                   MOV          R2,#06H        ;进入调时状态,赋闪烁定时初值

                   MOV          66H,#8         ;调闹钟时保持走时,关闭时钟显示数据

                   SETB         ET1            ;允许T1中断

                   SETB         TR1            ;开启定时器T1

              SET1:LCALL        DISPLAY        ;调用显示,防止键按下无显示

                   JNB          P1.7,SET1      ;P1.7口为0等待键释放

                   MOV       R5,#00H        ;清设置类型闪烁标志

             SETN1:INC         R5             ;闹钟分调整

              SET5:LCALL        DISPLAY

                   JB             P1.7,SET5

            SEETN1:LCALL        DDL            ;有键按下大于1秒分时间连续加(0.5秒加1),小于1秒转调时状态

                   JB             P1.7,SET6      ;键释放查询,键释放自动转调时

                   MOV               R0,#7CH

                   LCALL      ADD1

                   MOV               A,R3

                   CLR          C

                   CJNE        A,#60H,HHN1

              HHN1:JC            SEETN1

                   LCALL      CLR0

                   JMP          SEETN1

              SET6:INC         R5             ;闹钟时调整

             SEET6:LCALL        DISPLAY

                   JB          P1.7,SEET6

           SEETNH1:LCALL        DDL

                   JB             P1.7,SETF

                   MOV          R0,#7EH

                   LCALL        ADD1

                   MOV          A,R3

                   CLR          C

                   CJNE        A,#24H,HOUU1

             HOUU1:JC           SEETNH1

                   LCALL      CLR0

                    JMP       SEETNH1

              SETF:LCALL        DISPLAY

                   JB             P1.7,SETF

                   LCALL        DDL

                   JNB          P1.7,SETOUT     ;短按调时,长按退出

                   CLR          ET0

                   CLR          TR0

                   MOV       70H,#00H        ;设定后的时间从00秒开始走时

                   MOV       71H,#00H

                   INC         R5

              SET3:LCALL        DISPLAY

                   JB             P1.7,SET3

             SETMM:LCALL        DDL

                   JB             P1.7,SET4

                   MOV               R0,#77H

                   LCALL      ADD1

                   MOV               A,R3

                   CLR          C

                   CJNE        A,#60H,MMH

               MMH:JC          SETMM

                   LCALL      CLR0

                   AJMP         SETMM

              SET4:INC          R5

             SEET4:LCALL        DISPLAY

                   JB          P1.7,SEET4

             SETHH:LCALL        DDL

                   JB             P1.7,SETOUT1

                   MOV          R0,#79H

                   LCALL        ADD1

                   MOV          A,R3

                   CLR          C

                   CJNE        A,#24H,HOUU

              HOUU:JC           SETHH

                   LCALL      CLR0

                   AJMP       SETHH

           SETOUT1:SETB     ET0

                   SETB       TR0             ;计时开始

            SETOUT:MOV     R5,#00H         ;清设置类型闪烁标志

                   CLR        TR1             ;关闭T1

                   CLR        ET1             ;关T1中断

                   MOV          66H,#1

           SETOUT2:LCALL        DISPLAY

                   JNB          P1.7,SETOUT2

                   LJMP        START1

;--------------------------延时1秒钟-----------------------;

               DDL:MOV          18H,#36

              DDL0:MOV          17H,#239

              DDL1:LCALL        DISPLAY

                   DJNZ         17H,DDL1

                   DJNZ         18H,DDL0

                   RET

;----------------------------T0中断程序------------------------;

            INTT0: PUSH  ACC                   ;打包

                   PUSH  PSW

                   CLR   ET0

                   CLR   TR0

                   MOV   A,#0B7H

                   ADD   A,TL0

                   MOV   TL0,A

                   MOV   A,#3CH

                   ADDC  A,TH0

                   MOV   TH0,A

                   SETB  TR0

                   DJNZ  R4, OUTT0             ;20次中断未到中断退出

           ADDSS:  MOV R4,#14H               ;20次中断到(1秒)重赋初值

                   MOV         R0,#71H               ;指向秒计时单元(70-71H)

                   ACALL ADD1                  ;调用加1程序(加1秒操作)

                   MOV   A,R3                  ;秒数据放入A(R3为2位十进制数组合)

                   CLR   C                     ;清进位标志

                   CJNE  A,#60H,ADDMM

           ADDMM:  JC         OUTT01                ;小于60秒退出

                   ACALL CLR0                  ;等于或大于60秒清0

                   MOV  R0,#77H               ;指向分计时单元(76H-77H)

                   ACALL ADD1

                   MOV         A,R3

                   CLR   C

                   CJNE  A,#60H,ADDHH

            ADDHH: JC     OUTT0

                   ACALL CLR0

                   MOV  R0,#79H               ;指向小时计时单元(78H-79H)

                   ACALL ADD1

                   MOV   A,R3

                   CLR   C

                   CJNE  A,#24H,HOUR

             HOUR: JC    OUTT0

                   ACALL CLR0

            OUTT0: MOV   A,66H                 ;查询标志

                   CJNE  A,#1,OUTT01

                   MOV   72H,76H               ;中断退出时将分、时计时单元数据移入对应显示单元

                   MOV   73H,77H

                   MOV   74H,78H

                   MOV   75H,79H

            OUTT01:POP  PSW                   ;出栈

                   POP   ACC

                   SETB  ET0                   ;开放T0

                   RETI                        ;中断返回

;---------------------------加1程序--------------------------;

             ADD1: MOV          A,@R0          ;取当前计时单元数据到A

                   DEC          R0             ;指向前一地址

                   SWAP         A              ;A中数据高四位与低四位交换

                   ORL           A,@R0          ;前一地址中数据放入A中低四位

                   ADD           A,#01H         ;A加1操作

                   DA             A              ;十进制调整

                   MOV          R3,A           ;移入R3寄存器

                   ANL           A,#0FH         ;高四位变0

                   MOV                @R0,A          ;放回前一地址单元

                   MOV          A,R3           ;取回R3中暂存数据

                   INC            R0             ;指向当前地址单元

                   SWAP         A              ;A中数据高四位与低四位交换

                   ANL           A,#0FH         ;高四位变0

                   MOV          @R0,A          ;数据放入当削地址单元中

                   RET

             CLR0: CLR          C

                   CLR          A              ;清累加器

                   MOV               @R0,A          ;清当前地址单元

                   DEC         R0             ;指向前一地址

                   MOV               @R0,A          ;前一地址单元清0

                   RET                         ;子程序返回

;-------------------------调时闪烁程序----------------------;

INTT1:          PUSH    ACC

                PUSH    PSW

                MOV     TL1,#0B0H

                MOV     TH1,#3CH

                DJNZ    R2,INTT1OUT                ;0.3秒未到退出中断(50MS中断6次)

                MOV     R2,#06H               ;重装0.3秒定时用初值

                CPL     02H                    ;0.3秒定时到对闪烁标志取反

                JB      02H,FLASH1             ;02H位为1时显示单元"熄灭"

                MOV     A,R5

                CJNE    A,#01H,NL

                JMP     NNN1

             NL:CJNE    A,#02H,NL1

                LJMP    NNN1

            NL1:CJNE    A,#03H,NL2

                LJMP    NLL

            NL2:CJNE    A,#04H,INTT1OUT

                LJMP    NLL

            NLL:MOV     72H,76H

                MOV     73H,77H

                MOV     74H,78H

                MOV     75H,79H

                AJMP    INTT1OUT

           NNN1:MOV     72H,7BH

                MOV     73H,7CH

                MOV     74H,7DH

                MOV     75H,7EH

       INTT1OUT:POP     PSW                       ;恢复现场

                POP     ACC

                RETI                         ;中断退出

         FLASH1:MOV     A,R5

                CJNE    A,#01H,ML

                LJMP    MNN1

             ML:CJNE    A,#02H,ML1

                LJMP    MNN2

            ML1:CJNE    A,#03H,MN

                LJMP    MLL

             MN:CJNE    A,#04H,INTT1OUT

                LJMP    MHL

            MLL:MOV     72H,7AH

                MOV     73H,7AH               ;显示单元(72-73H),将不显示分数据

                MOV     74H,78H

                MOV     75H,79H

                AJMP    INTT1OUT

            MHL:MOV     72H,76H

                MOV     73H,77H

                MOV     74H,7AH               ;显示单元(74-75H),小时数据将不显示

                MOV     75H,7AH

                AJMP    INTT1OUT

           MNN1:MOV     72H,7AH

                MOV     73H,7AH               ;显示单元(72-73H),将不显示闹钟分数据

                MOV     74H,7DH

                MOV     75H,7EH

                AJMP    INTT1OUT

           MNN2:MOV     72H,7BH

                MOV     73H,7CH

                MOV     74H,7AH

                MOV     75H,7AH               ;显示单元(74-75H),闹钟小时数据将不显示

                AJMP    INTT1OUT

;-------------------------显示-------------------------------;

 DISPLAY:MOV    DPTR,#DISDATA

         MOV    A,70H

         MOVC   A,@A+DPTR

         MOV    P3,A

         CLR    P1.0

         NOP

         NOP

         NOP

         SETB   P1.0

         MOV    A,71H

         MOVC   A,@A+DPTR

         MOV    P3,A

         CLR    P1.1

         NOP

         NOP

         NOP

         SETB   P1.1

         MOV    A,72H

         MOVC   A,@A+DPTR

         MOV    P3,A

         CLR    P1.2

         NOP

         NOP

         NOP

         SETB   P1.2

         MOV    A,73H

         MOVC   A,@A+DPTR

         MOV    P3,A

         CLR    P1.3

         NOP

         NOP

         NOP

         SETB   P1.3

         MOV    A,74H

         MOVC   A,@A+DPTR

         MOV    P3,A

         CLR    P1.4

         NOP

         NOP

         NOP

         SETB   P1.4

         MOV    A,75H

         MOVC   A,@A+DPTR

         MOV    P3,A

         CLR    P1.5

         NOP

         NOP

         NOP

         SETB   P1.5

         RET

    BEEP:MOV   A,68H           ;查询标志

         CJNE  A,#1,BEERE

         MOV   A,78H           ;查询闹钟时个位

         CJNE  A,7DH,BEERE

         MOV   A,79H           ;查询闹钟时十位

         CJNE  A,7EH,BEERE

         MOV   A,76H           ;查询闹钟分个位

         CJNE  A,7BH,BEERE

         MOV   A,77H           ;查询闹钟分十位

         CJNE  A,7CH,BEERE

      BB:CLR   P1.6

         LCALL DDL

         SETB  P1.6

         LCALL DDL

         JNB   P1.7,BEERR

   BEERE:RET

   BEERR:SETB  P1.6

         MOV   68H,#0

         LCALL DISPLAY

         JNB   P1.7,BEERR

         JMP   BEERE

 DISDATA:DB 0C0H,0F9H,64H,70H,59H,52H,42H,0F8H,40H,50H,0FFH   ;0123456789空白

       END