单片机课程设计之数字电子钟完整程序 | 太极博弈原理官方站|紫欽天|融通百科为我所用|生活全智慧|生活智慧之书

正在阅读:

单片机课程设计之数字电子钟完整程序

880

时钟程序的设计   程序编号为:CLOCK.ASM

              时钟功能说明:

1.时间定时采用T0定时4毫秒,中断250,表示1秒钟到,秒寄存器加1,60秒钟后,分钟加1,同时清秒寄存器,60分钟后,小时寄存器加1, 同时清分钟寄存器,12:59小时后,小时变成1:00.周而复始;

2.开机时,显示12:00;

3.P3.2控制分钟的调整,每按一次,分钟加一;

4.P3.3控制小时的调整,每按一次, 小时加一;

5. 30H放置秒钟值,31H放置分钟值,33H放置小时值;50H放置分钟值个位,51H放置分钟值十位,52H放置小时值个位,53H放置小时值十位;

       ORG          0000H

         LJMP         START

         ORG          000BH

         LJMP         TIMER0

START:

         MOV SP,#60H                                                 ;指针入堆栈

         ;MOV         28H,#0                                                    ;显示积存器初值为0

         MOV 32H,#12                                                  ;小时寄存器初值为12

         MOV 30H,#0                                                    ;分钟寄存器初值为0

         MOV 31H,#0                                                    ; 秒寄存器初值为0

         MOV TMOD,#01H

         MOV TH0,#HIGH(65536-4000)                             ;设置定时中断初值4毫秒

         MOV TL0,#LOW(65536-4000)

         MOV IE,#82H                                                   ;开中断

         MOV R4,#250

         SETB        TR0                                                ;开定时

NEXT0:

         JB     P3.2,NEXT2                                           ;分钟调整键按下了吗?

         CALL         DELAY                                                     ;

         ;MOV         A,31H

         ;ADD         A,#01                                                       ;分钟加1

         ;DA   A

         INC  31H

         MOV A,31H

         CJNE        A,#13,NEXT1                                         ;小时到13了吗?

         MOV 31H,#1                                                    ; ,

NEXT1:

         JNB  P3.2,$                                                      ; 小时调整键松开了吗?

         CALL         DELAY                                                     ;

NEXT2:

         JB     P3.3,NEXT0                                           ;小时调整键按下了吗?                         

         CALL         DELAY                                                    ;

         INC  32H

         MOV A,32H                                                     

         ;ADD         A,#01                                                       ;小时加1

         ;DA   A

         ;MOV         32H,A

         CJNE        A,#12,NEXT3                                         ;小时到了12?

         MOV 32H,#0                                                    ;,0

NEXT3:

         JNB  P3.3,$                                                      ;小时调整键松开了吗?

         LCALL      DELAY

         LJMP         NEXT0

TIMER0:

         PUSH       ACC

         PUSH       PSW

         MOV TH0,#HIGH(65536-4000)                             ;从新设置定时值

         MOV TL0,#LOW(65536-4000)

         DJNZ        R4,X2                                                      ;中断了250次吗?

         MOV R4,#200                                        ;,从新设置次数

         CALL         CLOCK                                                   ;调时间调整程序

         CALL         HECBCD                                                ;将时间转换成BCD

         CALL         DISPLAY 

X2:

         ;CALL        HECBCD

         CALL         DISPLAY                                                 ;显示时间

         POP PSW

         POP ACC

         RETI

DISPLAY:

         MOV A,50H                          ;显示当前按键值                 

         ADD A,#40H

         MOV P2,A

         MOV A,51H                          ;显示第2个按键值

         ADD A,#10H

         MOV P2,A

         MOV A,52H                          ;显示第3个按键值

         ADD A,#20H

         MOV P2,A

         CALL         DELAY

         MOV A,53H                          ;显示第4个按键值

         ADD A,#30H

         MOV P2,A

         RET

CLOCK:

         INC            30H                              ;秒钟加1

         MOV          A,30H

         CJNE                 A,#3CH,CLOCK1            ;60秒了吗?

         MOV          A,#0                             ;,0

         MOV          30H,A

         INC            31H                              ;分钟加1

         MOV          A,31H

         CJNE                 A,#3CH,CLOCK1               ;60分钟了吗?

         MOV          A,#0                             ;,0

         MOV          31H,A

         INC            32H                              ;小时加1

         MOV          A,32H

         CJNE                 A,#12,CLOCK1                   ;12小时了吗?

         MOV          A,#0                             ;,0

         MOV          32H,A

CLOCK1:

         RET

HECBCD:

         MOV          A,30H                 ;分钟值送A

         MOV          B,#10                           ;除以10

         DIV            AB

         MOV          50H,B                 ;个位放在50H

         MOV          51H,A                 ;十位放在51H

         MOV          A,31H                 ;小时值送A

         MOV          B,#10                 ; 除以10

         DIV            AB

         MOV          52H,B                 ;个位放在52H

         MOV          53H,A                 ; 十位放在53H

         MOV          A,32H                 ;小时值送A

         MOV          B,#10                 ; 除以10

         DIV            AB

         MOV          54H,B                 ;个位放在54H

         MOV          55H,A                 ; 十位放在55H

         RET

DELAY:

         MOV R6,#10

DELAY1:

         MOV R7,#195

         DJNZ        R7,$

         DJNZ        R6,DELAY1

         RET

         END

抱歉,这篇文章关闭了评论功能。

关闭