51单片机作的电子钟程序在很多地方已经有了介绍, 对于单片机学习者而言这个程序基本上是一道门槛,掌握了电子钟程序, 基本上可以说51单片机就掌握了80%。常见的电子钟程序由显示部分, 计算部分, 时钟调整部分构成。 * D. L1 W2 O& s. v g& U* k1 F
时钟的基本显示原理:时钟开始显示为0时0分0秒,也就是数码管显示000000,然后每秒秒位加1 ,到9后,10秒位加1,秒位回0。10秒位到5后,即59秒 ,分钟加1,10秒位回0。依次类推,时钟最大的显示值为23小时59分59秒。这里只要确定了1秒的定时时间, 其他位均以此为基准往上累加。 # n- D: }5 b) w- @) @- L% h
开始程序定义了秒, 十秒, 分, 十分,小时, 十小时,共6位的寄存器, 分别存在30h,31h,32h,33h,34h,35h单元,便于程序以后调用和理解。 / H. j& e8 F7 h, T$ w5 ^3 B6 w
6个数码管分别显示时、分、秒,一个功能键,可以切换调整时分秒、增加数值、熄灭节电等功能全部集一键。![]()
- C7 @0 x$ i4 C! ]" W
6 D/ Q: d; B/ I! e3 K. g9 a) p2 D% n
7 s1 m" T( m- R! G: z) A
; M) B, J# [! M1 P 以下是部分汇编源程序,购买我们产品后我们用光盘将完整的单片机汇编源程序和烧写文件送给客户。 [* A0 ~9 r. _4 v1 s
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
& a) i2 t7 o! z9 {- g;; 中断入口程序 ;; (仅供参考)
* h; _$ f3 b/ T8 G& Y$ j! x;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
, C7 d0 m% k% v6 t! |;2 `5 t* t* }8 i) r3 \% q( t" D
ORG 0000H ;程序执行开始地址
1 l% ?3 B7 p& i- m* L" f8 ]LJMP START ;跳到标号START执行. | d$ i/ \; b2 j+ P
ORG 0003H ;外中断0中断程序入口* h+ Q* m3 U: }5 E6 ?. f; \
RETI ;外中断0中断返回
0 Y4 e0 w# V8 f G0 q. z: YORG 000BH ;定时器T0中断程序入口4 j& ` Q! x# D1 M4 d: G
LJMP INTT0 ;跳至INTTO执行
* N9 `0 B( E mORG 0013H ;外中断1中断程序入口1 O R* a ~) [. e
RETI ;外中断1中断返回( e( `5 L! D9 E5 s2 p Z
ORG 001BH ;定时器T1中断程序入口2 [, p8 V7 e7 N3 \9 R9 q7 j+ e! H1 P
LJMP INTT1 ;跳至INTT1执行
5 t4 M7 {4 b( y+ j# V/ U7 nORG 0023H ;串行中断程序入口地址. s3 @5 c/ _/ F4 q* K( a
RETI ;串行中断程序返回
1 {+ Q/ y( C) m$ a;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
' V4 `& _4 ~+ q! Y1 y;; 主 程 序 ;;
2 K, r: A# h" {2 c;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9 ^* A0 Q# @5 ^! N+ N# s% G
;: U. ?. g! G* S2 A7 P1 z% r/ J+ o9 j
START: MOV R0,#70H ;清70H-7AH共11个内存单元
; G* `/ k4 w J- X3 kMOV R7,#0BH
: L: X* P& h' ~3 }1 E1 ^6 b;clr P3.7 ;
5 `! \: o! y, S6 mCLEARDISP: MOV @R0,#00H ;8 Y* G9 I8 t5 A- Q+ ^$ @/ H
INC R0 ;5 r. V& ]$ ?8 {" S& @
DJNZ R7,CLEARDISP ;
0 R1 f! a* L& O; ]0 Y' `/ dMOV 20H,#00H ;清20H(标志用)
: D: G% U6 l* d( rMOV 7AH,#0AH ;放入"熄灭符"数据4 i S" Z/ l3 V* |0 Z6 g
MOV TMOD,#11H ;设T0、T1为16位定时器' q6 `8 _- Y" D+ @6 ? \
MOV TL0,#0B0H ;50MS定时初值(T0计时用)
$ n3 E" t5 _% S% R2 c1 e/ K% I& N, hMOV TH0,#3CH ;50MS定时初值% t) U6 H% W p- }, \+ W
MOV TL1,#0B0H ;50MS定时初值(T1闪烁定时用)3 y0 Q2 l0 c; s: }! `) G0 G
MOV TH1,#3CH ;50MS定时初值3 \9 h( C2 _, z/ O! d( J
SETB EA ;总中断开放
9 S" ~+ p* ]3 Z# \) x" [, QSETB ET0 ;答应T0中断
) ~) G. g4 I. T+ gSETB TR0 ;开启T0定时器( e2 \4 C- V5 u7 S7 k6 b! D* L
MOV R4,#14H ;1秒定时用初值(50MS×20)
, d5 @! L! E1 y* _/ HSTART1: LCALL DISPLAY ;调用显示子程序9 S/ m# b9 D8 L) a/ g( k
JNB P3.7,SETMM1 ;P3.7口为0时转时间调整程序 * U- s" X$ J7 G3 E/ G5 [2 v
SJMP START1 ;P3.7口为1时跳回START1
2 {9 @% T2 f/ {9 P3 I& P m) v1 J7 s! bSETMM1: LJMP SETMM ;转到时间调整程序SETMM, d! ^& K; a \( A; `
;
, C' Y8 | E+ h# O6 _3 h* G) [! l;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3 X+ F1 E9 b, }, I4 m7 p0 h
;; 1秒计时程序 ;;7 c9 S1 L2 [) P! q/ v9 X" f" W
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; S! p' q# ]3 i2 M$ }1 f;T0中断服务程序
2 u+ P: B5 P% x5 iINTT0: PUSH ACC ;累加器入栈保护' I8 r. w6 Q9 I8 F/ ?
PUSH PSW ;状态字入栈保护; V6 t) H( Z( W$ W
CLR ET0 ;关T0中断答应
9 b( F9 W$ d2 |5 b( D" t. ~CLR TR0 ;封闭定时器T0
: Z3 ^/ z( Z% iMOV A,#0B7H ;中断响应时间同步修正
2 A' \, `! V# DADD A,TL0 ;低8位初值修正
! H# V: s5 H k" A) M. e) ?MOV TL0,A ;重装初值(低8位修正值)
, X* {* o% n9 g' QMOV A,#3CH ;高8位初值修正
3 p" j0 }' d9 |% o+ JADDC A,TH0 ;3 c+ L- b5 r3 c
MOV TH0,A ;重装初值(高8位修正值)7 Q9 a% w" B; [1 U0 k
SETB TR0 ;开启定时器T05 l1 Y% F/ h" k) G% t8 Q! W1 I
DJNZ R4, OUTT0 ;20次中断未到中断退出
4 R& F% S$ G5 K4 EADDSS: MOV R4,#14H ;20次中断到(1秒)重赋初值
: H) u* B( S+ B+ C; K: a PMOV R0,#71H ;指向秒计时单元(71H-72H)
. |! m% [2 _) `ACALL ADD1 ;调用加1程序(加1秒操作)
4 m( k4 t: @ @. [1 [$ W3 IMOV A,R3 ;秒数据放入A(R3为2位十进制数组合)' I J1 K" s: p
CLR C ;清进位标志2 m, G% w/ c( B4 _+ x( V0 ~
CJNE A,#60H,ADDMM ;& v0 `1 t3 r3 M% S( L) a7 X# f
ADDMM: JC OUTT0 ;小于60秒时中断退出
1 D# Z) s& H3 a% OACALL CLR0 ;大于或即是60秒时对秒计时单元清0 x ]. e- i; B; \4 c
MOV R0,#77H ;指向分计时单元(76H-77H)
, b* n# _1 l0 o) \8 x7 gACALL ADD1 ;分计时单元加1分钟8 }3 \ @) y+ p8 J/ z& Z
MOV A,R3 ;分数据放入A
" [! u' a; s* O, {CLR C ;清进位标志
$ k7 m" y) {# I, B, h# t; rCJNE A,#60H,ADDHH ;
* Q2 G7 L4 ^$ _3 x" cADDHH: JC OUTT0 ;小于60分时中断退出
( l" W9 A* a m; j8 e+ |) cACALL CLR0 ;大于或即是60分时分计时单元清02 F- O7 n2 v8 x& u+ I1 n! n
MOV R0,#79H ;指向小时计时单(78H-79H)
# I5 h* m- O) N# d( C5 MACALL ADD1 ;小时计时单元加1小时7 [0 ]4 g7 p0 B0 n- ^8 N& g
MOV A,R3 ;时数据放入A
! J' c5 X& O2 r. h' h$ m# Q$ `* NCLR C ;清进位标志1 t1 ~ f- x7 Y+ U& `' E
CJNE A,#24H,HOUR ;
/ w! h, |$ V, S% t* }HOUR: JC OUTT0 ;小于24小时中断退出
3 T4 S# _5 @! ~- N( hACALL CLR0 ;大于或即是24小时小时计时单元清0
! @' C# n h' ^# F# pOUTT0: MOV 72H,76H ;中断退出时将分、时计时单元数据移 @3 ]0 [7 w8 ~0 B
MOV 73H,77H ;入对应显示单元. M: D9 @" C z- Y! ^. S: J8 N
MOV 74H,78H ;% ?+ I/ ]* N# D1 i: T2 y
MOV 75H,79H ;
) n/ {( y* B9 e. [+ b9 ^3 CPOP PSW ;恢复状态字(出栈)
$ p. @2 Q9 `9 UPOP ACC ;恢复累加器/ @) P0 a8 f% B# K
SETB ET0 ;开放T0中断
% K5 G$ e" G" ?0 q9 i0 x# @RETI ;中断返回" P' ~/ O. N; h
;4 K* Z% J: C& i- I, R
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;/ F7 p I g; Y
;; 闪动调时 程 序 ;;0 U! |3 {8 p3 n# c. }& K) _
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
) _# _6 ~9 P- L% ]0 y. c+ N+ ~0 e;T1中断服务程序,用作时间调整时调整单元闪烁指示: I, A7 m }! [" N
INTT1: PUSH ACC ;中断现场保护2 `# d6 B3 [& s# B7 G
PUSH PSW ;
% \/ W$ y9 ~ P0 ^8 r# B ~MOV TL1, #0B0H ;装定时器T1定时初值
, g I0 \1 l7 t% ? e$ gMOV TH1, #3CH ;: ~0 @# q8 G5 g n. \$ B0 f
DJNZ R2,INTT1OUT ;0.3秒未到退出中断(50MS中断6次)) X+ H, P# |, V7 K5 K7 s
MOV R2,#06H ;重装0.3秒定时用初值3 u$ F1 C. _7 l$ r$ L
CPL 02H ;0.3秒定时到对闪烁标志取反
6 o" v* A0 }; `$ ~JB 02H,FLASH1 ;02H位为1时显示单元"熄灭"0 m( E4 T9 M7 @1 F
MOV 72H,76H ;02H位为0时正常显示
2 l3 Y! e9 m3 V ]6 h9 V. N% eMOV 73H,77H ;) U( D" \0 ?: K
MOV 74H,78H ;
' I/ Q: F2 m3 g& w: h/ RMOV 75H,79H ;7 W3 x' b7 z. `/ y6 l, q
INTT1OUT: POP PSW ;恢复现场) [0 ~/ r; L" M9 q& v% y
POP ACC ;
/ g v$ t* B* ARETI ;中断退出7 e* m" Q' w6 Q2 ?6 `; X& h
FLASH1: JB 01H,FLASH2 ;01H位为1时,转小时熄灭控制
1 X' w9 f7 J. ]# F4 o, yMOV 72H,7AH ;01H位为0时,"熄灭符"数据放入分
2 [! P/ q$ Z3 |2 d) r6 _) KMOV 73H,7AH ;显示单元(72H-73H),将不显示分数据! G8 n/ Z, P5 n4 }2 x8 V
MOV 74H,78H ;. r0 s/ ?, {2 _# h5 p7 {* r
MOV 75H,79H ;% T$ e$ X m& g
AJMP INTT1OUT ;转中断退出
/ A! U1 e" `5 N# [5 G; fFLASH2: MOV 72H,76H ;01H位为1时,"熄灭符"数据放入小时
: y L' J. t+ k3 f+ R5 yMOV 73H,77H ;显示单元(74H-75H),小时数据将不显示
# E I; b5 f$ k. d H7 e+ XMOV 74H,7AH ;
0 `( R$ L# K( B6 P% g, [MOV 75H,7AH ;. d, B1 M8 _% Q7 R$ L; @) k% Y3 g
AJMP INTT1OUT ;转中断退出
: D( A0 K: J4 ?$ R, S1 L;
, h+ j% F. r2 i& i6 s2 \;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
" W/ o6 t+ Y2 u4 _ n$ @: U" e;; 加1子 程 序 ;;, C5 Q- E* e. r* s- T* ]8 _
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8 ?% H+ T$ f4 u# |- t1 F
;, A" o* p+ p# i& M
ADD1: MOV A,@R0 ;取当前计时单元数据到A
- U, G' _7 O- h) y- b& yDEC R0 ;指向前一地址
) ]5 e. A* N) m) ]- Q6 ?) w4 V9 cSWAP A ;A中数据高四位与低四位交换
$ i2 G; x# f: DORL A,@R0 ;前一地址中数据放入A中低四位
& Z& t4 `( F$ f, J& TADD A,#01H ;A加1操作8 @! z" @6 |' w$ {: x
DA A ;十进制调整
; |* V8 t; y8 j* }MOV R3,A ;移入R3寄存器9 d' [0 k" n) Y4 H9 o: d g* O
ANL A,#0FH ;高四位变0% L, |" C5 R% l9 D# }* J
MOV @R0,A ;放回前一地址单元
8 }% A% ?1 j# p5 L- |MOV A,R3 ;取回R3中暂存数据
% x/ R4 k$ o8 dINC R0 ;指向当前地址单元- p3 s2 ~7 j7 y
SWAP A ;A中数据高四位与低四位交换
1 K) o: w5 W& b. W2 S% @ANL A,#0FH ;高四位变02 J; V( T/ ?) [2 I8 y" G. z& D
MOV @R0,A ;数据放入当削地址单元中( S* `! U; s6 c0 l. \. ~4 ` j
RET ;子程序返回7 P; j8 K) R T9 @0 a& Z. ]/ A0 f% @
;
* |) _3 V& r: k% D8 u;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;* T! r- R! E. _, r. A4 v! i+ a/ h
;; 清零程序 ;;
. h T2 Z# [0 J& E: S' p3 r;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
. m; s. \- G7 p' y;.............
; \1 l" f% j2 r;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;# C) t0 p6 V @! F( O
;; 时钟调整程序 ;;
& L6 u. |! w1 z8 ~5 b2 A" ~;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;' a& t4 _& @3 G8 P- }4 S" I
;当调时按键按下时进入此程序5 l q) d8 G2 }6 m& R6 e9 @
SETMM: cLR ET0 ;关定时器T0中断
/ V3 J5 e+ Z* G7 X) i, m2 G( CCLR TR0 ;封闭定时器T0
6 U3 g# F8 {3 G% a/ t1 WLCALL DL1S ;调用1秒延时程序. Z3 h' j. {7 R1 e/ {* U& i7 j( F
JB P3.7,CLOSEDIS ;键按下时间小于1秒,封闭显示(省电); D/ `2 w$ w% I# a2 s
MOV R2,#06H ;进入调时状态,赋闪烁定时初值3 T( e9 z7 Z# d" o8 f) Z4 z3 _
SETB ET1 ;答应T1中断+ I; F5 H/ O8 h+ a% y
SETB TR1 ;开启定时器T1
" u3 E: m n) |( N- ]7 x' A, F" s' cSET2: JNB P3.7,SET1 ;P3.7口为0(键未开释),等待" d6 U) G& y/ d# S% e- r8 a. |2 Z# M
SETB 00H ;键开释,分调整闪烁标志置1
, n& j, i6 J- p" C& N" ISET4: JB P3.7,SET3 ;等待键按下+ l$ P* K6 X$ I& p, {
LCALL DL05S ;有键按下,延时0.5秒
/ R+ i- K" D- O0 E' n) j: @JNB P3.7,SETHH ;按下时间大于0.5秒转调小时状态7 }1 {% P; V1 g
MOV R0,#77H ;按下时间小于0.5秒加1分钟操作
4 H7 ?! z% L7 n" B# o$ w7 JLCALL ADD1 ;调用加1子程序+ d5 L( f3 Y7 K* j
MOV A,R3 ;取调整单元数据
! l7 D" U+ m8 H4 ^4 @8 T, SCLR C ;清进位标志) E/ C4 w7 _- K5 H
CJNE A,#60H,HHH ;调整单元数据与60比较0 m' a/ v( J$ u1 f, V
HHH: JC SET4 ;调整单元数据小于60转SET4循环
: f% d- o8 d, z$ ~3 k3 F1 k8 Q4 u* X ELCALL CLR0 ;调整单元数据大于或即是60时清0
4 m/ s+ Q& v! G2 t: O% qCLR C ;清进位标志8 q- D6 F$ p" ]( O5 O- j5 n4 ^
AJMP SET4 ;跳转到SET4循环: h }3 S6 _- l Y- o
CLOSEDIS: SETB ET0 ;省电(LED不显示)状态。开T0中断
g! h- o& v E% h7 |SETB TR0 ;开启T0定时器(开时钟)6 c2 N+ S3 [- n7 ]2 ]; c2 j+ d
CLOSE: JB P3.7,CLOSE ;无按键按下,等待。, e' h1 N% j' p5 S
LCALL DISPLAY ;有键按下,调显示子程序延时削抖
; e5 R5 B: r( I& A. }9 NJB P3.7,CLOSE ;是干扰返回CLOSE等待3 J" A" Y: o$ M: b$ _1 N/ W
WAITH: JNB P3.7,WAITH ;等待键开释; p; `$ i9 s! L X5 L& L2 `( P5 s
LJMP START1 ;返回主程序(LED数据显示亮)4 y9 l: B; k# c; G5 W5 ]7 T9 g
SETHH: CLR 00H ;分闪烁标志清除(进入调小时状态)
2 L0 o7 o9 [( H5 T/ e6 lSETHH1: JNB P3.7,SET5 ;等待键开释
2 B: [. J- r9 X& P4 BSETB 01H ;小时调整标志置1
& t7 }0 H% |9 Z. f( w( v3 kSET6: JB P3.7,SET7 ;等待按键按下2 T% L4 H, J3 P3 w
LCALL DL05S ;有键按下延时0.5秒
" {6 m$ Q z+ O& ~( M6 nJNB P3.7,SETOUT ;按下时间大于0.5秒退出时间调整2 l+ _/ y2 C# \" E- [ R
MOV R0,#79H ;按下时间小于0.5秒加1小时操作3 E4 @3 J( A4 W
LCALL ADD1 ;调加1子程序) }# o( T1 \: y1 V
MOV A,R3 ;
& d Y$ g$ P; Z$ O! F" Z/ zCLR C ;
0 y% ]7 [0 L" r5 {- TCJNE A,#24H,HOUU ;计时单元数据与24比较* v! _" D. }. B0 Q% U+ y. `& P- [
HOUU: JC SET6 ;小于24转SET6循环
: z/ D0 d0 k K4 V8 \LCALL CLR0 ;大于或即是24时清0操作
# {3 l0 D. W- t, x* W" MAJMP SET6 ;跳转到SET6循环
7 Q6 q7 X! P% }# z E: JSETOUT: JNB P3.7,SETOUT1 ;调时退出程序。等待键开释
: Z& {% A# j& R: K* l; Q3 Z# wLCALL DISPLAY ;延时削抖9 \6 C7 T ]7 H4 ^3 A+ s
JNB P3.7,SETOUT ;是抖动,返回SETOUT再等待4 x2 h' I6 n$ L& k* D
CLR 01H ;清调小时标志6 E% V5 P% b- D
CLR 00H ;清调分标志% I, E7 b! v# D
CLR 02H ;清闪烁标志
0 o+ G; _ p' J% h! {$ WCLR TR1 ;封闭定时器T17 @' }$ p* ^9 g6 h: x* C( _
CLR ET1 ;关定时器T1中断
$ y9 w6 p3 T% H$ D: o& VSETB TR0 ;开启定时器T0
9 z8 C( M+ d+ a& C% Q P# @7 HSETB ET0 ;开定时器T0中断(计时开始)
" V) T5 ]# p2 F1 \LJMP START1 ;跳回主程序
# b2 o* G, ~' C2 G- }7 D4 X: MSET1: LCALL DISPLAY ;键开释等待时调用显示程序(调分)3 E4 [5 t9 @! M) ?$ N
AJMP SET2 ;防止键按下时无时钟显示9 e; H. o0 R0 p9 o
SET3: LCALL DISPLAY ;等待调分按键时时钟显示用( j6 N. ` l5 {
AJMP SET4
" D% ]6 N! _$ J$ G" B& PSET5: LCALL DISPLAY ;键开释等待时调用显示程序(调小时)+ g" o# ]/ S) r" }+ `
AJMP SETHH1 ;防止键按下时无时钟显示
+ ?4 M. M" ?' LSET7: LCALL DISPLAY ;等待调小时按键时时钟显示用 T1 E9 s) L" {, {+ s$ i
AJMP SET6 `! K7 m" _4 v7 v: j
SETOUT1: LCALL DISPLAY ;退出时钟调整时键开释等待, v0 x9 S8 e/ n1 Z2 }$ E
AJMP SETOUT ;防止键按下时无时钟显示: `" o$ X, E& f
;1 H9 j+ f- B& t0 C
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
9 c; y! R' t) \! ?2 R& c4 w# F;; 显示程序 ;;0 g2 r9 Q/ f4 h8 ~
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;# u9 G. N- c6 q6 w/ F$ w# [1 o: I# t
$$$$$$$$$$$$$$$$$$$$$$$$$$$
! h* P2 {5 {7 V8 q: D;1MS延时程序,LED显示程序用
9 d: P# S9 Y- E+ P0 lDL1MS: MOV R6,#14H5 M" G: ?2 ? c
DL1: MOV R7,#19H
% n" D9 C: u5 e) V- t/ v, S. QDL2: DJNZ R7,DL2* L& L0 R; s/ z. ^7 a0 q7 Y
DJNZ R6,DL1
9 S/ Z T+ O8 O7 ^2 f* n2 M8 r% SRET- ?% Q/ o ~+ x
;20MS延时程序,采用调用显示子程序以改善LED的显示闪烁现象! Q5 s( K+ C0 m! c* S3 U/ ~
DS20MS: ACALL DISPLAY5 n X4 q" t8 {+ ]
ACALL DISPLAY
9 p. Y1 G1 l E4 N( N+ sACALL DISPLAY
; O5 g( b1 N3 c5 I& [RET8 x4 |% m. D7 z; [2 x2 e
;延时程序,用作按键时间的长短判定; W7 j: Y4 l3 h* {
DL1S: LCALL DL05S) }6 h9 Z& @' P5 Q
LCALL DL05S
+ }6 G" |0 O" `- v! yRET
4 I; h1 i+ }! E6 @! u GDL05S: MOV R3,#20H ;8毫秒*32=0.196秒
& l1 g6 J( |6 x) }0 ODL05S1: LCALL DISPLAY
' x0 G* V: K+ B# e8 r6 a. f4 wDJNZ R3,DL05S1
- I* h8 {% A$ k; zRET: S: t& }3 `: ~
END ;程序结束
* Y5 k# Y0 F8 j; T5 n6 g" X5 h5 Z |