一、完结电子钟计时的根本办法:
(1) 计数初值核算:
把守时器设为作业方法1,守时时刻为50ms,则计数溢出20次即得时钟计时最小单位秒,而100次计数可用软件办法完结。
假定运用T/C0,方法1,50ms守时,fosc=12MHz。
则初值X满意(216-X)×1/12MHz×12μs =50000μs
X=15536→0011110010110000→3CB0H
(2) 选用中止方法进行溢出次数累计,计满20次为秒计时(1秒);
(3) 从秒到分和从分届时的计时是经过累加和数值比较完结。
二、软件体系规划
程序清单:
ORG 0000H
AJMP MAIN
ORG 000BH
LJMP INTT0
ORG 0030H
MAIN: MOV SP, #60H ;建立仓库区
MOV PSW, #00H ;
MOV R0, #20H ;RAM区首地址
MOV R7, #5FH ;RAM区单元个数
QL: MOV @R0, #00H ;RAM清零
INC R0
DJNZ R7, QL
MOV IP, #02H ;IP初始化,优先守时器0
MOV IE, #82H ;IE初始化,
MOV TMOD, #01H ;守时器0方法1作业
LCALL PP ;调P.子程序
NEXT: LCALL KEY ;按键检测子程序
JB ACC.0, RUNF ;A键按下运转
LCALL DISP ;调用显现子程序
SJMP NEXT
RUNF: LCALL OUTT ;调传送子程序
LCALL TIME ;开电子钟
JK: LCALL DISP ;调用显现子程序
LCALL KEY ;按键检测子程序
JZ JK
LCALL ANKEY
LCALL DISP ;调用显现子程序
SJMP JK
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;; P点显现 ;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
PP: MOV 37H, #12 ;P点编码送寄存器
MOV R0, #30H ;P点编码送寄存器
MOV R7, #07H
PPP: MOV @R0, #10
INC R0
DJNZ R7, PPP
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;; 键扫子程序 ;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
KEY: LCALL KEYS ;调键值处理子程序
JZ EXIT ;没有键按下转到回来
LCALL DISP
LCALL DISP ;调显现去颤动
LCALL KEYS
JZ EXIT
MOV B, 20H ;保存键值
KEYSF: LCALL KEYS ;调键值处理子程序
JZ KEYY ;键开释,转到康复键值
LCALL DISP ;调显现子程序延时
AJMP KEYSF ;比及键开释
KEYY: MOV A, B ;键值送20H单元保存
EXIT: RET ;回来
KEYS: MOV P1, #0FFH ;先向P1口写1
MOV A, P1 ;P1口值送累加器A
CPL A ;A值取反
ANL A, #0FH ;保存P1口的低4位
MOV 20H, A ;A值送20H保存
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;; 键功用子程序 ;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ANKEY: CLR EA ;关中止
CHECK: JB TR0, YXZ ;判别是否运转
K0: CJNE A, #01H, K1
AJMP RUN ;转运转
K1: CJNE A, #02H, K2
AJMP KEY1 ;转时调整
K2: CJNE A, #04H, K3
AJMP KEY2 ;转分调整
K3: CJNE A, #08H, OUT
AJMP KEY3 ;转秒调整
YXZ: JB ACC.0, STOP
AJMP OUT
KEY1: MOV R0, #45H ;时调整
LCALL ADD1
CLR C
CJNE A, #24H, OUTT
ACALL CLR0
AJMP OUTT
KEY2: MOV R0, #43H ;分调整
LCALL ADD1
CLR C
CJNE A, #60H, OUTT
ACALL CLR0
AJMP OUTT
KEY3: MOV R0, #41H ;秒调整
ACALL ADD1
CLR C
CJNE A, #60H, OUTT
ACALL CLR0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;; 传送显现数据 ;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
OUTT: MOV 30H, 40H ;秒显现单元41H-42H
MOV 31H, 41H
MOV 32H, #11 ; “-“
MOV 33H, 42H ;分显现单元43H-44H
MOV 34H, 43H
MOV 35H, #11 ; “-“
MOV 36H, 44H ;时显现单元44-45H
MOV 37H, 45H
RET
STOP: CLR TR0 ;关电子钟并跳出
RET
RUN: LCALL TIME ;运转电子钟
OUT: SETB EA ;无键按下或完结功用跳出
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;; 运转电子钟 ;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TIME: SETB EA
MOV TL0, #0B0H
MOV TH0, #3CH ;3CB0H
MOV R4, #20 ;50ms,20次循环
SETB TR0 ;发动守时器0
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;; 守时中止 ;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INTT0: PUSH ACC
PUSH PSW
CLR ET0
CLR TR0
MOV TL0, #0B0H ;从头设定守时初值
MOV TH0, #3CH
SETB TR0 ;发动守时器0
DJNZ R4, OUTT0 ;1秒到
ADDSS: MOV R4, #14H ;20次计数
MOV R0, #41H ;秒十位
ACALL ADD1 ;加1程序
CLR C
CJNE A, #60H, ADDMM ;1分到
ADDMM: JC OUTT0
ACALL CLR0
MOV R0, #43H
ACALL ADD1 ;加1程序
CLR C
CJNE A, #60H, ADDHH ;1小时到
ADDHH: JC OUTT0
ACALL CLR0
MOV R0, #45H
ACALL ADD1 ;加1程序
CLR C
CJNE A, #24H, HOUR ;1天到
HOUR: JC OUTT0
ACALL CLR0
OUTT0: MOV 30H, 40H ;秒显现单元41H-42H
MOV 31H, 41H
MOV 32H, #11 ; “-“
MOV 33H, 42H ;分显现单元43H-44H
MOV 34H, 43H
MOV 35H, #11 ; “-“
MOV 36H, 44H ;时显现单元44-45H
MOV 37H, 45H
POP PSW
POP ACC
SETB ET0
RETI
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;; 时刻清零子程序 ;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CLR0: CLR A
MOV @R0, A
DEC R0
MOV @R0, A
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;; 加一子程序 ;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ADD1: MOV A, @R0 ;取十位
DEC R0
SWAP A
ORL A, @R0 ;组合十位与个位
ADD A, #01H ;加1
DA A ;十进制调整
MOV R3, A ;暂存
ANL A, #0FH ;屏蔽十位
MOV @R0, A ;放入个位单元
MOV A, R3 ;取值
INC R0
SWAP A
ANL A, #0FH ;屏蔽个位
MOV @R0, A ;放入十位单元
MOV A, R3 ;数值放入A中等候判别
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;显现子程序 30H ;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DISP: MOV R1, #30H ;显现缓冲存储单元首地址
MOV R2, #80H ;从右至左显现
DISP1: MOV P2, R2 ;送位控
MOV A, @R1
MOV DPTR, #TAB
MOVC A, @A+DPTR
MOV P0, A ;送段控
ACALL DL ;延时
MOV A, R2
JB ACC.0, DISP2
RR A
INC R1
MOV R2, A
AJMP DISP1
DISP2: RET
TAB: DB 0C0H, 0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,0BFH,0CH
DL: MOV R6, #14H ;显现延时子程序
DL1: MOV R7, #19H ;
DL2: DJNZ R7, DL2
DJNZ R6, DL1
RET
END
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/xinnengyuan/261326.html