51单片机作的电子钟程序在很多地方已经有了介绍, 对于单片机学习者而言这个程序基本上是一道门槛,掌握了电子钟程序, 基本上可以说51单片机就掌握了80%。常见的电子钟程序由显示部分, 计算部分, 时钟调整部分构成。
H2 @+ I* g$ D% g7 l 时钟的基本显示原理:时钟开始显示为0时0分0秒,也就是数码管显示000000,然后每秒秒位加1 ,到9后,10秒位加1,秒位回0。10秒位到5后,即59秒 ,分钟加1,10秒位回0。依次类推,时钟最大的显示值为23小时59分59秒。这里只要确定了1秒的定时时间, 其他位均以此为基准往上累加。
* x1 a. a. f& ~0 { 开始程序定义了秒, 十秒, 分, 十分,小时, 十小时,共6位的寄存器, 分别存在30h,31h,32h,33h,34h,35h单元,便于程序以后调用和理解。
& m- D" H* J; J) } 6个数码管分别显示时、分、秒,一个功能键,可以切换调整时分秒、增加数值、熄灭节电等功能全部集一键。![]()
- t% q- K% D+ `& q1 Q, o l
7 O8 j% c9 I" O9 ?2 B . e7 Z, ~0 T( H
9 E5 t+ ~& A3 J
以下是部分汇编源程序,购买我们产品后我们用光盘将完整的单片机汇编源程序和烧写文件送给客户。7 k! Y ]% W6 q7 o, \1 v# a
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;! y8 h( @" H9 w$ U0 u
;; 中断入口程序 ;; (仅供参考)& q+ d- A/ x$ H% [) E
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
) `! l/ j) L! [$ K% {;. h/ {# e7 N, o( y
ORG 0000H ;程序执行开始地址
0 C @: m3 X, n% E) i0 cLJMP START ;跳到标号START执行
( h. d5 c/ ~. E- b$ @9 [ORG 0003H ;外中断0中断程序入口
# h' B2 R3 ?2 d/ k2 ]' a" ]$ |RETI ;外中断0中断返回
. J, x' n" X) i# r' m9 F2 D# RORG 000BH ;定时器T0中断程序入口, }3 Y! V) `* t3 G1 o( ]8 W
LJMP INTT0 ;跳至INTTO执行
( y3 O) x; O! l* M$ EORG 0013H ;外中断1中断程序入口/ X: N' M; u+ M; P2 h; }( P
RETI ;外中断1中断返回; g, r0 T+ r8 j" V7 [; u
ORG 001BH ;定时器T1中断程序入口
1 _4 a4 k1 i7 O1 ZLJMP INTT1 ;跳至INTT1执行4 `# L }; ~& N1 G3 u, f ?
ORG 0023H ;串行中断程序入口地址
$ V) z- p1 S& [% `# m% I" ]RETI ;串行中断程序返回
W7 u2 b9 s# ?' t0 M; u9 m;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
8 ]% P# k) l" g6 Z. A* Z;; 主 程 序 ;;; S2 T& |: P" B7 ]! P5 D! u
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4 z& `8 }9 m4 b* c. i6 J7 O' a, n: O
;! A! P. F) E, ~+ p) u7 W5 e& U! b
START: MOV R0,#70H ;清70H-7AH共11个内存单元) F) s7 C) D7 t2 E t
MOV R7,#0BH
0 c. \9 l4 r9 r( B# T;clr P3.7 ;
3 E, E$ P* E! C W$ R- fCLEARDISP: MOV @R0,#00H ;
. X, |; H6 N; j$ v6 y/ U: Y5 M3 @INC R0 ;
* L# u$ W8 `5 q8 p9 l, B1 EDJNZ R7,CLEARDISP ;
' c0 L5 r0 R/ i0 d2 L& I3 k+ bMOV 20H,#00H ;清20H(标志用)
3 W* X- E" H% U f2 B5 }MOV 7AH,#0AH ;放入"熄灭符"数据
4 l" O9 u( q5 v5 m: OMOV TMOD,#11H ;设T0、T1为16位定时器6 E& o1 y1 l" u2 k5 I, |
MOV TL0,#0B0H ;50MS定时初值(T0计时用)
! C2 X4 @1 @6 W3 m9 {MOV TH0,#3CH ;50MS定时初值6 `2 s! E$ a; |) T+ J* L
MOV TL1,#0B0H ;50MS定时初值(T1闪烁定时用)
: R- X, @- J/ C5 X8 Z- AMOV TH1,#3CH ;50MS定时初值
8 ]3 \8 |) g7 n1 QSETB EA ;总中断开放: g5 F" m2 t. G. k4 C0 s8 y
SETB ET0 ;答应T0中断
# O7 b+ ~% Y% ]( v, p- x. \SETB TR0 ;开启T0定时器
7 H Y* f" }; e, U% yMOV R4,#14H ;1秒定时用初值(50MS×20), Q: x/ a, Z6 ?5 g
START1: LCALL DISPLAY ;调用显示子程序
4 N$ t6 _ @8 G [- IJNB P3.7,SETMM1 ;P3.7口为0时转时间调整程序
+ c- h* x: ~$ M/ i0 Y" }SJMP START1 ;P3.7口为1时跳回START1) w+ G; G3 u2 n8 J7 n* f8 t
SETMM1: LJMP SETMM ;转到时间调整程序SETMM
4 K4 ]. [% C) y' A5 ?9 _. k;
. f! S6 G! p, J# v3 t0 q( f$ d;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; S5 }0 b& y9 @2 Z/ a7 F
;; 1秒计时程序 ;;$ c+ ^8 i a: W" ?
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2 b) i7 ]! y* Q7 e# r* R7 j$ I+ q;T0中断服务程序
5 a! e0 \1 V9 O& d! u; H+ XINTT0: PUSH ACC ;累加器入栈保护
6 F, z8 U+ v$ Q# f7 {8 NPUSH PSW ;状态字入栈保护
/ `) A4 K7 h8 v6 Z+ [CLR ET0 ;关T0中断答应& [6 X5 R/ d: o7 K2 k
CLR TR0 ;封闭定时器T0
d% E0 ^7 M; d+ a& u. ^, S1 z, HMOV A,#0B7H ;中断响应时间同步修正
0 v+ }+ T' ]/ w" I- S/ ]0 D, JADD A,TL0 ;低8位初值修正" C" i0 Z6 K- f, `/ r, O0 a
MOV TL0,A ;重装初值(低8位修正值)+ L& x, Q/ l) w
MOV A,#3CH ;高8位初值修正
1 {9 n. d) L9 p; e( [ADDC A,TH0 ;9 k: o7 Z8 D& Z
MOV TH0,A ;重装初值(高8位修正值)5 x6 F' R0 |1 c& K' j: N% k- S
SETB TR0 ;开启定时器T0. g) f) g. N/ ]. J/ G
DJNZ R4, OUTT0 ;20次中断未到中断退出
% F! d/ D( L( z4 g( R8 H9 `5 U) m& MADDSS: MOV R4,#14H ;20次中断到(1秒)重赋初值( U# V; s9 ` Y9 A
MOV R0,#71H ;指向秒计时单元(71H-72H)/ M' u9 w0 ]8 c: Y; R. G
ACALL ADD1 ;调用加1程序(加1秒操作) i5 ^2 r2 D: I
MOV A,R3 ;秒数据放入A(R3为2位十进制数组合)2 P7 @& X2 `5 O9 P7 z
CLR C ;清进位标志. k" a: _% E5 q5 }! W/ O
CJNE A,#60H,ADDMM ;
# X1 _8 A( `5 W! [- GADDMM: JC OUTT0 ;小于60秒时中断退出! j& v% x1 I7 l
ACALL CLR0 ;大于或即是60秒时对秒计时单元清0
G) n7 y& z2 }! oMOV R0,#77H ;指向分计时单元(76H-77H)
* o+ B& f9 l/ q) ?4 lACALL ADD1 ;分计时单元加1分钟2 k8 _$ o' g7 R* B: h4 {0 B
MOV A,R3 ;分数据放入A) d7 R! g( A* Z8 B2 p5 R$ [* }
CLR C ;清进位标志
7 [( {" `# a& Q# F L% G: w4 }CJNE A,#60H,ADDHH ;
& J/ Q% R. G, d6 uADDHH: JC OUTT0 ;小于60分时中断退出! e. ~2 y' Y7 h: Y
ACALL CLR0 ;大于或即是60分时分计时单元清0& _2 T2 H* D' ]# c
MOV R0,#79H ;指向小时计时单(78H-79H), ^5 ]2 ~4 V- j2 j9 Q
ACALL ADD1 ;小时计时单元加1小时
& d. q0 D/ E! m) M7 `MOV A,R3 ;时数据放入A
; \* a7 y" w& J4 qCLR C ;清进位标志
# ]& J" Z" t8 bCJNE A,#24H,HOUR ;
( e& C5 V4 Y! @* w8 P' OHOUR: JC OUTT0 ;小于24小时中断退出
! [+ S; T- }8 mACALL CLR0 ;大于或即是24小时小时计时单元清07 x6 h- D: |% G3 ?5 U
OUTT0: MOV 72H,76H ;中断退出时将分、时计时单元数据移
/ l' ^* {* w7 ^9 N4 R7 j4 SMOV 73H,77H ;入对应显示单元2 k7 v7 R+ Z) {# B# u8 C/ @
MOV 74H,78H ;( y. m! ]1 E9 P$ c
MOV 75H,79H ;
) y* F9 t' [! M6 T8 KPOP PSW ;恢复状态字(出栈): T" `# O3 Z. t. w# O
POP ACC ;恢复累加器2 ^; @9 X( P2 p8 ?" x( }
SETB ET0 ;开放T0中断% P/ v4 X( g$ G9 G" F+ j
RETI ;中断返回9 M0 \: g- m( Y$ n: i0 W, E# I$ C# K
;3 l& H! |; {2 f6 C7 C2 R7 S. P& L
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4 q3 i8 }9 N9 C2 S6 k# N
;; 闪动调时 程 序 ;;
- b5 j' C) u8 i- C# {+ a;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
9 Z- T8 F# d2 N; T% q7 Z f;T1中断服务程序,用作时间调整时调整单元闪烁指示9 Q- f. {2 B& v' Q+ h$ b9 B7 \
INTT1: PUSH ACC ;中断现场保护
6 n7 W7 V6 K9 N( L- VPUSH PSW ;
# t$ N% k Y& H9 H% c1 e3 j; gMOV TL1, #0B0H ;装定时器T1定时初值
+ L% _3 m, u; m( r' V( I* a4 V' X. uMOV TH1, #3CH ;
* d' v2 v9 k. i5 ^% G3 v/ sDJNZ R2,INTT1OUT ;0.3秒未到退出中断(50MS中断6次)
: L* r% f1 n' X2 o# q3 y. e5 K1 xMOV R2,#06H ;重装0.3秒定时用初值; \8 H* z' O% i) x6 G' a
CPL 02H ;0.3秒定时到对闪烁标志取反* j6 ?" U8 {4 L4 z
JB 02H,FLASH1 ;02H位为1时显示单元"熄灭"
* Z; K6 g) F p( R, t8 NMOV 72H,76H ;02H位为0时正常显示
J7 I' m2 I6 a* n, kMOV 73H,77H ;
# ^; o3 Z" |( g& x7 T& H2 V' QMOV 74H,78H ;
5 c4 A" B: r$ \5 ZMOV 75H,79H ;0 b, C2 V/ U4 h; u
INTT1OUT: POP PSW ;恢复现场
& ]9 F$ Q( y4 N# H6 PPOP ACC ;
% U1 s' V; z+ \2 VRETI ;中断退出3 D+ v3 b9 W" X V: P6 ?. N+ _
FLASH1: JB 01H,FLASH2 ;01H位为1时,转小时熄灭控制& J9 S0 j0 j; i# N% W
MOV 72H,7AH ;01H位为0时,"熄灭符"数据放入分
! _& _+ v5 [; X9 fMOV 73H,7AH ;显示单元(72H-73H),将不显示分数据9 E- y9 b p# u2 F( m9 }+ `
MOV 74H,78H ;* O6 U1 k5 ?: D
MOV 75H,79H ;
- n7 [( G4 A. X' AAJMP INTT1OUT ;转中断退出7 }( l+ [; o" l, V+ J; ]3 \
FLASH2: MOV 72H,76H ;01H位为1时,"熄灭符"数据放入小时
( a+ X0 }( b1 @5 E+ D: nMOV 73H,77H ;显示单元(74H-75H),小时数据将不显示8 Y6 _* M7 }( s" n% A6 J
MOV 74H,7AH ;1 M, s. _ U$ V* Y; Q V
MOV 75H,7AH ;* V7 t8 M+ v7 m* m! G3 y5 ?4 B2 L
AJMP INTT1OUT ;转中断退出* P% c) n/ x# M
;
, [4 d ?& h6 g N5 m Z% R* G7 c;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
5 c# r. D& X5 R. p4 Q' k. I6 J; Q;; 加1子 程 序 ;;
# V9 T* K4 G, u: x;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1 Z7 R4 P' P6 |$ M
;% @1 _2 ]" J; J4 k
ADD1: MOV A,@R0 ;取当前计时单元数据到A& c3 V8 l7 Y+ Y, Y; T+ J
DEC R0 ;指向前一地址
8 z' }- e8 L, tSWAP A ;A中数据高四位与低四位交换* N9 D/ j% Y) }9 {- g( C- h( m, O
ORL A,@R0 ;前一地址中数据放入A中低四位( t5 o# B* p+ D- p* @/ m# {5 u: W
ADD A,#01H ;A加1操作' |9 T+ y4 p, ^4 T8 S# [# ]
DA A ;十进制调整/ i% b$ ?9 }, \5 M5 g
MOV R3,A ;移入R3寄存器
& S2 q& J1 B7 D1 @2 dANL A,#0FH ;高四位变0
0 i6 P( ~& b9 t, s9 n* q0 oMOV @R0,A ;放回前一地址单元* t2 m: X8 _/ L9 p4 s S
MOV A,R3 ;取回R3中暂存数据
q6 y* ?2 t2 l' T+ M# C w0 IINC R0 ;指向当前地址单元
6 l I! D% x) ^6 f1 aSWAP A ;A中数据高四位与低四位交换
# |. l# y/ J9 ^* R7 SANL A,#0FH ;高四位变0% ^+ T, r3 K* y- d
MOV @R0,A ;数据放入当削地址单元中 y- {, E5 k& K
RET ;子程序返回# e' `6 V( {2 e: a
;( M/ `4 j# Y7 Y
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
, j3 j) v9 l- ^( ?6 c;; 清零程序 ;; e% i$ V& K/ C m
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
& [- j5 C4 I" A; M( V" m;.............
& `( q `( H& ?& T9 O/ E& y;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+ d4 V! p9 a0 I/ W; r
;; 时钟调整程序 ;;$ T. {& `2 x3 Q
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
, P1 D7 k/ k) l6 Y& x9 u5 m: E: Y;当调时按键按下时进入此程序4 y& p. B. N4 G/ X* h1 ?
SETMM: cLR ET0 ;关定时器T0中断9 S! A3 h: Q9 l) _3 J
CLR TR0 ;封闭定时器T0
5 P I% ?: v& I6 L- @LCALL DL1S ;调用1秒延时程序
% m0 ~1 h2 H4 v$ G; ]JB P3.7,CLOSEDIS ;键按下时间小于1秒,封闭显示(省电)
- |2 T- A* h& ]( }5 U e3 T8 ZMOV R2,#06H ;进入调时状态,赋闪烁定时初值4 h- l' Y( _: L
SETB ET1 ;答应T1中断
; w7 H, ?. N" `* }' W2 YSETB TR1 ;开启定时器T1) `7 D8 Y, M9 T6 j; m: j
SET2: JNB P3.7,SET1 ;P3.7口为0(键未开释),等待- k1 ] I+ ?) l% V: A( @
SETB 00H ;键开释,分调整闪烁标志置1: a7 v$ i% `; A: @% @7 h) O, n9 t
SET4: JB P3.7,SET3 ;等待键按下# F, E7 z4 K5 d( l/ a( `9 J
LCALL DL05S ;有键按下,延时0.5秒
3 u) O$ ~# E8 s9 ^5 F. `! l$ n3 s+ mJNB P3.7,SETHH ;按下时间大于0.5秒转调小时状态1 |0 h7 y7 h5 ]% r, ~- |0 }2 _: _
MOV R0,#77H ;按下时间小于0.5秒加1分钟操作
( q$ n! M4 X& V& ?LCALL ADD1 ;调用加1子程序
2 T5 l' F$ W" w. N9 r. EMOV A,R3 ;取调整单元数据
- n' b/ a/ N, @9 f0 v* V6 ]) l5 QCLR C ;清进位标志
; n2 b# c% l. u+ |" fCJNE A,#60H,HHH ;调整单元数据与60比较
1 l. X' A6 i3 c, U9 j* Q1 DHHH: JC SET4 ;调整单元数据小于60转SET4循环
$ {$ Z' o; h2 W( C' @LCALL CLR0 ;调整单元数据大于或即是60时清0
* {5 L) l) y2 \2 l) Z( d: ICLR C ;清进位标志
8 _* A. [! D; J# H2 J, sAJMP SET4 ;跳转到SET4循环
: R4 V- c+ x, L% r) }; N& ~CLOSEDIS: SETB ET0 ;省电(LED不显示)状态。开T0中断3 [+ w H0 S- c' b% Y5 [0 C
SETB TR0 ;开启T0定时器(开时钟)
/ g: I9 i" @: `+ x1 R3 u/ }* RCLOSE: JB P3.7,CLOSE ;无按键按下,等待。" e }* |" s7 n
LCALL DISPLAY ;有键按下,调显示子程序延时削抖/ E9 ~4 ?; E+ o% t- q3 B
JB P3.7,CLOSE ;是干扰返回CLOSE等待4 i4 {1 f' M$ ?
WAITH: JNB P3.7,WAITH ;等待键开释
0 ]- \* C! O" ~( K% c# dLJMP START1 ;返回主程序(LED数据显示亮)
) r- \- S. s& qSETHH: CLR 00H ;分闪烁标志清除(进入调小时状态)
' Y8 e r8 S5 E- c uSETHH1: JNB P3.7,SET5 ;等待键开释
+ W: z; f9 W( OSETB 01H ;小时调整标志置10 A1 I J4 g8 j7 ^, _$ x& M
SET6: JB P3.7,SET7 ;等待按键按下
) x u+ _: Y9 T8 O% V zLCALL DL05S ;有键按下延时0.5秒
9 F4 u% ? i2 j. P) q% f) O- r7 qJNB P3.7,SETOUT ;按下时间大于0.5秒退出时间调整6 Q2 G( @ D0 x- w6 W' f
MOV R0,#79H ;按下时间小于0.5秒加1小时操作( E5 q2 L* U( e
LCALL ADD1 ;调加1子程序
" f& s* _" H) j1 V8 ^4 kMOV A,R3 ;0 B/ h0 n, _1 j8 \ ^% y- G
CLR C ;
1 N, v' `+ E7 c; sCJNE A,#24H,HOUU ;计时单元数据与24比较! S) ?& Q6 ^' o# G; y
HOUU: JC SET6 ;小于24转SET6循环
- s2 s S( X5 d; L' a! f! SLCALL CLR0 ;大于或即是24时清0操作$ I( Q# T6 p- {8 K9 z1 g
AJMP SET6 ;跳转到SET6循环
N: t: c5 }: h' p2 f! ?1 l2 i4 }SETOUT: JNB P3.7,SETOUT1 ;调时退出程序。等待键开释9 ` ^2 U$ b; J4 _3 w3 p
LCALL DISPLAY ;延时削抖
# }" X8 S, j6 A6 tJNB P3.7,SETOUT ;是抖动,返回SETOUT再等待
+ {& o3 w; ~8 m) n: _- _CLR 01H ;清调小时标志8 {% N( Q5 y8 `. Y2 Y1 v2 Z
CLR 00H ;清调分标志
4 t! M4 t! M! p& r0 \CLR 02H ;清闪烁标志5 P, Z- i! z# O4 t3 m
CLR TR1 ;封闭定时器T1
, A7 d& s7 @ D, T H4 x8 z8 ^CLR ET1 ;关定时器T1中断9 \$ T- }" U; j; b
SETB TR0 ;开启定时器T09 x1 W+ Y1 B. C, C
SETB ET0 ;开定时器T0中断(计时开始)
! c3 h7 e: |8 G o1 m6 Z* i9 t) B: ALJMP START1 ;跳回主程序' Z7 E7 c6 B1 _ ^6 Q7 U
SET1: LCALL DISPLAY ;键开释等待时调用显示程序(调分)
& V* ]1 i- X5 H3 P# |% n( Z; kAJMP SET2 ;防止键按下时无时钟显示' r, R" Q* f$ t- ~1 W# `, D
SET3: LCALL DISPLAY ;等待调分按键时时钟显示用
% k. S6 `, P6 B& Z- n2 {3 lAJMP SET4# z' ]7 p h5 l8 v" s o# j
SET5: LCALL DISPLAY ;键开释等待时调用显示程序(调小时)
8 {: {7 u, B2 @) [# q S8 l) [AJMP SETHH1 ;防止键按下时无时钟显示; _: S7 J V2 y
SET7: LCALL DISPLAY ;等待调小时按键时时钟显示用
; F) a6 M- ?& B; vAJMP SET66 @5 V4 F) Z! w; o) }
SETOUT1: LCALL DISPLAY ;退出时钟调整时键开释等待
3 w9 w( {8 V6 e. x SAJMP SETOUT ;防止键按下时无时钟显示) w4 z8 s2 d- \& P( ]
;+ s0 G M# z" n: l& |, j
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
) F, A! L( q- W) L, y! `;; 显示程序 ;;
/ F5 x$ O T) H2 e1 m4 Z;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;/ _* Y! a6 F" g( O
$$$$$$$$$$$$$$$$$$$$$$$$$$$
7 D; y5 X* S4 e" |, C# [/ d;1MS延时程序,LED显示程序用# `9 L, S" j5 w, `8 ?6 W
DL1MS: MOV R6,#14H
' `4 e) g9 D2 P$ IDL1: MOV R7,#19H
- }9 V) @. W* I! \0 Q4 c; pDL2: DJNZ R7,DL23 Z$ z0 A8 j/ Q
DJNZ R6,DL1
/ ~6 N9 i& {3 U* h/ a/ i! A% XRET
/ L ~9 f& g! B* ]$ l! I;20MS延时程序,采用调用显示子程序以改善LED的显示闪烁现象
* _' Z+ Y) E2 ^7 B/ f3 S: i( SDS20MS: ACALL DISPLAY; j0 v. U9 X7 U; Z9 r, G
ACALL DISPLAY
) y" Q, @, h5 X; `& i3 y" UACALL DISPLAY
( b$ K' l5 m3 k* U3 {0 SRET
0 W3 u4 E2 g& j) V: j. B6 }! E/ u;延时程序,用作按键时间的长短判定; ^; L* A& o9 Z4 Q5 C& T
DL1S: LCALL DL05S
' t' s V4 T N# E- J6 U! A& mLCALL DL05S
$ ~6 x5 e$ t+ V k, TRET
9 x( V) g5 K4 r" |; r7 a; zDL05S: MOV R3,#20H ;8毫秒*32=0.196秒
+ M6 g* R2 f& ]) h4 X5 A( \; v4 |& NDL05S1: LCALL DISPLAY
" r u9 a# ~7 [) X3 E+ P# @DJNZ R3,DL05S1
: ~ Y1 f, K! m WRET0 Q! k# s$ b6 k! ^5 T" U. T: n
END ;程序结束
B) L! _/ j' ?! b6 W |