AT89C51汇编编写简易电子钟程序

2025-03-06 22:07:02
推荐回答(1个)
回答1:

;12M晶振 共阳数码管  

 STRT EQU P3.0 ;开始

 STP EQU P3.1 ;停止

 CLRR EQU P3.2 ;复位

 SEC EQU P3.5 ;秒调整

 MIN EQU P3.6 ;分调整

 HOUR EQU P3.7 ;时调整

 

 ORG 00H

 SJMP MAIN

 ORG 0BH

 AJMP T0INT0

 ORG 30H 

MAIN: MOV  SP,#60H

 MOV R4,#20

 MOV TMOD,#01H

 MOV TH0,#03CH ;12M晶振时定时初值取#3CB0H,实验证明用3C09H误差更小 

 MOV TL0,#0B9H 

 SETB ET0

 SETB EA

kS: LCALL DISP

 JB SEC,KM

 LCALL DISP

 JNB SEC,$-3

 AJMP SINC

kM: JB MIN,KH

 LCALL DISP

 JNB MIN,$-3

 AJMP MINC

KH: JB HOUR,K1

 LCALL DISP

 JNB HOUR,$-3 

 AJMP HINC 

SINC: INC 26H

 MOV A,26H

 CJNE A,#60,SINC0

 MOV 26H,#0

SINC0: AJMP KS

MINC: INC 27H

 MOV A,27H

 CJNE A,#60,MINC0

 MOV 27H,#0

MINC0: AJMP KM

HINC: INC 28H

 MOV A,28H

 CJNE A,#24,HINC0

 MOV 28H,#0

HINC0: AJMP KH  

k1: LCALL DISP 

 JB STRT,K2

 LCALL DISP

 JNB STRT,$-3

 AJMP START

k2: JB STP,K3

 LCALL DISP

 JNB STP,STOP

K3: JB CLRR,KS

 LCALL DISP

 JNB CLRR,CLEAR 

 AJMP KS

START: SETB TR0

 AJMP K1

 

STOP: CLR TR0

 AJMP K2

CLEAR: CLR     TR0

 MOV A,#0

 MOV 20H,A

 MOV 21H,A

 MOV 22H,A

 MOV 23H,A

 MOV 24H,A

 MOV 25H,A

 MOV 26H,A

 AJMP KS

DISP: MOV A,26H

 MOV B,#10

 DIV AB

 MOV 20H,B  ;余数(秒个位数)

 MOV 21H,A  ;商(秒十位数)

 MOV A,27H

 MOV B,#10

 DIV AB

 MOV 22H,B  ;余数(分个位数)

 MOV 23H,A  ;商(分十位数)

 MOV A,28H

 MOV B,#10

 DIV AB

 MOV 24H,B  ;余数(时个位数)

 MOV 25H,A  ;商(时十位数)

 MOV A,20H  ;秒个位

 ACALL SEG7

 MOV P0,A

 SETB P2.0

 ACALL DLY

 CLR P2.0

 MOV A,21H  ;秒十位

 ACALL SEG7

 MOV P0,A

 SETB P2.1

 ACALL DLY

 CLR P2.1

 MOV A,#0BFH  ; -

 MOV P0,A

 SETB P2.2

 ACALL DLY

 CLR P2.2

 MOV A,22H  ;分个位

 ACALL SEG7

 MOV P0,A

 SETB P2.3

 ACALL DLY

 CLR P2.3

 MOV A,23H  ;分十位

 ACALL SEG7 

 MOV P0,A

 SETB P2.4

 ACALL DLY

 CLR P2.4

 MOV A,#0BFH  ; -

 MOV P0,A

 SETB P2.5

 ACALL DLY

 CLR P2.5

 MOV A,24H  ;时个位

 ACALL SEG7

 MOV P0,A

 SETB P2.6

 ACALL DLY

 CLR P2.6

 MOV A,25H  ;时十位

 ACALL SEG7

 MOV P0,A

 SETB P2.7

 ACALL DLY

 CLR P2.7

 RET 

T0INT0: MOV TH0,#03CH;#9EH ;定时中断子程序。重装定时常数

 MOV TL0,#0B9H;#58H

 DJNZ R4,T0INTR ;50msX20=1S,未满20次,跳出中断子程序

 MOV R4,#20

 

 INC 26H

 MOV A,26H

 CJNE A,#60,T0INTR

 MOV 26H,#0

 INC 27H

 MOV A,27H

 CJNE A,#60,T0INTR

 MOV 27H,#0

 INC 28H

 MOV A,28H

 CJNE A,#24,T0INTR

 MOV 28H,#0

 AJMP T0INTR

 

T0INTR: RETI

DLY10:  MOV R3,#30

D0: ACALL DLY

 DJNZ R3,D0

 RET

DLY: MOV R7,#2

D1: MOV R6,#40

 DJNZ R6,$

 DJNZ R7,D1

 RET

SEG7: INC A

 MOVC A,@A+PC

 RET

 DB       0C0H  ;0 共阳

        DB       0F9H  ;1

        DB       0A4H  ;2

        DB       0B0H  ;3

        DB       099H  ;4

        DB       092H  ;5

        DB       082H  ;6

        DB       0F8H  ;7

        DB       080H  ;8

        DB       090H  ;9

     

        END