51单片机作的电子钟程序在很多地方已经有了介绍, 对于单片机学习者而言这个程序基本上是一道门槛,掌握了电子钟程序, 基本上可以说51单片机就掌握了80%。常见的电子钟程序由显示部分, 计算部分, 时钟调整部分构成。 9 {9 v' S6 H7 `& e/ e; C
时钟的基本显示原理:时钟开始显示为0时0分0秒,也就是数码管显示000000,然后每秒秒位加1 ,到9后,10秒位加1,秒位回0。10秒位到5后,即59秒 ,分钟加1,10秒位回0。依次类推,时钟最大的显示值为23小时59分59秒。这里只要确定了1秒的定时时间, 其他位均以此为基准往上累加。 ) d) z5 x, v9 M8 j" B+ X
开始程序定义了秒, 十秒, 分, 十分,小时, 十小时,共6位的寄存器, 分别存在30h,31h,32h,33h,34h,35h单元,便于程序以后调用和理解。
3 I" v; t& H; f: k' M: u 6个数码管分别显示时、分、秒,一个功能键,可以切换调整时分秒、增加数值、熄灭节电等功能全部集一键。 * A# Z# P( S; q3 ?, k* J
3 R, }! O; m t1 g* s& b3 @4 y
, J8 z! i' _8 I1 c7 M, Z( q2 l0 k I3 Q& O. v6 D6 S
以下是部分汇编源程序,购买我们产品后我们用光盘将完整的单片机汇编源程序和烧写文件送给客户。* ^/ w5 L5 M' s6 g8 {$ |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
( G [0 p) O; v1 z4 F2 v;; 中断入口程序 ;; (仅供参考)
; y, T- m4 @0 t;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
9 Q! W0 d. {# ^: Y& }% k' ~;; \+ p! w. m9 h; R
ORG 0000H ;程序执行开始地址
' F) i3 U; b% _) l" ?5 _) I) h3 ~5 bLJMP START ;跳到标号START执行) S! U/ n1 z" D/ b! I f4 r
ORG 0003H ;外中断0中断程序入口$ f1 ~" j' o9 E, d3 O! `; |) W
RETI ;外中断0中断返回& S1 W, Y. k1 O$ C9 h. H
ORG 000BH ;定时器T0中断程序入口. e u6 W# i h
LJMP INTT0 ;跳至INTTO执行
d. ]4 T8 m; TORG 0013H ;外中断1中断程序入口( R/ `% g9 ^- A$ C) `" B
RETI ;外中断1中断返回
; M. F5 e- B! e6 cORG 001BH ;定时器T1中断程序入口7 t8 q9 u$ u" R3 a- q
LJMP INTT1 ;跳至INTT1执行; \' D+ U) I5 P
ORG 0023H ;串行中断程序入口地址
) F! ~# w6 s( {* ~/ C( q. U- `RETI ;串行中断程序返回
) J& t8 g) b3 j- B# h6 M;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
: _3 Z, A: c( M;; 主 程 序 ;;
* Z3 \5 W% a- _% B; e;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7 T+ f2 k+ s/ K" j- C7 ]. ?
;% F, ]) ]+ S2 O" [1 C6 S4 E- G' T$ S
START: MOV R0,#70H ;清70H-7AH共11个内存单元
3 H- [1 }# x, S# n/ G, }MOV R7,#0BH
0 L. P' v4 G5 V9 P% f c, J5 ]' w;clr P3.7 ;
% X9 `; X4 H8 _ e! `8 BCLEARDISP: MOV @R0,#00H ;" O; M. X; Y1 U
INC R0 ;0 ?) b/ @4 X2 `9 B: }" B
DJNZ R7,CLEARDISP ;! m! J5 j' m( Z+ P
MOV 20H,#00H ;清20H(标志用)) D7 o2 Q' C& D1 B% M
MOV 7AH,#0AH ;放入"熄灭符"数据0 y" z" o. M" f- h+ R$ ^
MOV TMOD,#11H ;设T0、T1为16位定时器
# Q' ]/ q& b f3 u1 w6 d5 v hMOV TL0,#0B0H ;50MS定时初值(T0计时用)
+ \9 h$ {' N: b! x0 M& K$ g0 dMOV TH0,#3CH ;50MS定时初值
9 a0 T% b( z( N$ y. IMOV TL1,#0B0H ;50MS定时初值(T1闪烁定时用)
, O6 R4 c3 F% ?: b8 jMOV TH1,#3CH ;50MS定时初值
9 Z, T! |8 w% c; k* r. X2 e x. MSETB EA ;总中断开放: P" M+ X0 x; y! {8 Q
SETB ET0 ;答应T0中断
& b% o, [+ ^3 O& ^SETB TR0 ;开启T0定时器7 b5 B0 D" T' l; ~+ X* J$ [
MOV R4,#14H ;1秒定时用初值(50MS×20)8 j: k5 j& y" _0 ^/ |
START1: LCALL DISPLAY ;调用显示子程序
' T G6 j9 `# Y: tJNB P3.7,SETMM1 ;P3.7口为0时转时间调整程序 o" r$ H# g6 E% m
SJMP START1 ;P3.7口为1时跳回START1% y3 d+ G5 n) @+ i: y* o: X9 i- Z
SETMM1: LJMP SETMM ;转到时间调整程序SETMM0 G; q7 _( B$ r( ^: X0 I
;6 s$ v; p9 |/ ]
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
! d( Z, h7 y' t* c;; 1秒计时程序 ;;
! `) k1 h1 r4 Q2 k7 ?8 @" C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4 s" U, i# M- x z1 z, s5 ~8 e* ~;T0中断服务程序
% v b" J4 g7 b& g3 F% t! wINTT0: PUSH ACC ;累加器入栈保护
9 h+ v0 j/ ~8 [PUSH PSW ;状态字入栈保护( w6 p. o" [4 O- a$ g* ~5 K
CLR ET0 ;关T0中断答应
6 r( j" \1 Z6 V z+ P( f! P; dCLR TR0 ;封闭定时器T0/ O' b7 V, E& Z: ~
MOV A,#0B7H ;中断响应时间同步修正! n5 O }: U6 T( y) N9 K9 ~) B$ N
ADD A,TL0 ;低8位初值修正
2 }7 y$ }' ^4 z5 i; [( u/ HMOV TL0,A ;重装初值(低8位修正值)
! j( B( E% j5 q+ bMOV A,#3CH ;高8位初值修正
: w4 g h1 t6 GADDC A,TH0 ;7 G, i; x" b+ \
MOV TH0,A ;重装初值(高8位修正值)
* O& r6 P: \4 j5 M+ YSETB TR0 ;开启定时器T0
) `& b+ p* x, w- EDJNZ R4, OUTT0 ;20次中断未到中断退出# b. T0 t8 f- T/ e1 X/ v: N6 R
ADDSS: MOV R4,#14H ;20次中断到(1秒)重赋初值
3 U R* P3 y/ N( S5 X% ]* qMOV R0,#71H ;指向秒计时单元(71H-72H); `3 f# W4 T" T2 }* Q, v
ACALL ADD1 ;调用加1程序(加1秒操作)
+ p- w# `* }: X- @, F% n. QMOV A,R3 ;秒数据放入A(R3为2位十进制数组合)
8 z( ?1 t. l C. z2 X, wCLR C ;清进位标志# Y* X* e# K4 X/ C7 X3 x
CJNE A,#60H,ADDMM ;2 K' ^4 ^8 l, `" @
ADDMM: JC OUTT0 ;小于60秒时中断退出
3 q/ l' j* u/ b3 L, a$ v' \2 bACALL CLR0 ;大于或即是60秒时对秒计时单元清0* F% {! g" ~! r2 o& s: [4 C
MOV R0,#77H ;指向分计时单元(76H-77H)
/ K. n: X7 j: [9 Z; l t. w7 qACALL ADD1 ;分计时单元加1分钟
6 q2 a0 g" o) EMOV A,R3 ;分数据放入A: \( c% ~3 _$ D* Z
CLR C ;清进位标志
" k: @/ `0 O% w" d) n3 KCJNE A,#60H,ADDHH ;( G( F: a, u+ O# ^% d
ADDHH: JC OUTT0 ;小于60分时中断退出
; m( B$ ^$ U( bACALL CLR0 ;大于或即是60分时分计时单元清0( h2 ]+ I8 [( K8 l( e5 Q/ |
MOV R0,#79H ;指向小时计时单(78H-79H)3 n7 @" M3 t D% g% H8 W
ACALL ADD1 ;小时计时单元加1小时8 I) P- R- M1 h% I5 R: i
MOV A,R3 ;时数据放入A
+ a" A! b! |3 SCLR C ;清进位标志
2 @1 N2 ~. g, pCJNE A,#24H,HOUR ;1 j: S9 I: B2 n7 u3 g, |) d# q
HOUR: JC OUTT0 ;小于24小时中断退出
3 O8 Q, p/ y9 [" EACALL CLR0 ;大于或即是24小时小时计时单元清0) b& B0 L% h& E" i
OUTT0: MOV 72H,76H ;中断退出时将分、时计时单元数据移6 A$ {8 w! m8 E. m& T ^1 ~% @) M) Y
MOV 73H,77H ;入对应显示单元
7 N, ?+ l' N: Y- T5 ?) `MOV 74H,78H ;
2 ? v: J* V0 H) z3 L8 Y) y7 yMOV 75H,79H ;, J7 ]) C) l0 W5 k3 S
POP PSW ;恢复状态字(出栈)$ \. q( `- k4 u) ^. Q8 `
POP ACC ;恢复累加器! r! G( y6 i# s' Z n. @
SETB ET0 ;开放T0中断
" m+ S/ M/ \2 i' Z v0 Q5 v0 x' L( T# lRETI ;中断返回
2 i1 d) M. Z4 }" h;
- P+ @ S. o9 a( B! ]) |7 i1 h;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
# s5 d* W7 u% M. c6 z% N# G/ U4 B- e;; 闪动调时 程 序 ;;% i$ i: X8 l0 W* e
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4 U0 Y# u0 `, S: d
;T1中断服务程序,用作时间调整时调整单元闪烁指示
) Z3 h/ B$ x4 R% P' d* ?INTT1: PUSH ACC ;中断现场保护2 D! r* L; a5 {7 O: T
PUSH PSW ; b; Q# `* B6 f b
MOV TL1, #0B0H ;装定时器T1定时初值
3 b T' w: P6 l6 H5 \4 Q3 tMOV TH1, #3CH ;
5 R- z& J; Q4 e; P: N. y% }! j' l/ ^DJNZ R2,INTT1OUT ;0.3秒未到退出中断(50MS中断6次)
! {% C! J8 g$ K d" y) oMOV R2,#06H ;重装0.3秒定时用初值
9 X9 y$ w4 z5 M' A% K! m" A- R( fCPL 02H ;0.3秒定时到对闪烁标志取反2 x5 x% D7 _+ K* b6 }+ ~
JB 02H,FLASH1 ;02H位为1时显示单元"熄灭"
" i- f2 T- R; {, ~& b* x1 kMOV 72H,76H ;02H位为0时正常显示: d& w- @7 a. p$ O
MOV 73H,77H ;: v0 s8 @ Z. Q% P- T5 \
MOV 74H,78H ;- v5 q! E, d4 g& i8 H* J
MOV 75H,79H ;7 M, j4 x9 \# I" W3 w( p3 q3 P7 ~4 ^
INTT1OUT: POP PSW ;恢复现场! Y3 a: P" l2 @
POP ACC ;
1 L+ `6 ]4 z; k3 P9 M3 u2 gRETI ;中断退出% H; T1 F7 W7 W
FLASH1: JB 01H,FLASH2 ;01H位为1时,转小时熄灭控制
2 N4 L7 V1 d$ _- N" SMOV 72H,7AH ;01H位为0时,"熄灭符"数据放入分
3 [ R: j' ~/ b% f2 ]7 S" }MOV 73H,7AH ;显示单元(72H-73H),将不显示分数据
% O8 I" m6 [; A2 _$ yMOV 74H,78H ;
) ]. T5 ]. u% y7 r. IMOV 75H,79H ;
8 M* F# C0 Y0 j7 sAJMP INTT1OUT ;转中断退出. W6 ~$ ~3 }. u' W
FLASH2: MOV 72H,76H ;01H位为1时,"熄灭符"数据放入小时
3 U" q- X8 \4 k# g$ G7 U7 ZMOV 73H,77H ;显示单元(74H-75H),小时数据将不显示% h4 T9 d8 v* B, d1 t3 s" z% w
MOV 74H,7AH ;8 j* x4 O/ `5 l1 c
MOV 75H,7AH ;7 ]2 ]% T. \) ?1 z w
AJMP INTT1OUT ;转中断退出
* o! h9 ~1 U/ O- ?" \5 t7 a0 r;1 |) Q; f. N# i+ w
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
0 _4 R$ I( a$ @" T;; 加1子 程 序 ;;
( ]% \* i, j/ e% T* v x; b;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
) n) A" w* i% z5 j2 f;
$ e4 i7 y0 f% ]2 y+ Q7 {ADD1: MOV A,@R0 ;取当前计时单元数据到A# v' }$ [4 I, d
DEC R0 ;指向前一地址
5 D6 S2 H& g$ r0 u! C$ D7 P4 gSWAP A ;A中数据高四位与低四位交换
3 k* l' M) G' jORL A,@R0 ;前一地址中数据放入A中低四位' J, h, ?3 v9 f8 I$ W
ADD A,#01H ;A加1操作0 J4 p( a: P) U1 s* _+ s5 s
DA A ;十进制调整
) Z6 L4 i+ [2 tMOV R3,A ;移入R3寄存器
% M1 Y0 {7 v; x, n3 Q, ?; LANL A,#0FH ;高四位变0
6 M* @5 ?4 p" {# @$ r. x2 Y: zMOV @R0,A ;放回前一地址单元
9 H1 n. S9 l d+ }- i# AMOV A,R3 ;取回R3中暂存数据$ J/ p* Y z) e
INC R0 ;指向当前地址单元3 l* w5 h% E) Y+ V5 A: I+ L; u$ w
SWAP A ;A中数据高四位与低四位交换( V: g( g2 a3 A e
ANL A,#0FH ;高四位变0
3 v2 q/ J4 F2 e, ZMOV @R0,A ;数据放入当削地址单元中6 P0 ^1 J6 X8 G# J! k
RET ;子程序返回
3 U* I% F& J0 l1 i;9 I* Z: Q! ^1 O8 C
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
) Z8 H! _, J M( A; N7 z2 [;; 清零程序 ;;2 J0 x, H$ \6 V) w
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
! D7 ]" T0 D. N/ x3 H0 L' A;.............
* R! E4 u+ O) f# O# M; g;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Y/ x+ V- ^5 ^7 i$ w% i9 w$ y
;; 时钟调整程序 ;;' \- N: ~. v, s y- @5 O' d& h- l
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1 S2 j2 I# T7 J% P;当调时按键按下时进入此程序
- O& |1 _7 ]3 \SETMM: cLR ET0 ;关定时器T0中断
" A! ?5 ~. _0 XCLR TR0 ;封闭定时器T0
1 a5 L( z, p' v$ K r7 F4 ULCALL DL1S ;调用1秒延时程序( q( E8 R: z$ m& K' c
JB P3.7,CLOSEDIS ;键按下时间小于1秒,封闭显示(省电)
0 f0 C4 }' J5 W& pMOV R2,#06H ;进入调时状态,赋闪烁定时初值
I" u; E2 O+ I ?* F5 |SETB ET1 ;答应T1中断2 X; V5 Q: ~8 R* ^, Y4 Q! g
SETB TR1 ;开启定时器T1( f! f1 E8 \0 t6 Z, M
SET2: JNB P3.7,SET1 ;P3.7口为0(键未开释),等待/ o. A2 q% `2 e& Z( c
SETB 00H ;键开释,分调整闪烁标志置1( M, c$ C5 B2 t4 \( D
SET4: JB P3.7,SET3 ;等待键按下
1 W' B4 u/ i/ U: X6 WLCALL DL05S ;有键按下,延时0.5秒
2 u+ r# k1 c) k6 u4 h8 MJNB P3.7,SETHH ;按下时间大于0.5秒转调小时状态, B4 c# b: [7 t$ Q7 }& R
MOV R0,#77H ;按下时间小于0.5秒加1分钟操作) P( b/ Q: E" \# |9 c! v
LCALL ADD1 ;调用加1子程序# b0 c( j/ q3 Z h+ Y) w
MOV A,R3 ;取调整单元数据
8 _, \( X* f4 r" L. @& ]6 j: gCLR C ;清进位标志
4 B2 X. y, a5 Y1 ACJNE A,#60H,HHH ;调整单元数据与60比较! U8 E& |. o3 U& {- ?" l" G
HHH: JC SET4 ;调整单元数据小于60转SET4循环8 F+ P, N( C: ?1 t1 p k! [
LCALL CLR0 ;调整单元数据大于或即是60时清0* y: p) I# p) E& Q' E, X- V& h
CLR C ;清进位标志% n: N. O+ Z- p7 l9 M5 F9 [) D
AJMP SET4 ;跳转到SET4循环" ]0 V: N2 h' ~, `9 J
CLOSEDIS: SETB ET0 ;省电(LED不显示)状态。开T0中断9 \) G; U7 c9 j# k6 k- C
SETB TR0 ;开启T0定时器(开时钟)
6 g5 ~. j: H1 u# H& D) v. xCLOSE: JB P3.7,CLOSE ;无按键按下,等待。
3 [5 T( X' v; b% iLCALL DISPLAY ;有键按下,调显示子程序延时削抖" i4 C+ N2 a t# F" U
JB P3.7,CLOSE ;是干扰返回CLOSE等待
0 Z7 U1 s Y" U, k3 {- fWAITH: JNB P3.7,WAITH ;等待键开释$ A9 T& f: y0 E/ \
LJMP START1 ;返回主程序(LED数据显示亮)5 n+ @' m" Y$ [2 T
SETHH: CLR 00H ;分闪烁标志清除(进入调小时状态)
6 M2 `5 C' V% A4 c1 H+ [! c2 c8 XSETHH1: JNB P3.7,SET5 ;等待键开释
% s6 j2 i6 O+ X/ A5 G5 \' LSETB 01H ;小时调整标志置1
2 r+ r3 j3 ]0 E0 T& S+ cSET6: JB P3.7,SET7 ;等待按键按下
1 g0 R8 p# I8 h8 j( g$ F5 F4 SLCALL DL05S ;有键按下延时0.5秒0 R% v# M$ G% X8 z8 k4 Q4 I
JNB P3.7,SETOUT ;按下时间大于0.5秒退出时间调整; U7 E4 J) o$ z$ p3 K9 E% v5 F- t
MOV R0,#79H ;按下时间小于0.5秒加1小时操作3 ~* R% h. D. C5 b( W
LCALL ADD1 ;调加1子程序/ C6 h7 V( S* U) y
MOV A,R3 ;
+ b" M$ \3 q$ _2 C# y; B8 W" C3 ]CLR C ;
8 }+ U( a2 w# W2 [CJNE A,#24H,HOUU ;计时单元数据与24比较% f& N3 j6 [0 Y, y- q7 n
HOUU: JC SET6 ;小于24转SET6循环
" U2 v6 j0 S* u5 yLCALL CLR0 ;大于或即是24时清0操作
$ N; O7 ]0 v7 z) x& f6 OAJMP SET6 ;跳转到SET6循环) u$ W, I5 l: e# S) Y6 _, x! R
SETOUT: JNB P3.7,SETOUT1 ;调时退出程序。等待键开释
# _! e- b( d( ~7 o, ?9 T+ N4 @LCALL DISPLAY ;延时削抖* \ I! }5 c0 \: H2 j+ x8 y
JNB P3.7,SETOUT ;是抖动,返回SETOUT再等待; P9 o8 ~3 d; k6 ^% ?% E/ q
CLR 01H ;清调小时标志& Y5 u7 Y! z' E
CLR 00H ;清调分标志) U U9 \6 W3 v9 J* x$ @
CLR 02H ;清闪烁标志
\/ k5 S. a' W- B0 I& U& T9 jCLR TR1 ;封闭定时器T1
% g4 a9 X0 z0 T: {" ECLR ET1 ;关定时器T1中断
* H. B' V6 a- N0 `. E( ASETB TR0 ;开启定时器T0% w: d0 V- x# R+ M
SETB ET0 ;开定时器T0中断(计时开始)
4 P$ r7 n3 g% e/ E1 a9 ]) sLJMP START1 ;跳回主程序5 H2 y+ x \: W9 t$ D m- t% {
SET1: LCALL DISPLAY ;键开释等待时调用显示程序(调分): y: u* n# N9 T( P+ Y3 c
AJMP SET2 ;防止键按下时无时钟显示
4 G; u- O* ?6 J7 S+ x MSET3: LCALL DISPLAY ;等待调分按键时时钟显示用% {& s. P; |4 }
AJMP SET4
; u. G$ y; n- q; |- f, m3 sSET5: LCALL DISPLAY ;键开释等待时调用显示程序(调小时)
- g/ d8 W7 M& I/ P7 d! l1 wAJMP SETHH1 ;防止键按下时无时钟显示, U6 L) u; X3 _. ]' J8 K1 x e: p" N
SET7: LCALL DISPLAY ;等待调小时按键时时钟显示用
8 q0 }% |# _6 z) ]' t+ u mAJMP SET6
% P3 D' X# ~7 ^3 n# H* j' a% gSETOUT1: LCALL DISPLAY ;退出时钟调整时键开释等待
1 p U& B# r- A7 y0 s& vAJMP SETOUT ;防止键按下时无时钟显示
. A, d5 A. S z1 \8 c) i; `7 O$ k- o;) A9 T6 M, |, u4 n8 S2 {7 I9 g
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3 O0 w% c6 C9 }5 }5 A2 G
;; 显示程序 ;;9 a0 J) x1 s/ T) x, y4 X
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ W6 a. r K1 m* A9 }# T$$$$$$$$$$$$$$$$$$$$$$$$$$$3 x/ P* r9 ]9 Q7 P/ v4 ~# r
;1MS延时程序,LED显示程序用
4 W* c& H: J. uDL1MS: MOV R6,#14H+ R- ^, D4 d: Q. S
DL1: MOV R7,#19H+ U' h9 {+ e/ V7 `
DL2: DJNZ R7,DL2
. f$ _ y: v g3 _. O0 s, W( n0 nDJNZ R6,DL1
( D: N0 Z( x2 D% R. u1 VRET
6 J% h6 r( U* W e8 J" j;20MS延时程序,采用调用显示子程序以改善LED的显示闪烁现象0 d4 }* l) t; U" j
DS20MS: ACALL DISPLAY
$ j6 l0 i1 k4 F" O0 E$ hACALL DISPLAY" L8 ]8 ~- H) a5 n+ |6 t
ACALL DISPLAY
# Y3 ~6 B& k9 g+ a+ W4 B2 @RET
y5 Q+ u8 m$ a;延时程序,用作按键时间的长短判定
0 C& m+ U- Q, N5 B ^; x3 kDL1S: LCALL DL05S
( i$ X7 ~! T, e& P" |2 W4 o& [LCALL DL05S
) h; `$ Z# t- t* \5 Q5 ?RET
. R/ \5 `+ O0 \9 ADL05S: MOV R3,#20H ;8毫秒*32=0.196秒/ R/ q- q1 h# g! I9 Q4 ?; M
DL05S1: LCALL DISPLAY6 f ]; b& A: {; q
DJNZ R3,DL05S1& |+ d# z$ m' q6 e" K- F0 b8 g- }/ d
RET1 Y. c+ t9 p0 K4 F) b, a
END ;程序结束; [7 m! o" D, S
|