51单片机作的电子钟程序在很多地方已经有了介绍, 对于单片机学习者而言这个程序基本上是一道门槛,掌握了电子钟程序, 基本上可以说51单片机就掌握了80%。常见的电子钟程序由显示部分, 计算部分, 时钟调整部分构成。
" c8 L8 v5 i. y. r" C- L/ y4 d 时钟的基本显示原理:时钟开始显示为0时0分0秒,也就是数码管显示000000,然后每秒秒位加1 ,到9后,10秒位加1,秒位回0。10秒位到5后,即59秒 ,分钟加1,10秒位回0。依次类推,时钟最大的显示值为23小时59分59秒。这里只要确定了1秒的定时时间, 其他位均以此为基准往上累加。
" ~# E9 h3 a2 Y1 L1 f1 K 开始程序定义了秒, 十秒, 分, 十分,小时, 十小时,共6位的寄存器, 分别存在30h,31h,32h,33h,34h,35h单元,便于程序以后调用和理解。
* I- j/ E$ o# J5 | 6个数码管分别显示时、分、秒,一个功能键,可以切换调整时分秒、增加数值、熄灭节电等功能全部集一键。 % W% o2 t$ x& U' L
/ B; W: L7 D4 I, z1 P: | B: n- p
2 s- N& r# ] k: V3 T- g
$ \' O' J$ [; Y( V7 } 以下是部分汇编源程序,购买我们产品后我们用光盘将完整的单片机汇编源程序和烧写文件送给客户。7 U& J! ?9 F2 r* E9 ?# B6 l) v
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4 b8 B3 G! f9 p5 z2 e( b
;; 中断入口程序 ;; (仅供参考)) v. M' P3 v- i6 H/ D
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; p9 [2 d8 c& r1 L, T E; X
;% q* B& I* D7 w# p3 S5 g
ORG 0000H ;程序执行开始地址
) ?: j/ K4 s) ELJMP START ;跳到标号START执行
( Y( [2 N E9 X: J7 ^ORG 0003H ;外中断0中断程序入口; R8 |: r5 T, k1 P" {; S @" o- D
RETI ;外中断0中断返回" R0 Q$ k0 ] e
ORG 000BH ;定时器T0中断程序入口
: k2 y1 Z5 Y6 h$ f, ?' ^% @LJMP INTT0 ;跳至INTTO执行. {9 Z4 a# S% w' L' O
ORG 0013H ;外中断1中断程序入口
7 W W# l! d8 n5 o; `1 g hRETI ;外中断1中断返回
. W/ y8 I$ \# @! p+ ZORG 001BH ;定时器T1中断程序入口
" t( c/ `9 g* b/ SLJMP INTT1 ;跳至INTT1执行1 M4 y; J1 s: A4 U
ORG 0023H ;串行中断程序入口地址
% r0 N9 P7 v) t. c: Z& l( [RETI ;串行中断程序返回, Q0 O) S) n* Q1 e
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3 @% v3 D9 |1 M4 B; f! _;; 主 程 序 ;;+ u; o7 Z$ q0 ]0 x; g5 V3 h/ U
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;! P8 S8 E: [8 }6 V7 c& i8 u
;
1 e1 W) o9 e% W+ \# K3 VSTART: MOV R0,#70H ;清70H-7AH共11个内存单元' q- v+ C* n: G) y5 a9 _
MOV R7,#0BH & i' m$ @+ X% j/ C$ M
;clr P3.7 ;- |/ R% H9 l& K3 D& j3 G
CLEARDISP: MOV @R0,#00H ;9 |* K: {9 i2 V! l- U+ F, }
INC R0 ;
" w3 n- G7 }( EDJNZ R7,CLEARDISP ;
: M3 P" l0 Z% ~0 |( d) D0 ?: W. @MOV 20H,#00H ;清20H(标志用). p0 P8 v3 h+ y i9 K2 p' K
MOV 7AH,#0AH ;放入"熄灭符"数据
/ }% p% a' \- h# D dMOV TMOD,#11H ;设T0、T1为16位定时器
& C/ L- P) N% d, m3 VMOV TL0,#0B0H ;50MS定时初值(T0计时用), r" r6 {% H, R% j
MOV TH0,#3CH ;50MS定时初值
( S0 }; w/ S! d) n6 |5 hMOV TL1,#0B0H ;50MS定时初值(T1闪烁定时用)( O8 |5 q! }, s. \; f" p4 Z7 r
MOV TH1,#3CH ;50MS定时初值
9 z! l" a$ h- q6 E; tSETB EA ;总中断开放9 B9 d! G0 j- A* R; n [, T
SETB ET0 ;答应T0中断. R( ^; F7 z: ] W2 j7 D
SETB TR0 ;开启T0定时器! W: I7 i' R$ P" p
MOV R4,#14H ;1秒定时用初值(50MS×20)
* f, D$ P& Q) ~; }5 B* Z# b) W, f: YSTART1: LCALL DISPLAY ;调用显示子程序
: i8 L9 k1 ?& n0 Z& jJNB P3.7,SETMM1 ;P3.7口为0时转时间调整程序 " v# L+ ?0 f7 f5 k( W" Q+ Q
SJMP START1 ;P3.7口为1时跳回START1" y. `, n) K1 e8 D
SETMM1: LJMP SETMM ;转到时间调整程序SETMM ], q. e" \# {& ]- ?3 |( ~" J
;+ s" n" i+ p5 c: b% B; R
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2 h/ j c4 \. ]6 W
;; 1秒计时程序 ;;
* e+ M( d- N# Z9 [/ I; Y1 Z9 X;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5 f& w1 R* a. F- C0 k" B& B$ v( J
;T0中断服务程序6 ~& d8 g( J4 X, l- {1 x
INTT0: PUSH ACC ;累加器入栈保护
8 ?. L$ j: g2 j c$ X- fPUSH PSW ;状态字入栈保护
) S0 v4 b* o1 q) j+ k; VCLR ET0 ;关T0中断答应* z2 |; ^1 X. ?
CLR TR0 ;封闭定时器T0
( f0 b' K. A+ Q' X% z% W- JMOV A,#0B7H ;中断响应时间同步修正2 Q* J/ H/ x' [. a# ^9 ?
ADD A,TL0 ;低8位初值修正
9 ^& H; T- K& D# e2 _MOV TL0,A ;重装初值(低8位修正值)& g5 X3 E2 J$ o4 A2 Q
MOV A,#3CH ;高8位初值修正
# ]) @8 K# V4 {6 i7 eADDC A,TH0 ;
5 g `" Z, C" ^/ J1 ~! U4 p: pMOV TH0,A ;重装初值(高8位修正值)
2 n1 Q& A! @% q% L% ?& kSETB TR0 ;开启定时器T0
( ^# _* Y( i1 Z; t3 BDJNZ R4, OUTT0 ;20次中断未到中断退出
! o5 i# d |# P5 sADDSS: MOV R4,#14H ;20次中断到(1秒)重赋初值
( k* X" ?, o' aMOV R0,#71H ;指向秒计时单元(71H-72H)5 [" B2 {- S8 T) B4 w3 W
ACALL ADD1 ;调用加1程序(加1秒操作)
8 F U* P2 n" X' i$ vMOV A,R3 ;秒数据放入A(R3为2位十进制数组合)
$ t- m6 ]1 ]" A8 ]& m; g! RCLR C ;清进位标志1 g1 @# T6 _/ R/ N; b, s6 m
CJNE A,#60H,ADDMM ;4 v! i! X5 T9 s/ k# g& P9 n
ADDMM: JC OUTT0 ;小于60秒时中断退出
8 D! d. S" B# c) d0 dACALL CLR0 ;大于或即是60秒时对秒计时单元清08 g" Z0 y4 v$ {, A4 B [. n
MOV R0,#77H ;指向分计时单元(76H-77H)- `9 w* _7 j" T" |+ U. ]
ACALL ADD1 ;分计时单元加1分钟
' f3 l/ T8 n) }MOV A,R3 ;分数据放入A4 U5 a# p6 `1 D4 T3 v" A" t( P
CLR C ;清进位标志5 r% n! ]3 x+ M3 E: n
CJNE A,#60H,ADDHH ;
9 R6 n9 i7 v4 r3 W! SADDHH: JC OUTT0 ;小于60分时中断退出
! S' Z+ K. [# N4 u$ R- zACALL CLR0 ;大于或即是60分时分计时单元清0+ v4 b9 _& k7 p3 ~2 p0 h
MOV R0,#79H ;指向小时计时单(78H-79H)2 |% i3 s2 C) Q. o( j) a& ^0 m
ACALL ADD1 ;小时计时单元加1小时! \" k5 M2 r% ^8 M
MOV A,R3 ;时数据放入A! e E# [/ f) ^) q/ w/ U8 p
CLR C ;清进位标志
( X! {/ @3 O' B' j" }( B! L; A. B' CCJNE A,#24H,HOUR ;4 @* b) N; j) v2 c# K
HOUR: JC OUTT0 ;小于24小时中断退出( i3 y5 J$ X; q! N
ACALL CLR0 ;大于或即是24小时小时计时单元清0! I5 W# s- r8 a F
OUTT0: MOV 72H,76H ;中断退出时将分、时计时单元数据移/ |4 s+ E! s k0 B
MOV 73H,77H ;入对应显示单元* }5 U( w$ Q; g& n, \
MOV 74H,78H ;: [& f, N: P" l! L/ p3 f- @
MOV 75H,79H ;5 u0 h2 x6 t" {8 b! L) o
POP PSW ;恢复状态字(出栈)
0 K9 ~, H# u) s' O& `& f9 hPOP ACC ;恢复累加器
: H6 N6 [6 ]. K6 D; T+ Y% vSETB ET0 ;开放T0中断
# ]! `; b2 h* E# _- T) Q8 VRETI ;中断返回
* w" F0 T" @' f1 F9 B m;0 ? G" ^9 }% A1 v5 W/ l
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
8 y1 ^) M! J6 |1 l1 _5 c) Z;; 闪动调时 程 序 ;;
7 s4 i- o- o+ W& x0 _;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
. n5 H: _$ I k; P* c;T1中断服务程序,用作时间调整时调整单元闪烁指示
$ b$ w# |( R% ]( |% I& U GINTT1: PUSH ACC ;中断现场保护
5 t* f) X' A3 a9 x! aPUSH PSW ;' ?. s* p+ D+ R& |, A+ @
MOV TL1, #0B0H ;装定时器T1定时初值
! w; U! q' a6 v2 _. rMOV TH1, #3CH ;
3 } |0 ]' z7 J3 t* L' e! _. [DJNZ R2,INTT1OUT ;0.3秒未到退出中断(50MS中断6次): [! H' \/ H# p# R8 [# X/ a
MOV R2,#06H ;重装0.3秒定时用初值
9 e- O0 g+ N/ R4 S7 H$ fCPL 02H ;0.3秒定时到对闪烁标志取反
+ V- g7 X( s8 q( R* ~+ tJB 02H,FLASH1 ;02H位为1时显示单元"熄灭"
% K* h0 ]3 L: {4 a$ \MOV 72H,76H ;02H位为0时正常显示
' v9 T9 w0 Z' I8 C; ?0 [0 J7 hMOV 73H,77H ;
; n o+ x/ l* {4 W2 \MOV 74H,78H ;% ~: z! M$ i% f0 X* F
MOV 75H,79H ;; L3 C2 c( i* }6 e
INTT1OUT: POP PSW ;恢复现场
2 F/ a3 b, c* o" a; a- @POP ACC ;
1 O3 U* T6 v# Z' r1 I/ V% jRETI ;中断退出+ R2 p6 I& ?$ _! B7 z. v/ k6 I8 R
FLASH1: JB 01H,FLASH2 ;01H位为1时,转小时熄灭控制
- V$ j) L& g, KMOV 72H,7AH ;01H位为0时,"熄灭符"数据放入分1 J7 e8 T9 A/ J
MOV 73H,7AH ;显示单元(72H-73H),将不显示分数据' Z( C# K8 z, o+ I0 \- j/ G
MOV 74H,78H ;6 X5 y3 b( B" H: s0 u! u
MOV 75H,79H ;
; `) c; D+ w8 ~. g8 rAJMP INTT1OUT ;转中断退出
: R) q; j. T5 t+ T$ Y& PFLASH2: MOV 72H,76H ;01H位为1时,"熄灭符"数据放入小时
0 G( k& [/ |8 U1 ^MOV 73H,77H ;显示单元(74H-75H),小时数据将不显示
, d* U0 a+ h* jMOV 74H,7AH ;0 j9 \. R; @; f% b
MOV 75H,7AH ;
6 a# j, `7 `" _$ QAJMP INTT1OUT ;转中断退出
* r0 A7 M: z0 c# S. A* n0 a Q;) }+ o9 |- H9 C, o& ~) G$ J) q
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ i0 Z. M4 T# ~( {;; 加1子 程 序 ;;# T9 {3 x3 u0 i& D
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; S e- Q3 t( Q
;6 f7 X7 a$ r9 |, u& \6 \/ Y
ADD1: MOV A,@R0 ;取当前计时单元数据到A/ j! | V" L& G1 q$ |1 a3 [( `- W
DEC R0 ;指向前一地址
2 }) Q X: o, c' SSWAP A ;A中数据高四位与低四位交换
' U9 z$ ?. g0 l+ rORL A,@R0 ;前一地址中数据放入A中低四位4 f R: Y2 b) p# d7 `5 T4 o8 x; d
ADD A,#01H ;A加1操作- X6 i. {2 G9 `! Q* d0 ]6 P2 x4 ?
DA A ;十进制调整
0 V0 D+ ^( _# U' u( mMOV R3,A ;移入R3寄存器8 @/ l! V- |; ?: ?& i! j
ANL A,#0FH ;高四位变02 ?" j- ]9 F {
MOV @R0,A ;放回前一地址单元
3 F: K, H7 J" C2 ^: z2 a; Z1 ?MOV A,R3 ;取回R3中暂存数据5 W" h T# s! [6 @& a
INC R0 ;指向当前地址单元
5 R8 j" Z& j* t5 R4 fSWAP A ;A中数据高四位与低四位交换4 Y) a/ i* [# @1 T8 |6 Q
ANL A,#0FH ;高四位变0
; A& a8 O: B& `' h8 J6 ]) HMOV @R0,A ;数据放入当削地址单元中8 @7 i+ ^+ t" p+ i6 c( _) {
RET ;子程序返回1 M* P+ x7 C- P! N
;
; S1 @* n3 q! R7 r2 g6 B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" F3 ^7 U N* ~3 j$ _- U# Z
;; 清零程序 ;;
' B3 M o, n3 G* N, f8 M8 P! G$ [;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8 z$ ?, a6 _8 F a3 ?
;.............
) k1 H4 }3 N% [2 U# i$ f( B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" p5 p% m9 D. I% f0 D8 w# F9 Q
;; 时钟调整程序 ;;
: @& n' ^* Y0 V9 t& Q- b. a3 G; o;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9 t9 M; O" A# | T
;当调时按键按下时进入此程序
) r( t! U9 I* J! Y3 h& {SETMM: cLR ET0 ;关定时器T0中断
6 O8 U+ B7 g& n- M; a1 f( S& j- dCLR TR0 ;封闭定时器T0 J1 d7 a- @8 L0 p) }4 v
LCALL DL1S ;调用1秒延时程序/ W% {7 O8 |# [( `* u
JB P3.7,CLOSEDIS ;键按下时间小于1秒,封闭显示(省电)
" G7 b2 A' q: u; ]5 XMOV R2,#06H ;进入调时状态,赋闪烁定时初值1 Z7 e# Z i. x }6 g
SETB ET1 ;答应T1中断
1 B7 D2 M V. \+ Y4 K G$ ZSETB TR1 ;开启定时器T10 I% ~0 L _$ Z1 ~6 l1 P3 J
SET2: JNB P3.7,SET1 ;P3.7口为0(键未开释),等待+ A0 a; }+ w+ r# a% C
SETB 00H ;键开释,分调整闪烁标志置1
! q# q3 A9 h( }9 e- ?2 y* K) ^SET4: JB P3.7,SET3 ;等待键按下
& I! T( K0 F4 Z& j7 P, G% s" xLCALL DL05S ;有键按下,延时0.5秒
# `9 I. l% |. d; }% N; dJNB P3.7,SETHH ;按下时间大于0.5秒转调小时状态3 P" d1 Q3 a* i8 F" }2 p
MOV R0,#77H ;按下时间小于0.5秒加1分钟操作
) o5 Y7 f/ Y( v! e! K8 L3 oLCALL ADD1 ;调用加1子程序
$ Q4 ~3 ?0 D k3 ~6 L+ hMOV A,R3 ;取调整单元数据5 H2 Q- Q8 K6 {& A& M0 E8 j
CLR C ;清进位标志
( @7 X5 p6 k& h. |- U TCJNE A,#60H,HHH ;调整单元数据与60比较
! f& {/ P% @& K) | k( ]! OHHH: JC SET4 ;调整单元数据小于60转SET4循环: a; Q, Q! V* w5 h* z7 [: w% y- B
LCALL CLR0 ;调整单元数据大于或即是60时清0 a0 C9 G1 K1 \+ l) V- j2 t
CLR C ;清进位标志
3 Y6 J- u% i( E1 v7 | U/ dAJMP SET4 ;跳转到SET4循环& Y- }8 H; y2 x2 H4 J& H* o4 x% q1 k
CLOSEDIS: SETB ET0 ;省电(LED不显示)状态。开T0中断
4 n! ?: Y8 `/ B! n; lSETB TR0 ;开启T0定时器(开时钟)8 p' q; q' v& K, K
CLOSE: JB P3.7,CLOSE ;无按键按下,等待。
0 y7 o8 |+ B* X) N6 ALCALL DISPLAY ;有键按下,调显示子程序延时削抖; h( |% o, t! M }# c4 D
JB P3.7,CLOSE ;是干扰返回CLOSE等待
; T) Q5 v* \3 R# bWAITH: JNB P3.7,WAITH ;等待键开释
: W. k8 s7 ` G- cLJMP START1 ;返回主程序(LED数据显示亮)3 e2 H1 I6 j+ F1 Y
SETHH: CLR 00H ;分闪烁标志清除(进入调小时状态)" V8 @! I" c6 T. W/ l
SETHH1: JNB P3.7,SET5 ;等待键开释
, P# R; {5 m8 v' `SETB 01H ;小时调整标志置1
$ w6 H+ K, r4 ?0 G$ PSET6: JB P3.7,SET7 ;等待按键按下# [7 |+ w8 F* E3 _: r/ W- N0 X
LCALL DL05S ;有键按下延时0.5秒& ] I- Y: p: m% Q
JNB P3.7,SETOUT ;按下时间大于0.5秒退出时间调整/ ~6 U9 J* Q9 l
MOV R0,#79H ;按下时间小于0.5秒加1小时操作
s+ [& ?2 U q" i' {6 [LCALL ADD1 ;调加1子程序* Q6 Z9 w4 V$ a+ e- @ @0 U
MOV A,R3 ;! {) m& i; D, u; q5 f
CLR C ;
# [, ?& [- ]6 O) v- R) `$ Z4 \CJNE A,#24H,HOUU ;计时单元数据与24比较" V/ H" B7 K4 H$ ^
HOUU: JC SET6 ;小于24转SET6循环% j6 Z/ h! A B
LCALL CLR0 ;大于或即是24时清0操作& e1 d* c8 @5 B5 t- C9 }6 i; K. @
AJMP SET6 ;跳转到SET6循环
6 s+ W) j* a) f& K$ f( J8 }. M4 z; uSETOUT: JNB P3.7,SETOUT1 ;调时退出程序。等待键开释
2 N& E; ?: U7 XLCALL DISPLAY ;延时削抖; y3 W! L( w" C$ o, W- @
JNB P3.7,SETOUT ;是抖动,返回SETOUT再等待) G: p0 g( C1 o% C& F7 i* a
CLR 01H ;清调小时标志9 j& m( Q4 B- K$ I$ V& L$ d3 o8 ~
CLR 00H ;清调分标志
$ S% \; v' S; s$ J# MCLR 02H ;清闪烁标志" P9 B- k e& |9 L- C' a5 V
CLR TR1 ;封闭定时器T1
4 ^% |4 T" N$ N0 L* P! d1 eCLR ET1 ;关定时器T1中断
. ^% Z0 J! V6 sSETB TR0 ;开启定时器T0
) m _9 V& J2 W2 O4 A" A3 O# E( SSETB ET0 ;开定时器T0中断(计时开始)
# S9 a7 `% t1 e; u3 U# p5 P/ vLJMP START1 ;跳回主程序
* e, w7 y9 n/ `2 ]* O6 w5 `SET1: LCALL DISPLAY ;键开释等待时调用显示程序(调分)- K( h& O; S( l5 c) I6 T
AJMP SET2 ;防止键按下时无时钟显示+ p7 c: @3 o: R( Z
SET3: LCALL DISPLAY ;等待调分按键时时钟显示用; {: D7 x/ l- V. S
AJMP SET4# ^) y9 u/ B6 G, o
SET5: LCALL DISPLAY ;键开释等待时调用显示程序(调小时)- e# l* v8 d/ T( D; B @
AJMP SETHH1 ;防止键按下时无时钟显示
& `% ?+ C0 X7 c. S, l, \SET7: LCALL DISPLAY ;等待调小时按键时时钟显示用7 }* g+ T+ M6 X! X$ A& E) r
AJMP SET6* m3 r& T$ o0 u" o! {, A, s
SETOUT1: LCALL DISPLAY ;退出时钟调整时键开释等待) L$ `5 ~/ _- i" c
AJMP SETOUT ;防止键按下时无时钟显示# _+ X3 i$ S/ N0 S. O
;5 m2 z: N2 @7 u4 i3 _+ Q- P& a* O
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;( T& G" @& o) ~" X
;; 显示程序 ;;6 c& }. |1 v1 N4 N
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;( U, M. M. I! J+ r+ o- E
$$$$$$$$$$$$$$$$$$$$$$$$$$$* N6 _; c" e9 L+ R7 a" I
;1MS延时程序,LED显示程序用
1 l4 }+ n7 T6 P; X C$ E0 yDL1MS: MOV R6,#14H# z, C, r. O4 A3 E8 E2 t
DL1: MOV R7,#19H
8 j6 V5 Q0 [9 s! g, x) \7 Y7 wDL2: DJNZ R7,DL2
8 m2 [ H8 T$ ^4 K2 E( h3 x: CDJNZ R6,DL1' M! m/ T9 j+ e
RET
" c- o( w$ W0 a3 U/ c3 y;20MS延时程序,采用调用显示子程序以改善LED的显示闪烁现象
* G( A0 I8 }) m' |' O" m2 J+ iDS20MS: ACALL DISPLAY) W. @3 \1 |4 [
ACALL DISPLAY# _$ M4 @8 ~! x' T$ x$ `7 c9 |
ACALL DISPLAY6 i; K4 @3 j+ p9 e# R( y
RET
1 Q) q7 e1 }2 E" };延时程序,用作按键时间的长短判定2 R8 h9 s% N- i7 m" j2 G
DL1S: LCALL DL05S
8 m* Z$ o% j, ~- L2 mLCALL DL05S: u# a2 t6 |$ A4 v: I. d
RET
' u8 J/ d1 ]3 F8 PDL05S: MOV R3,#20H ;8毫秒*32=0.196秒+ K; p0 A0 g# ?: P3 |6 u, ?7 e
DL05S1: LCALL DISPLAY
. b$ a8 X8 Q) d4 IDJNZ R3,DL05S1
- e, X9 N) f# | x% v; hRET
$ a' z1 n$ {4 G4 A& e/ }END ;程序结束
. T/ @6 a3 S% d3 K: ?2 {$ ? |