C51 digital clock program - ZT (take learning)

xiaoxiao2021-03-06  49

Main program (main), as follows:

ORG 0000H

Ajmp main

ORG 000BH

AJMP TIME

ORG 0300H

MAIN:

Mov 20h, # 00H

Mov 21h, # 00H

Mov 22h, # 00H

Mov 23h, # 00H

MOV IP, # 02h; IP, IE initialization

Mov IE, # 82h

MOV TMOD, # 01H; Set the timer mode?

MOV TL0, # 0B0H

Mov TH0, # 3ch

Setb TR0; start timing?

MOV SP, # 40H; Reset Stack Pointer

Next: LCALL DISP; call the display subroutine?

LCALL Key; call button detection subroutine

JZ NEXT;

LCALL Ankey; call button processing subroutine

SJMP next; recirculation

NOP

NOP

NOP

Timed interrupt handler:

Time: Push ACC; Protection Scene

Push PSW

MOV TL0, # 0B4H; Attribute initial value

Mov TH0, # 3ch

INC 20H;

Mov a, 20h

CJNE A, # 20, RETI1

MOV 20H, # 00H; one second time

Mov A, 21h

Add A, # 01h

DA A

MOV 21h, A

CJNE A, # 60h, Reti1

MOV 21h, # 00H; one minute

Mov A, 22h

Add A, # 01h

DA A

MOV 22H, A

CJNE A, # 60h, Reti1

Mov 22h, # 00H; one hour time

Mov A, 23h

Add A, # 01h

DA A

MOV 23h, A

CJNE A, # 24h, Reti1

MOV 23H, # 00H; to time reached 24 hours, clear.

Reti1: POP PSW; Restore Scene

POP ACC

Reti; interrupt return?

NOP

NOP

Show subroutine

DISP: ANL 2FH, # 10h; processing decimal point

Mov A, 21h; Treatment Second 21h -> 2DH, 2EH

ANL A, # 0fh

Orl A, 2FH

MOV 2FH, A

Mov A, 21h

ANL A, # 0f0h

SWAP A

Mov 2Eh, A

ANL 2DH, # 10h

Mov A, 22H; Treatment minutes 22H -> 2CH, 2DH

ANL A, # 0fh

Orl A, 2DH

MOV 2DH, A

Mov A, 22h

ANL A, # 0f0h

SWAP A

MOV 2ch, A

ANL 2BH, # 10h

MOV A, 23H; Treatment hours 23H -> 2ah, 2bh

ANL A, # 0fh

Orl a, 2bh

MOV 2BH, A

Mov A, 23h

ANL A, # 0f0h

SWAP A

Mov 2ah, A

MOV R0, # 2FH; display offset

Mov R3, # 06h

Mov dptr, # TABLE

Mov A, # 0bfh

LOOP1: MOV B, A;

MOV P2, A

Mov A, @ r0

MOVC A, @ a dptr

MOV P0, A; send display

MOV R2, # 80h; delay

DJNZ R2, $

Dec r0

Mov A, B

RR A

DJNZ R3, LOOP1; loop display

RET

Table: DB 28H, 7EH, 0A2H, 62H, 74H, 61H, 21h; without decimal points

DB 7AH, 20H, 60H, 00, 00, 00, 0000

DB 8H, 5EH, 82H, 42H, 54H, 41H, 1H, 5AH; with a decimal point

DB 00H, 40H, 00, 00, 00, 0000

NOP

NOP

Key judgment program

Key: MOV P3, # 0ffh;

Mov A, P3

CPL A

ANL A, # 3ch

JZ RETX; Return

LCALL DISP;

LCALL DISP

Mov A, P3

CPL A

ANL A, # 3ch

JZ RETX; keyboard to jitter.

MOV R6, A; deposit the key value to R6.

LOOP2: LCALL DISP;

Mov A, P3

CPL A

ANL A, # 3ch

JNZ loop2; Waiting button release

Mov A, R6

RETX: RET

NOP

NOP

Key to process subroutines

Ankey: CLR EA; Off Interrupt

LX: MOV A, R6

JB ACC.2, L1; is a function key to turn L1

JB ACC.3, L2; is confirmed to turn L2

JB ACC.4, L3; is reduced by 1 button to L3

JNB ACC.5, L12; not 1 button, turn L12

JB 2BH.4, L6; Judging which one (time, minute, second) value plus 1

JB 2DH.4, L8

JB 2FH.4, L9

L12: LCALL DISP

LCALL DISP

LCALL Key; Judging whether there is a keyry.

JZ L12

LJMP LX

L2: MOV 25h, # 00H; Confirm key handler

CLR 2BH.4

CLR 2DH.4

CLR 2FH.4

Setb EA

RET

L3: JB 2BH.4, L61; Add a key handler

JB 2DH.4, L81

JB 2FH.4, L91

AJMP L12

L1: MOV A, 25H; Function key handler

JZ LB1

JB ACC.0, LB2

JB ACC.1, LB3

JNB ACC.2, L12

LB1: MOV 25H, # 01H; 25H unit is a flag, (25h) = 01h adjustment time unit value

Setb 2bh.4

CLR 2DH.4

CLR 2FH.4

AJMP L12

LB3: MOV 25H, # 04H; 25H unit is a flag bit, (25h) = 01h adjustment second unit value

Setb 2fh.4

CLR 2DH.4

CLR 2BH.4

AJMP L12

LB2: MOV 25H, # 02H; 25H unit is a flag, (25h) = 01H adjustment unit value

Setb 2DH.4

CLR 2BH.4

CLR 2FH.4

AJMP L12

L61: AJMP L611;

L81: AJMP L811;

L91: AJMP L911

L6: MOV A, 23H;

Add A, # 01h

DA A

MOV 23h, A

CJNE A, # 24h, l15

L15: JC L112

Mov 23h, # 00H

L112: AJMP L12

L8: MOV A, 22H;

Add A, # 01h

DA A

MOV 22H, A

CJNE A, # 60h, L16

L16: JC L112

Mov 22h, # 00H

AJMP L12

L9: MOV A, 21h; second plus one

Add A, # 01h

DA A

MOV 21h, A

CJNE A, # 60h, L17

L17: JC L112

Mov 21h, # 00H

AJMP L12

L611: MOV A, 23h;

Add A, # 99h

DA A

MOV 23h, A

CJNE A, # 99h, l112

Mov 23h, # 23h

AJMP L12

L811: MOV A, 22H; Divided

Add A, # 99h

DA A

MOV 22H, A

CJNE A, # 99h, l112

Mov 22h, # 59h

AJMP L12

L911: MOV A, 21H; second reduction

Add A, # 99h

DA A

MOV 21h, A

CJNE A, # 99h, l112

Mov 21h, # 59h

AJMP L12

NOP

NOP

End

转载请注明原文地址:https://www.9cbs.com/read-40656.html

New Post(0)