视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
带闹钟智能电子钟的设计与制作
2025-10-05 18:32:10 责编:小OO
文档
电路特点 

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

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

电子钟功能 

一、时间显示:

六位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、图4所示。

源程序 

源程序如下:      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,H,70H,59H,52H,42H,0F8H,40H,50H,0FFH   ;01234567空白 

       END

  下载本文

显示全文
专题