求一电子时钟单片机程序

如题所述

第1个回答  2020-03-14
HOUR
EQU
40H
;存放时信息的单元

MINUTE
EQU
41H
;存放分信息的单元

SECOND
EQU
42H
;存放秒信息的单元

NUM
EQU
43H
;存放T0溢出次数的单元

ORG
0000H
;程序入口

AJMP
MAIN

ORG
0030H
;主程序入口
MAIN:MOV
SP,#60H
;指定堆栈栈底

MOV
HOUR,#00H

MOV
MINUTE,#00H

MOV
SECOND,#00H
;将时、分、秒分别清零

MOV
NUM,#0

MOV
TMOD,#01H
;设T0工作于方式1,用于定时

MOV
TH0,#4CH
;设置T0的初始值

MOV
TL0,#00H

MOV
IE,#00H
;关中断

SETB
TR0
;开启定时器T0
LOOP:NOP

NOP

ACALL
DISPLAY
;调用显示子程序

NOP

NOP
LOOP1:JB
TF0,TIME
;等待定时溢出

LJMP
LOOP1
TIME:CLR
TR0
;关闭定时器

PUSH
DPL
;保护现场

PUSH
DPH

PUSH
ACC

MOV
TH0,#4CH
;重新设置T0的值

MOV
TL0,#00H

SETB
TR0
;开启T0

MOV
A,NUM

INC
A
;溢出次数+1

MOV
NUM,A

CJNE
A,#0AH,TT1
;检测键盘

MOV
P1,#0FH
;设键盘初值

MOV
R0,#04H
;延时消抖

LCALL
DELAY

JNB
P1.0,T0C1
;为0表示P1.0按下,转T0C1调整秒

JNB
P1.1,T0C2
;为0表示P1.1按下,转T0C2调整分

JNB
P1.2,T0C3
;为0表示P1.2按下,转T0C3调整时
TT1:
CJNE
A,#140,RR4

MOV
NUM,#00H
T0C1:MOV
A,SECOND

INC
A
;秒单元内容加1

DA
A
;调整为BCD码

MOV
SECOND,A

CJNE
A,#60H,RR4
;不为60秒继续等待
setb
flag:

clr
flag
RR1:
MOV
SECOND,#00H
;为60秒将秒单元清零
T0C2:MOV
A,MINUTE

INC
A
;分单元内容加1

DA
A
;调整为BCD码

MOV
MINUTE,A

CJNE
A,#60H,RR4
;不为60分继续等待
RR2:
MOV
MINUTE,#00H
;为60分,分单元清零
T0C3:MOV
P1,#0F0H
;
1小时闪一次

LCALL
DELAY
;延时

MOV
P1,#0FH

MOV
A,HOUR

INC
A
;时单元内容加1

DA
A
;调整为BCD码

MOV
HOUR,A

CJNE
A,#24H,RR4
;不为24小时继续等待
RR3:
MOV
HOUR,#00H
;为24小时,时单元清零
RR4:
POP
ACC
;恢复现场

POP
DPH

POP
DPL

LJMP
LOOP
DELAY:MOV
R1,#10H
;延时子程序
DELAY1:MOV
R2,#20H

DJNZ
R2,$

DJNZ
R1,DELAY1

DJNZ
R0,DELAY

RET
DISPLAY:MOV
DPTR,#TAB
;送表头基地址

MOV
A,HOUR

ANL
A,#0FH
;屏蔽时高位

MOVC
A,@A+DPTR
;查时高位

MOV
P0,A

CLR
P2.6
;开显示

MOV
R0,#1
;延时消除鬼影

LCALL
DELAY

SETB
P2.6
;关显示

MOV
A,HOUR

ANL
A,#0F0H

SWAP
A

MOVC
A,@A+DPTR

MOV
P0,A

CLR
P2.7

MOV
R0,#1

LCALL
DELAY

SETB
P2.7

MOV
A,MINUTE

ANL
A,#0FH

MOVC
A,@A+DPTR

MOV
P0,A

CLR
P2.4

MOV
R0,#1

LCALL
DELAY

SETB
P2.4

MOV
A,MINUTE

ANL
A,#0F0H

SWAP
A

MOVC
A,@A+DPTR

MOV
P0,A

CLR
P2.5

MOV
R0,#1

LCALL
DELAY

SETB
P2.5

MOV
A,SECOND

ANL
A,#0FH

MOVC
A,@A+DPTR

MOV
P0,A

CLR
P2.2

MOV
R0,#1

LCALL
DELAY

SETB
P2.2

MOV
A,SECOND

ANL
A,#0F0H

SWAP
A

MOVC
A,@A+DPTR

MOV
P0,A

CLR
P2.3

MOV
R0,#1

LCALL
DELAY

SETB
P2.3

RET
TAB:
DB
0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H

END
相似回答