51单片机作的电子钟程序在很多地方已经有了介绍, 对于单片机学习者而言这个程序基本上是一道门槛,掌握了电子钟程序, 基本上可以说51单片机就掌握了80%。常见的电子钟程序由显示部分, 计算部分, 时钟调整部分构成。
7 k0 j/ }) ^+ w9 ?$ g 时钟的基本显示原理:时钟开始显示为0时0分0秒,也就是数码管显示000000,然后每秒秒位加1 ,到9后,10秒位加1,秒位回0。10秒位到5后,即59秒 ,分钟加1,10秒位回0。依次类推,时钟最大的显示值为23小时59分59秒。这里只要确定了1秒的定时时间, 其他位均以此为基准往上累加。 $ ]: v8 Z! a" p1 {
开始程序定义了秒, 十秒, 分, 十分,小时, 十小时,共6位的寄存器, 分别存在30h,31h,32h,33h,34h,35h单元,便于程序以后调用和理解。 8 Y- j8 M+ |5 i* H) A
6个数码管分别显示时、分、秒,一个功能键,可以切换调整时分秒、增加数值、熄灭节电等功能全部集一键。![]()
' w! |8 J. ^7 |5 K. l! e% b8 ^: g2 E5 g
3 l$ `8 W$ }+ W6 ?, v
% g w8 Y; Q( E1 W( i 以下是部分汇编源程序,购买我们产品后我们用光盘将完整的单片机汇编源程序和烧写文件送给客户。 j9 m$ p. v/ U: q
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6 W2 @4 h4 s# t6 \0 `9 m
;; 中断入口程序 ;; (仅供参考)
0 b! K7 ~0 ?: p& e/ ^% z' C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;' w+ |- K+ v" _! I# J
;9 N4 U. m4 p6 Q9 Y* Q7 R3 o
ORG 0000H ;程序执行开始地址; ?. B% m) ~' v/ R8 r) _; z
LJMP START ;跳到标号START执行
: j1 }/ o9 b% d9 H9 @0 r/ }3 yORG 0003H ;外中断0中断程序入口
3 M7 \& S& Z+ j1 T" oRETI ;外中断0中断返回" e% x/ u+ x- Y8 Y
ORG 000BH ;定时器T0中断程序入口4 a. [# h9 ~6 t8 u' K( e
LJMP INTT0 ;跳至INTTO执行% r# i3 U& K' N7 Q0 V" X
ORG 0013H ;外中断1中断程序入口! q% `0 b2 f$ i4 c
RETI ;外中断1中断返回
- t- I4 L& }" y0 J% E% jORG 001BH ;定时器T1中断程序入口
0 z% [( ]9 @) ^! |- q2 dLJMP INTT1 ;跳至INTT1执行& [' d @1 d- R( V c) p
ORG 0023H ;串行中断程序入口地址
- ]: K$ m8 y! A( Z9 [RETI ;串行中断程序返回
/ m+ z& m/ Y- @! v9 {" ^;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
( L$ c2 ^" E0 s% P9 S- G% S;; 主 程 序 ;;
' K5 F' g) h1 F# E% B3 U2 o;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2 b8 v% J4 V8 y' }; w
;
. Q( I4 C% x' v& WSTART: MOV R0,#70H ;清70H-7AH共11个内存单元& z6 P5 z9 E: T. H
MOV R7,#0BH 2 U9 i8 W* O1 d
;clr P3.7 ;$ e7 H Y* b/ `) k3 m1 l% y- I4 R" j
CLEARDISP: MOV @R0,#00H ;
* c0 K, z& }# Z2 R& MINC R0 ;5 V# j3 y' Y5 I+ h1 B
DJNZ R7,CLEARDISP ;
5 \1 f: \$ t9 CMOV 20H,#00H ;清20H(标志用)* o: c0 f' _ f6 S; {( a
MOV 7AH,#0AH ;放入"熄灭符"数据+ `- ?' C) a/ P. C. A& V
MOV TMOD,#11H ;设T0、T1为16位定时器( _' g) G1 {" n; o1 ^
MOV TL0,#0B0H ;50MS定时初值(T0计时用)
# _, x% x+ K O# Z1 N, AMOV TH0,#3CH ;50MS定时初值5 P5 Z- \0 M& L; g/ `" C
MOV TL1,#0B0H ;50MS定时初值(T1闪烁定时用)
: q1 B1 B) ]6 ^2 s$ W) Q6 AMOV TH1,#3CH ;50MS定时初值2 z) e- _8 }+ m. ^0 \, z: W1 u$ M
SETB EA ;总中断开放) d/ i. T+ `$ ^3 ^- G; S
SETB ET0 ;答应T0中断7 \+ {, O* j1 m! M( I8 |
SETB TR0 ;开启T0定时器
' k9 r5 G1 w/ _4 |) x# LMOV R4,#14H ;1秒定时用初值(50MS×20)
4 g. S: R$ O8 q( G6 R. d w! f8 ]* Q. ZSTART1: LCALL DISPLAY ;调用显示子程序' \0 M5 n4 w! M& Y# E9 M
JNB P3.7,SETMM1 ;P3.7口为0时转时间调整程序 $ d5 n$ W) c7 V4 \8 C# Z: u
SJMP START1 ;P3.7口为1时跳回START1, I' A2 x0 s- F. s" K
SETMM1: LJMP SETMM ;转到时间调整程序SETMM. l% t* s5 j9 Q7 |1 q# o( B9 T+ Z
;
6 y2 f% h0 ^0 q' w;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;) d2 U ^, C8 E: ^
;; 1秒计时程序 ;;, v9 [) r' e+ J* V
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4 h6 H, ?) G# s( l4 c;T0中断服务程序
( L/ ~% L. v2 C& ~. F$ |, e5 xINTT0: PUSH ACC ;累加器入栈保护4 d$ w! v: K% ^9 \4 |4 s7 m
PUSH PSW ;状态字入栈保护3 I+ ]2 M; Z% n7 `2 `3 R% z" `9 n9 {
CLR ET0 ;关T0中断答应% x4 L8 O: S* f* B5 ^; V
CLR TR0 ;封闭定时器T0
/ x4 B( t' X! g: _$ a7 `, a& o0 D9 b# DMOV A,#0B7H ;中断响应时间同步修正
0 w4 M, g* Y1 LADD A,TL0 ;低8位初值修正
3 ^ a7 f& q" s$ [- [MOV TL0,A ;重装初值(低8位修正值)
4 m) f+ T" @1 i1 _. eMOV A,#3CH ;高8位初值修正
u) e& p: E1 n( L. p7 K5 |: Y/ _ADDC A,TH0 ;" p$ e7 I2 h& M, U
MOV TH0,A ;重装初值(高8位修正值)
: T! X n5 X# X! Z2 r3 uSETB TR0 ;开启定时器T06 G! E/ p/ P5 Z" N5 n' |. w' `
DJNZ R4, OUTT0 ;20次中断未到中断退出$ @" P+ s0 d6 u$ i
ADDSS: MOV R4,#14H ;20次中断到(1秒)重赋初值# T+ w/ g9 ~2 I7 S5 t
MOV R0,#71H ;指向秒计时单元(71H-72H)
' ^. o" o, q: T: J2 T* [/ v) R, pACALL ADD1 ;调用加1程序(加1秒操作)
4 j0 P* i' N; {) jMOV A,R3 ;秒数据放入A(R3为2位十进制数组合), ]$ ]- j1 v- v& j
CLR C ;清进位标志
4 m" _* p! G. F' @8 vCJNE A,#60H,ADDMM ;/ @$ B6 z; K) U6 }# X# p1 @5 ]
ADDMM: JC OUTT0 ;小于60秒时中断退出
5 d0 T" n2 ~: f4 \7 l$ i; XACALL CLR0 ;大于或即是60秒时对秒计时单元清0, h" Q3 J8 F m1 t+ b; q( ]& f8 a
MOV R0,#77H ;指向分计时单元(76H-77H)/ v; Q# k1 s' X" ]& c
ACALL ADD1 ;分计时单元加1分钟8 s% l; y5 I. N3 T' p" I
MOV A,R3 ;分数据放入A* o+ e; X1 f" N, k
CLR C ;清进位标志% r& }- s1 s( @, t4 O
CJNE A,#60H,ADDHH ;
3 R6 u/ [) k" u$ |/ mADDHH: JC OUTT0 ;小于60分时中断退出7 x7 o3 J6 N7 }1 {& t/ a
ACALL CLR0 ;大于或即是60分时分计时单元清06 a: i, b6 F& h0 e
MOV R0,#79H ;指向小时计时单(78H-79H) X( J. h7 i5 h$ ?* \4 K
ACALL ADD1 ;小时计时单元加1小时
9 a0 E) e o2 p& a1 }+ T' iMOV A,R3 ;时数据放入A! `* A$ ~, _$ s. j
CLR C ;清进位标志2 m! q5 Q% M e* R! C( c
CJNE A,#24H,HOUR ;
6 x$ E5 F; D+ m/ b! e' d% y' XHOUR: JC OUTT0 ;小于24小时中断退出
" H5 U: [- _2 ]! aACALL CLR0 ;大于或即是24小时小时计时单元清0' D2 N3 E7 }; O( N
OUTT0: MOV 72H,76H ;中断退出时将分、时计时单元数据移+ K7 K& q% L! ]7 z! L' ~2 I0 C9 P
MOV 73H,77H ;入对应显示单元' q. l& E1 T2 y
MOV 74H,78H ;' f! D" J) E- ^( j7 H" y0 \
MOV 75H,79H ;
' _6 m$ Y$ ]: {* L" I' h0 _$ u, GPOP PSW ;恢复状态字(出栈)
1 y" |0 V0 o$ c+ t6 }" SPOP ACC ;恢复累加器* J7 D- x) V6 e" _ U
SETB ET0 ;开放T0中断
# A$ s# y$ Z6 t5 yRETI ;中断返回9 q- F9 _! _7 x; I" j
;4 x3 J1 S9 i( t! u% y
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
! I% N7 r$ k5 \8 c$ U;; 闪动调时 程 序 ;;0 g: g- j( Y3 G1 T% D! J7 d: s
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;, \, |* R3 g' M5 k4 u k1 ~
;T1中断服务程序,用作时间调整时调整单元闪烁指示
- Q: V8 e3 l) ] N ^& Z) P3 o2 d' PINTT1: PUSH ACC ;中断现场保护
. q: S9 W: _/ \' V5 TPUSH PSW ;; M4 \6 M% ^1 H0 t: y
MOV TL1, #0B0H ;装定时器T1定时初值
) d2 a* @5 k3 F; E% a- o8 ~% t" Q7 QMOV TH1, #3CH ;* d1 C& \/ e& Z% Q/ a( J$ E
DJNZ R2,INTT1OUT ;0.3秒未到退出中断(50MS中断6次)
( {/ h7 d+ C* z% K7 Z/ AMOV R2,#06H ;重装0.3秒定时用初值
4 d. Q* C9 p' ZCPL 02H ;0.3秒定时到对闪烁标志取反* O% F/ t1 |* q( D/ y
JB 02H,FLASH1 ;02H位为1时显示单元"熄灭"
* i, D; q% ]- Q: G' c UMOV 72H,76H ;02H位为0时正常显示2 f: k$ c# W0 r* ~5 V% b/ C
MOV 73H,77H ;% _+ r5 I2 w4 ] N8 }9 ?) I
MOV 74H,78H ;4 G) s7 a0 ~4 [3 `" n, n7 _9 \" P
MOV 75H,79H ;6 m4 t* W" e: d0 s
INTT1OUT: POP PSW ;恢复现场0 w! j3 m/ p8 d/ z+ w; [! {$ u
POP ACC ;* R7 c- e9 q7 U
RETI ;中断退出
0 P% ?/ y: \$ F" n+ JFLASH1: JB 01H,FLASH2 ;01H位为1时,转小时熄灭控制/ n, g9 T, M8 x
MOV 72H,7AH ;01H位为0时,"熄灭符"数据放入分
7 C8 L! P& \4 H4 O/ z, fMOV 73H,7AH ;显示单元(72H-73H),将不显示分数据% w6 j3 Q( W2 ~, ^: p5 K- }9 O' s
MOV 74H,78H ;
* n% h: j' a% B8 S7 I& CMOV 75H,79H ;
- L! h, E8 f6 q, ]3 [, ~AJMP INTT1OUT ;转中断退出
N+ o6 r. s- j2 b+ W$ _FLASH2: MOV 72H,76H ;01H位为1时,"熄灭符"数据放入小时
4 K( F! a; ~, @; g; W( t# A9 qMOV 73H,77H ;显示单元(74H-75H),小时数据将不显示$ R' S- }: x3 }0 T
MOV 74H,7AH ;
2 h* [8 O0 `2 VMOV 75H,7AH ;
4 y# o9 t4 }! q& h5 A8 X5 }6 lAJMP INTT1OUT ;转中断退出! s! o8 S4 V/ a5 _
;* x. ?% g" C7 |9 l
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7 f4 J( l- ^" g9 _* p
;; 加1子 程 序 ;;
& m: J7 A' y& x* R+ h3 P$ g;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;. N* R- Q6 d6 p% s' |
;: \7 C8 H9 U( `) S/ ^, n
ADD1: MOV A,@R0 ;取当前计时单元数据到A; ~, ~2 X; O" ?0 G& g4 O# i' L
DEC R0 ;指向前一地址
; U$ x: x! Z; j" k- i/ ISWAP A ;A中数据高四位与低四位交换
+ T* f8 {$ `. S6 |' GORL A,@R0 ;前一地址中数据放入A中低四位
/ ?, x8 D. b/ Y5 R& D' OADD A,#01H ;A加1操作
7 U0 i7 U1 m8 ?7 o8 ^+ S9 E4 dDA A ;十进制调整9 S7 @4 [1 P$ T8 H$ _) j' F. [
MOV R3,A ;移入R3寄存器
; Q. m& s- t3 \ANL A,#0FH ;高四位变0
1 d; [; T" s+ W" R1 F% Q& FMOV @R0,A ;放回前一地址单元
' S( O0 c! y) d( {* G" M# LMOV A,R3 ;取回R3中暂存数据
. V5 V8 Z! U# K. W' F' lINC R0 ;指向当前地址单元
6 t8 a. G, c6 O1 K# a6 cSWAP A ;A中数据高四位与低四位交换
# F, b2 R( j! f" x1 a$ V$ ^ANL A,#0FH ;高四位变0
; `: u) e7 J8 tMOV @R0,A ;数据放入当削地址单元中# s- E" b1 z$ e+ `+ s8 x% t
RET ;子程序返回8 a9 V) P! B; L" X1 x
;
2 ~! ?6 V4 u5 U;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
$ U3 x- D* o9 C% w8 n9 E" b;; 清零程序 ;;
) B2 m+ E5 _0 p, {3 O;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
6 s j/ Q' O* ?;.............# {" Q8 T2 e* k7 X. j, g8 M
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;# }/ C5 v4 D7 Y0 F1 a" C9 N. U
;; 时钟调整程序 ;;
+ e# c+ i: U$ t) e;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;. Q( b; v3 s: l3 U' _
;当调时按键按下时进入此程序$ ^- m8 z, C) \% m& K
SETMM: cLR ET0 ;关定时器T0中断# W9 q) r `: z" E1 {6 ?, w
CLR TR0 ;封闭定时器T0
& p7 ^3 `2 D+ X- ]- K. rLCALL DL1S ;调用1秒延时程序
) N) y) F# G: G) JJB P3.7,CLOSEDIS ;键按下时间小于1秒,封闭显示(省电)
8 `6 ?8 b" I+ o7 j! mMOV R2,#06H ;进入调时状态,赋闪烁定时初值
1 Q# g, E7 k1 R+ p' @SETB ET1 ;答应T1中断; _3 V9 p; G6 T, P
SETB TR1 ;开启定时器T1* k& g- y4 e! V0 d L) w+ r+ Z
SET2: JNB P3.7,SET1 ;P3.7口为0(键未开释),等待: \8 D& n2 o' z3 R; t) r
SETB 00H ;键开释,分调整闪烁标志置1" S6 R+ m$ f6 f( H. n8 G: N
SET4: JB P3.7,SET3 ;等待键按下 m, g) w& {: N: z( d
LCALL DL05S ;有键按下,延时0.5秒7 h* l& m1 ]7 H4 P# v# A
JNB P3.7,SETHH ;按下时间大于0.5秒转调小时状态
* l- S. E. ~% T6 C% r! XMOV R0,#77H ;按下时间小于0.5秒加1分钟操作4 |9 m( w2 m# n! j& Q3 t) s4 D
LCALL ADD1 ;调用加1子程序6 j% l- d4 e0 ?/ \! i- c
MOV A,R3 ;取调整单元数据
8 a* z# r& t, i/ }" c$ JCLR C ;清进位标志( N5 V' N9 s7 y
CJNE A,#60H,HHH ;调整单元数据与60比较 Q5 v! w6 H4 @) {" W, T& _
HHH: JC SET4 ;调整单元数据小于60转SET4循环( d+ b z, o+ T( d. {8 J- a0 N& j1 T
LCALL CLR0 ;调整单元数据大于或即是60时清0" u6 K2 Z; B7 s' E. {) e5 L$ l" W
CLR C ;清进位标志
0 K- F7 A4 b. U( Q8 \/ N0 Y7 TAJMP SET4 ;跳转到SET4循环) H v9 _& [2 ?% T: ?+ }- y
CLOSEDIS: SETB ET0 ;省电(LED不显示)状态。开T0中断
' T8 g1 Y: T. J; c" R- HSETB TR0 ;开启T0定时器(开时钟)4 ? B; C1 j4 w% j# \
CLOSE: JB P3.7,CLOSE ;无按键按下,等待。9 O2 J" U' U1 T5 A. X" }* z Z4 f
LCALL DISPLAY ;有键按下,调显示子程序延时削抖& G8 O* D" _% j5 P! T; h) K$ j6 P8 O, C
JB P3.7,CLOSE ;是干扰返回CLOSE等待
, R$ `( Z# c6 F% D1 _ c: eWAITH: JNB P3.7,WAITH ;等待键开释, G4 a' ^# R3 R# D: \; _+ T2 @
LJMP START1 ;返回主程序(LED数据显示亮)
0 q2 k( E+ _. RSETHH: CLR 00H ;分闪烁标志清除(进入调小时状态)( D* c6 J6 m- R/ H* ?
SETHH1: JNB P3.7,SET5 ;等待键开释
" H k$ _4 {- vSETB 01H ;小时调整标志置1
; \" [, h# p0 a; W6 D4 s; nSET6: JB P3.7,SET7 ;等待按键按下
' ?! }) N2 `. @$ Q* hLCALL DL05S ;有键按下延时0.5秒
* R7 R ~( V; V) U+ A# ~JNB P3.7,SETOUT ;按下时间大于0.5秒退出时间调整
- {* G: h( y- b6 @: x3 t: r) H/ cMOV R0,#79H ;按下时间小于0.5秒加1小时操作
# r: H4 P, b0 t- y( Z* [LCALL ADD1 ;调加1子程序3 r. g) C. e$ L
MOV A,R3 ;
! f4 R% X% M6 o, p; y+ ?+ v3 KCLR C ;9 w# v% d2 C$ ^
CJNE A,#24H,HOUU ;计时单元数据与24比较0 t) `/ M( N) h+ x8 v
HOUU: JC SET6 ;小于24转SET6循环% W) S1 F" j7 l* [( i& Q. d3 }* B
LCALL CLR0 ;大于或即是24时清0操作4 V* l: c2 X% a8 w
AJMP SET6 ;跳转到SET6循环5 N- g% q8 F4 J7 G. a+ g
SETOUT: JNB P3.7,SETOUT1 ;调时退出程序。等待键开释
2 |" y1 F, p. x- ?4 ?- Q8 D9 YLCALL DISPLAY ;延时削抖4 S/ Y% @+ W9 N, i$ x: J" g2 ?9 U
JNB P3.7,SETOUT ;是抖动,返回SETOUT再等待
" f! o% u9 [( g- P1 s/ rCLR 01H ;清调小时标志% A0 W; T' k' D
CLR 00H ;清调分标志: d8 ~% j) H( s! P
CLR 02H ;清闪烁标志& K0 N) o: J' V w' o
CLR TR1 ;封闭定时器T1
& h& m R$ G, U1 `" L7 K+ N6 }CLR ET1 ;关定时器T1中断
9 d4 S1 `' X n2 P6 W4 A4 RSETB TR0 ;开启定时器T0. Q' @3 G' v$ U4 D d. O& j
SETB ET0 ;开定时器T0中断(计时开始)4 e& J5 {- s7 d( t( b- N3 D
LJMP START1 ;跳回主程序8 a U$ p" _- ~$ S9 d
SET1: LCALL DISPLAY ;键开释等待时调用显示程序(调分)
9 L. c2 ^/ p @6 K9 r7 X1 ^AJMP SET2 ;防止键按下时无时钟显示
: g% g; `* j) h+ |SET3: LCALL DISPLAY ;等待调分按键时时钟显示用7 {8 V# U3 y }0 V, h
AJMP SET4/ |5 R) g$ I" ]- \ ^
SET5: LCALL DISPLAY ;键开释等待时调用显示程序(调小时)
0 P2 J# P9 k8 WAJMP SETHH1 ;防止键按下时无时钟显示
B5 R6 B$ N/ t( d) K3 LSET7: LCALL DISPLAY ;等待调小时按键时时钟显示用; w& q3 n/ l" I+ t! ^0 a
AJMP SET6+ ]! v# J v( _
SETOUT1: LCALL DISPLAY ;退出时钟调整时键开释等待" k- u/ m; S Z7 J
AJMP SETOUT ;防止键按下时无时钟显示
6 C7 z4 J" P6 ]0 O" p) [8 C/ i;4 ~2 e; t6 t1 V$ O
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
( a. D, [9 N& \9 m+ j# a7 |;; 显示程序 ;;
: Z1 y' Q' m5 t* y;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;) V: W; K0 q b( p$ Q |7 _
$$$$$$$$$$$$$$$$$$$$$$$$$$$
) ^# @1 G. C) }9 h;1MS延时程序,LED显示程序用& U2 n: r8 ?' A- O: N1 w
DL1MS: MOV R6,#14H
# h! C+ A( R, S# p% g' DDL1: MOV R7,#19H
/ J1 `# G& V! L) H2 gDL2: DJNZ R7,DL2
" W" W6 u1 W0 S) {9 s6 lDJNZ R6,DL1 p* F% M r, b. c8 x5 @) f( ?+ k
RET
# c9 x; H/ G" n/ d;20MS延时程序,采用调用显示子程序以改善LED的显示闪烁现象" T8 C6 b5 a3 S9 b: s
DS20MS: ACALL DISPLAY
" I& _* | ~' D; r3 E% Z) R5 lACALL DISPLAY
+ `" c" c3 w/ D' V# p1 BACALL DISPLAY- I* P3 y8 N) B! a2 W6 i6 I
RET
- X% t8 v3 Y" k;延时程序,用作按键时间的长短判定5 Y& x( m6 K: o+ Y: S2 {
DL1S: LCALL DL05S
# x' @; ?# F( F1 k3 s4 Y YLCALL DL05S
, X( E- p- z! [. ~0 o- ZRET0 F' v, J9 w) E( k6 s
DL05S: MOV R3,#20H ;8毫秒*32=0.196秒7 S. E% A, Q) H5 s( T3 e
DL05S1: LCALL DISPLAY
& \ v/ E2 L! d7 _DJNZ R3,DL05S1
. x* {: X$ E: `* h# ARET; r- C8 @: {( t- W+ u, @
END ;程序结束( g# _' _* o- N, U! |+ h B1 R
|