51单片机作的电子钟程序在很多地方已经有了介绍, 对于单片机学习者而言这个程序基本上是一道门槛,掌握了电子钟程序, 基本上可以说51单片机就掌握了80%。常见的电子钟程序由显示部分, 计算部分, 时钟调整部分构成。
+ A+ A: s9 Q* B; [4 C2 e: | 时钟的基本显示原理:时钟开始显示为0时0分0秒,也就是数码管显示000000,然后每秒秒位加1 ,到9后,10秒位加1,秒位回0。10秒位到5后,即59秒 ,分钟加1,10秒位回0。依次类推,时钟最大的显示值为23小时59分59秒。这里只要确定了1秒的定时时间, 其他位均以此为基准往上累加。 7 t0 y9 @) E" m# Z2 T9 A# [
开始程序定义了秒, 十秒, 分, 十分,小时, 十小时,共6位的寄存器, 分别存在30h,31h,32h,33h,34h,35h单元,便于程序以后调用和理解。
+ ^ E8 Q0 _" {4 H a' L 6个数码管分别显示时、分、秒,一个功能键,可以切换调整时分秒、增加数值、熄灭节电等功能全部集一键。 ! ]( I( o- {: N
! s2 u7 {( N% j! g5 y+ G# y/ ^
' o) ?/ o8 S1 ]
) D! p5 T% ~; O$ w1 k 以下是部分汇编源程序,购买我们产品后我们用光盘将完整的单片机汇编源程序和烧写文件送给客户。
/ T. X( G4 I/ N7 N" t( I7 E' h;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
, B; _, ]+ w) H! \1 B6 ];; 中断入口程序 ;; (仅供参考)' S" I! u6 `% q8 g4 K2 u- ~
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
8 @; {; v9 O1 J4 Q5 P9 V;) Y% R/ j$ o- W, t$ P0 T% [
ORG 0000H ;程序执行开始地址0 j) E A9 F7 S B$ a/ a
LJMP START ;跳到标号START执行
1 l( C6 f& D6 m1 V+ @$ X3 HORG 0003H ;外中断0中断程序入口
y' d' y7 O# N% O6 X0 P9 ARETI ;外中断0中断返回, y) T. l. d6 }0 ?4 @+ n6 C6 a
ORG 000BH ;定时器T0中断程序入口
7 {7 @& D2 w, o& u" _LJMP INTT0 ;跳至INTTO执行
1 H7 Q0 D2 Q( A9 Y1 ?+ ~' oORG 0013H ;外中断1中断程序入口
9 H/ p/ S/ D$ n% i3 A& E- `; YRETI ;外中断1中断返回
, v8 O3 \/ N8 t9 z3 OORG 001BH ;定时器T1中断程序入口' ]6 i9 }" I. X: D6 z0 X
LJMP INTT1 ;跳至INTT1执行
! a& q- o/ a/ oORG 0023H ;串行中断程序入口地址
4 d% B4 u# X5 M& W& x# i* {7 d o# T! ]RETI ;串行中断程序返回
% v: f Z. S; B6 z0 _;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;) T; H, Q! |5 R C$ n
;; 主 程 序 ;;
, h. C* R+ X$ e+ l% q8 A;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
' L, k1 _9 v6 ?) A;0 z( I& D- O" N
START: MOV R0,#70H ;清70H-7AH共11个内存单元
4 v- _' S9 u7 ~) M2 M7 bMOV R7,#0BH
5 U; P; k1 b& r+ z! O! X6 s;clr P3.7 ; x2 m3 f+ r8 _3 b( w6 V4 }7 C
CLEARDISP: MOV @R0,#00H ;
2 t5 s7 `, C$ W/ A2 |: R9 j4 W. SINC R0 ;9 G, T; a8 [& Y/ D* M0 { e( q! ^) M
DJNZ R7,CLEARDISP ;
- u' @& h; J9 ~/ sMOV 20H,#00H ;清20H(标志用)
& J9 s: Q$ |" C4 Z* j, TMOV 7AH,#0AH ;放入"熄灭符"数据
- V* D+ y+ G9 ?3 D+ @MOV TMOD,#11H ;设T0、T1为16位定时器7 D; R- A h# H1 W4 Z/ C
MOV TL0,#0B0H ;50MS定时初值(T0计时用), I* n, c# b/ Y+ c+ z
MOV TH0,#3CH ;50MS定时初值! ]$ u# I! O/ g1 v8 _; b
MOV TL1,#0B0H ;50MS定时初值(T1闪烁定时用)
# |7 Z" q6 _3 M7 D& j: }2 r; LMOV TH1,#3CH ;50MS定时初值# R2 {1 Y/ z# [5 |6 t! i; C
SETB EA ;总中断开放
: `" b7 ?# A) j1 p# `( {SETB ET0 ;答应T0中断! e4 C6 E7 V' g' K) |% A
SETB TR0 ;开启T0定时器; a% I# [0 I S8 R
MOV R4,#14H ;1秒定时用初值(50MS×20)1 U& {$ \) ^) G: z& f$ s. I
START1: LCALL DISPLAY ;调用显示子程序
* B* N2 `8 I! Z5 dJNB P3.7,SETMM1 ;P3.7口为0时转时间调整程序 ) G) ^4 W# K& f8 H0 _* A
SJMP START1 ;P3.7口为1时跳回START1 {, V) ^4 `2 ^7 Y. w3 ^
SETMM1: LJMP SETMM ;转到时间调整程序SETMM6 G0 O# e# j c$ O+ @) b1 [) G5 [, F
;0 d7 U( o$ s, b2 G9 H
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5 y7 f- E+ \- y3 L2 o
;; 1秒计时程序 ;;# A( y5 N: C9 Y$ ?8 Q% a" j& l
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5 B. x5 p4 [! Y+ q. u+ T- q6 j; D6 g
;T0中断服务程序
; O# J: b5 @" S# z' z& \INTT0: PUSH ACC ;累加器入栈保护$ F% h9 F3 i2 ?1 j; l2 P
PUSH PSW ;状态字入栈保护
# F* ~1 u- C+ U/ m6 m; z5 c/ LCLR ET0 ;关T0中断答应
j6 \: Y/ p! w; FCLR TR0 ;封闭定时器T0
* ]9 c. J* `2 c' KMOV A,#0B7H ;中断响应时间同步修正
% P9 Z2 `+ ?0 i2 ]) B6 O; \1 pADD A,TL0 ;低8位初值修正
# P s! x* c+ PMOV TL0,A ;重装初值(低8位修正值)
$ T/ G3 S3 o& e6 Y* @2 ^# RMOV A,#3CH ;高8位初值修正 w7 _5 J/ e3 O8 E* i$ _0 G. q& W
ADDC A,TH0 ;0 a0 g6 E2 S# l9 T
MOV TH0,A ;重装初值(高8位修正值)9 o$ i' d7 p0 [' u6 h
SETB TR0 ;开启定时器T0
9 m. ~6 X- s- DDJNZ R4, OUTT0 ;20次中断未到中断退出
+ ]' n3 a4 N3 Y' w+ v# dADDSS: MOV R4,#14H ;20次中断到(1秒)重赋初值
5 [* y0 o4 v) \+ p; j! y5 t' mMOV R0,#71H ;指向秒计时单元(71H-72H)
8 x, j& H! f1 K/ P2 G0 UACALL ADD1 ;调用加1程序(加1秒操作)
% A+ i& W8 u1 h. b3 D e4 Z+ HMOV A,R3 ;秒数据放入A(R3为2位十进制数组合)
& n7 u L& ]7 I T2 ?CLR C ;清进位标志
/ Z" y: Y8 C! L! eCJNE A,#60H,ADDMM ;
2 F- h0 M1 y x/ ?/ [ADDMM: JC OUTT0 ;小于60秒时中断退出
/ i$ Q4 T' g. o; v, _* UACALL CLR0 ;大于或即是60秒时对秒计时单元清0; p1 x/ T9 h# c/ O
MOV R0,#77H ;指向分计时单元(76H-77H)3 x; J' g/ b. X0 F! t
ACALL ADD1 ;分计时单元加1分钟
, Q; b# J7 A p4 w! K" U+ \% dMOV A,R3 ;分数据放入A( O+ J3 v9 M! S3 Z# \
CLR C ;清进位标志
3 v" ?( N) H9 [, \2 g0 t' U4 a1 KCJNE A,#60H,ADDHH ;
7 b* H) ?3 B8 yADDHH: JC OUTT0 ;小于60分时中断退出
' {2 |* X0 P B0 M) yACALL CLR0 ;大于或即是60分时分计时单元清0
/ z! g8 ^) i7 p2 S3 g! L9 JMOV R0,#79H ;指向小时计时单(78H-79H)# l) I8 j' M; k
ACALL ADD1 ;小时计时单元加1小时" c$ z7 V9 O' Z& B) Z
MOV A,R3 ;时数据放入A% s8 r1 Z0 T7 ~ g
CLR C ;清进位标志4 i* B+ A: n1 [% J
CJNE A,#24H,HOUR ;
% z {# ^1 z# d1 ^0 ?2 n0 FHOUR: JC OUTT0 ;小于24小时中断退出5 \4 M, a1 c3 Q
ACALL CLR0 ;大于或即是24小时小时计时单元清0
5 n% @9 \- Q3 KOUTT0: MOV 72H,76H ;中断退出时将分、时计时单元数据移
" h4 S& j% \7 e" XMOV 73H,77H ;入对应显示单元4 w) h) m& \+ b) ~* m2 C
MOV 74H,78H ;
3 A' c* ?- k7 e& d* }. [MOV 75H,79H ;
" n* b1 R8 ]2 o8 v; yPOP PSW ;恢复状态字(出栈)% i& ]. I) p9 Z( C% ~
POP ACC ;恢复累加器5 E" ^7 U. N$ g7 d4 Z) a3 d
SETB ET0 ;开放T0中断
P9 ?% ?( B" i; e$ tRETI ;中断返回4 |8 p( K5 z1 b% ~* w0 f
;( s7 F! o" C2 X$ K, W
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6 \; m0 U: X7 y. K6 i7 D2 G' ~, I
;; 闪动调时 程 序 ;;
0 f/ `3 V- B" r+ `# h0 O# y8 U;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1 P. r) l" @ h& T1 H
;T1中断服务程序,用作时间调整时调整单元闪烁指示& p" I9 L0 }/ ^5 {, A
INTT1: PUSH ACC ;中断现场保护
* X7 E- a' ?1 ?" E) V+ IPUSH PSW ;; b* |) j- m9 {" B5 s
MOV TL1, #0B0H ;装定时器T1定时初值 y5 l K% m" t7 K2 |
MOV TH1, #3CH ;# X2 {# A& b/ b q) s0 l: }
DJNZ R2,INTT1OUT ;0.3秒未到退出中断(50MS中断6次)
/ a4 B& L. J5 R3 P* b, \& ?0 c) lMOV R2,#06H ;重装0.3秒定时用初值
/ {' U7 m2 }# BCPL 02H ;0.3秒定时到对闪烁标志取反
: X# w/ b( z0 i+ d; l2 I xJB 02H,FLASH1 ;02H位为1时显示单元"熄灭"
8 G x0 f6 ~& T! r# a) K/ |! g4 A3 nMOV 72H,76H ;02H位为0时正常显示9 T" \' A) \) c; a% R8 E# w* |2 _' r
MOV 73H,77H ;* E0 l1 r: Y0 u7 \6 Z
MOV 74H,78H ;
( h2 P" t) f: ?% \5 i3 iMOV 75H,79H ;8 o8 U1 _; N$ S0 a
INTT1OUT: POP PSW ;恢复现场
' X( E* l. g' m8 j/ PPOP ACC ;( Q) M! I2 ~/ l/ X; N0 i4 C
RETI ;中断退出
. R t$ O3 \+ p8 VFLASH1: JB 01H,FLASH2 ;01H位为1时,转小时熄灭控制
1 e; j5 u D- b( i2 h& GMOV 72H,7AH ;01H位为0时,"熄灭符"数据放入分1 a; i/ v/ u8 _+ Y) J
MOV 73H,7AH ;显示单元(72H-73H),将不显示分数据
' o( `- n6 z% t x3 R8 b3 sMOV 74H,78H ;3 D; b6 Q3 m8 I5 K( v+ t- _
MOV 75H,79H ;
% B! b+ A* [" a+ ]& k5 JAJMP INTT1OUT ;转中断退出; H3 Z9 h$ @2 H0 n" N3 q; f8 o
FLASH2: MOV 72H,76H ;01H位为1时,"熄灭符"数据放入小时
7 V% e$ x/ U5 Z/ e/ K: F) ~1 vMOV 73H,77H ;显示单元(74H-75H),小时数据将不显示 a. e5 @8 s X! `1 Y
MOV 74H,7AH ;. ]% V R9 O& Y8 b6 l+ L
MOV 75H,7AH ;. F+ K1 g: ` Q
AJMP INTT1OUT ;转中断退出& B" e |/ K6 [. J. K( B; l
;! `$ Y: O0 q! o- u2 U
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1 Z$ _7 t& e- Q- h: D2 m! d
;; 加1子 程 序 ;;
" P5 m) c; h) y' n;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
) ?# k$ S) d) M. w8 U1 H5 I6 J;9 O; ~$ o* j1 T! n3 Q# w8 v
ADD1: MOV A,@R0 ;取当前计时单元数据到A5 R$ _. R+ o0 A8 u$ \9 Z
DEC R0 ;指向前一地址
4 {/ ^9 v/ T, T* `0 q% w( w2 rSWAP A ;A中数据高四位与低四位交换
/ L" s. g7 B. L' J g* m" XORL A,@R0 ;前一地址中数据放入A中低四位4 G. K- | f' y* @* \* H( M* V% h t
ADD A,#01H ;A加1操作
: s& P5 J% B5 ?DA A ;十进制调整4 |! C& h6 H! C3 T" y3 \6 v( A
MOV R3,A ;移入R3寄存器
, U; J# Z: l% f( P8 `ANL A,#0FH ;高四位变0+ Q# i1 L2 }- j( ~
MOV @R0,A ;放回前一地址单元
0 L/ \4 I0 V7 _. Y$ i. P& GMOV A,R3 ;取回R3中暂存数据& A9 d ^8 K- @$ t
INC R0 ;指向当前地址单元/ @' S. y& A( Z6 L8 j
SWAP A ;A中数据高四位与低四位交换4 b! P& D$ a$ _; D: j
ANL A,#0FH ;高四位变0
5 C( `/ h, H7 x% f! W1 P' bMOV @R0,A ;数据放入当削地址单元中0 E/ x/ o2 R8 Q4 C# `( B
RET ;子程序返回
' Z6 O5 L1 v# K2 ^ o2 D;2 m! x7 L) c3 o; m G3 \: i; F4 }
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- D( T# u! H+ e" U" ?6 y5 D;; 清零程序 ;;% B6 V9 x& M( H* W# f$ z: y
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
/ Y6 H% Z/ ?$ j+ P0 a;.............! W6 U3 _; m$ @/ f" |1 {; ?
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
/ P7 ]6 E- I) A! Y- w# n;; 时钟调整程序 ;;8 v7 }# j" s$ o" F' g7 t. T+ U2 i
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;( c% x! I3 M: ?" P6 [
;当调时按键按下时进入此程序
6 Y; |5 ]. a7 R! RSETMM: cLR ET0 ;关定时器T0中断$ Z' O8 P0 G5 J1 O0 Z4 V% w
CLR TR0 ;封闭定时器T0
1 _6 L9 |1 U9 B: N7 o! t; c0 BLCALL DL1S ;调用1秒延时程序
1 K$ O. ]- P# ], _; VJB P3.7,CLOSEDIS ;键按下时间小于1秒,封闭显示(省电)
0 d4 r7 ?! P+ y2 [MOV R2,#06H ;进入调时状态,赋闪烁定时初值; D* S5 O, F+ d3 { @6 G* n6 H
SETB ET1 ;答应T1中断# w" `& n3 x1 F8 }& v9 W* s
SETB TR1 ;开启定时器T1
' t# s& z9 [4 \6 a; C( PSET2: JNB P3.7,SET1 ;P3.7口为0(键未开释),等待2 \& q0 Y; T7 N) l1 m/ E" S
SETB 00H ;键开释,分调整闪烁标志置1 z! k/ V. k! Y6 W
SET4: JB P3.7,SET3 ;等待键按下
. n$ w2 Q. H' ~& KLCALL DL05S ;有键按下,延时0.5秒
2 |* v9 l( @9 u, O' x/ tJNB P3.7,SETHH ;按下时间大于0.5秒转调小时状态1 \6 T+ i! w, b2 z" d& \
MOV R0,#77H ;按下时间小于0.5秒加1分钟操作
2 y O1 p) w/ \8 C/ K7 kLCALL ADD1 ;调用加1子程序
4 t6 R) `5 P V' J) R$ m' ]& xMOV A,R3 ;取调整单元数据5 N% q2 V, k7 ~5 D8 D8 W
CLR C ;清进位标志4 a( T+ L1 M: @1 y8 K
CJNE A,#60H,HHH ;调整单元数据与60比较# q7 N, q6 J' n5 {" |! F; q" a
HHH: JC SET4 ;调整单元数据小于60转SET4循环
5 {; `' [" @; |; @LCALL CLR0 ;调整单元数据大于或即是60时清0
0 c% j$ o7 e1 }0 }* E2 D: s2 T4 _CLR C ;清进位标志; N5 e+ s2 @& B8 s q) `
AJMP SET4 ;跳转到SET4循环
- X1 T' K) [& b: F Q6 f9 L1 w3 pCLOSEDIS: SETB ET0 ;省电(LED不显示)状态。开T0中断( ]. |: G9 \2 R$ J
SETB TR0 ;开启T0定时器(开时钟)$ A8 R6 D4 {/ Y9 Y$ I+ a
CLOSE: JB P3.7,CLOSE ;无按键按下,等待。+ F! H+ y4 r5 Y8 `2 t9 o
LCALL DISPLAY ;有键按下,调显示子程序延时削抖
; ^" Z; W* T0 S4 H/ m9 Q" r5 `' UJB P3.7,CLOSE ;是干扰返回CLOSE等待
9 t. I) q% K7 P; hWAITH: JNB P3.7,WAITH ;等待键开释
) d/ G/ }' R8 l' f" vLJMP START1 ;返回主程序(LED数据显示亮)2 u( k! l9 S' Y5 Y9 ]1 G# c
SETHH: CLR 00H ;分闪烁标志清除(进入调小时状态)
% M8 B5 O; D9 t9 HSETHH1: JNB P3.7,SET5 ;等待键开释9 z. l8 S2 b/ h2 T' O8 u
SETB 01H ;小时调整标志置1
5 p, s. F1 L; R+ u6 GSET6: JB P3.7,SET7 ;等待按键按下7 A6 E% R9 I. M' D+ {# Y# A: o3 c
LCALL DL05S ;有键按下延时0.5秒" N6 t* _% h" O5 O; J8 w# ], ]
JNB P3.7,SETOUT ;按下时间大于0.5秒退出时间调整% L; C: x9 d" d1 y+ t# t' a
MOV R0,#79H ;按下时间小于0.5秒加1小时操作0 P* }6 [" l/ H
LCALL ADD1 ;调加1子程序
9 v1 C/ t7 [- R/ [# |3 z- WMOV A,R3 ;
' N4 k7 U2 C I5 y4 D! S/ nCLR C ;
5 a- B! \ [5 j# [( a8 {4 L/ j$ Y' cCJNE A,#24H,HOUU ;计时单元数据与24比较
) x. ?6 X/ E" s) ?0 OHOUU: JC SET6 ;小于24转SET6循环; `; O/ o* V5 B. |
LCALL CLR0 ;大于或即是24时清0操作, n! j$ y. \6 H; P8 C
AJMP SET6 ;跳转到SET6循环' d1 i# b+ [3 k
SETOUT: JNB P3.7,SETOUT1 ;调时退出程序。等待键开释; I2 W' D+ Z! _/ i1 R5 ?
LCALL DISPLAY ;延时削抖# w. J" u5 E5 Q9 m
JNB P3.7,SETOUT ;是抖动,返回SETOUT再等待4 y6 d) d- @, f- L9 Z3 f0 L# y; C
CLR 01H ;清调小时标志8 Q6 n1 v( `" r* {- R3 ?) P% O$ r
CLR 00H ;清调分标志
0 f- l6 h" E- QCLR 02H ;清闪烁标志
+ ?1 E3 e9 c, k1 QCLR TR1 ;封闭定时器T1# T6 J4 ~( E' t
CLR ET1 ;关定时器T1中断# _% E! ~) t8 b3 a
SETB TR0 ;开启定时器T0
) `9 a8 g. z4 Q- N7 M& GSETB ET0 ;开定时器T0中断(计时开始)# d. C( A: |1 s$ R6 W; ?
LJMP START1 ;跳回主程序
' b2 g0 d7 _% g8 @$ [2 ?SET1: LCALL DISPLAY ;键开释等待时调用显示程序(调分)) ]; a% L, m m* M! D7 z B- I
AJMP SET2 ;防止键按下时无时钟显示
7 t8 J& |4 o8 sSET3: LCALL DISPLAY ;等待调分按键时时钟显示用% }$ n7 T+ L+ ~% }7 U9 _( e0 O8 U
AJMP SET44 {/ @& R# Z* n# i$ n9 F
SET5: LCALL DISPLAY ;键开释等待时调用显示程序(调小时)
) H$ H+ S. p: {, h+ fAJMP SETHH1 ;防止键按下时无时钟显示
+ s3 a% a/ g; b6 w" _) S1 k: ` ?SET7: LCALL DISPLAY ;等待调小时按键时时钟显示用! u6 z8 k1 O2 c- x2 P b
AJMP SET62 U& q* A3 F9 b- q7 N, a
SETOUT1: LCALL DISPLAY ;退出时钟调整时键开释等待' i4 a2 f y/ p
AJMP SETOUT ;防止键按下时无时钟显示
5 [! R. d ?4 S9 b; z. j2 g6 `;9 s P b% c; r! o6 j9 ~
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3 h$ L ~2 N) \% g;; 显示程序 ;;
6 \+ {& m f4 R# o;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
( e( S1 A, M% M$ K; }. h4 N# a. i: L$$$$$$$$$$$$$$$$$$$$$$$$$$$. }% N8 `* h/ K9 v7 O: d
;1MS延时程序,LED显示程序用
3 \$ L) d3 L( _/ W- Y# m5 K3 ^DL1MS: MOV R6,#14H
- H }) B& D7 K8 aDL1: MOV R7,#19H4 Y" ?# g) t1 Y- U% H$ K
DL2: DJNZ R7,DL27 b' I, K, t4 r, o# a
DJNZ R6,DL1
( O& O" e9 _' `5 b: y0 r3 y: y7 N$ J; wRET; \: t# H" e: p
;20MS延时程序,采用调用显示子程序以改善LED的显示闪烁现象
T5 z& L2 {) CDS20MS: ACALL DISPLAY
8 [ o- ?! L; |6 {ACALL DISPLAY
2 Y& {( s7 w; ]4 J: aACALL DISPLAY
# W" f3 a& Y# z& l, S) tRET$ Z* ^! c7 j6 t g1 J! z5 o0 B- W! Q
;延时程序,用作按键时间的长短判定3 P6 U, A5 p. F! j2 W& O; J
DL1S: LCALL DL05S0 x1 v8 G; K& \% P: u, D
LCALL DL05S Q" H* t& _3 f+ h
RET+ L7 @! l4 Z8 Z( T5 O2 c
DL05S: MOV R3,#20H ;8毫秒*32=0.196秒4 r* l" u* A8 o( D, O# x
DL05S1: LCALL DISPLAY" |- F: a- I, q
DJNZ R3,DL05S1
8 Y8 r! y8 W% r) \1 ORET
* f7 `) I$ O; l; D2 qEND ;程序结束
$ a) R* L E8 P! K |