51单片机作的电子钟程序在很多地方已经有了介绍, 对于单片机学习者而言这个程序基本上是一道门槛,掌握了电子钟程序, 基本上可以说51单片机就掌握了80%。常见的电子钟程序由显示部分, 计算部分, 时钟调整部分构成。
) q5 k x* D, P& \ 时钟的基本显示原理:时钟开始显示为0时0分0秒,也就是数码管显示000000,然后每秒秒位加1 ,到9后,10秒位加1,秒位回0。10秒位到5后,即59秒 ,分钟加1,10秒位回0。依次类推,时钟最大的显示值为23小时59分59秒。这里只要确定了1秒的定时时间, 其他位均以此为基准往上累加。
& k/ k, m+ W0 b: s 开始程序定义了秒, 十秒, 分, 十分,小时, 十小时,共6位的寄存器, 分别存在30h,31h,32h,33h,34h,35h单元,便于程序以后调用和理解。
( t! t# V( |6 B. C" J5 `# U3 G2 \! O 6个数码管分别显示时、分、秒,一个功能键,可以切换调整时分秒、增加数值、熄灭节电等功能全部集一键。 % X* E- I6 \( @
9 T4 i" y. ?5 r& i9 e" C1 [
% L9 T( P: H. B9 M; x3 Z: }! P$ Y( L
. r3 e* m- W1 M1 U: `+ x/ b" p 以下是部分汇编源程序,购买我们产品后我们用光盘将完整的单片机汇编源程序和烧写文件送给客户。& Z! ]% G; z ]9 ]" R( ?5 W
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
) u, v$ |3 d* a- N7 D1 K7 {$ a2 c;; 中断入口程序 ;; (仅供参考): O; J# V' Y' \/ ~3 A. E7 K U
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3 k1 J& N* P# Q2 ^3 g0 Q' Q
;
5 A; O$ Y- A& K/ j3 _# }ORG 0000H ;程序执行开始地址) k' S6 e" h% _' s1 x) M; H: O
LJMP START ;跳到标号START执行
3 O8 i# Y9 J, H3 b* g- i o9 @# m6 l: AORG 0003H ;外中断0中断程序入口6 G1 W; v' R2 h% L2 p$ H, }3 `+ t
RETI ;外中断0中断返回' _: L+ X `: d1 ]+ Z8 W
ORG 000BH ;定时器T0中断程序入口 S1 b5 G1 A- j B# X, r, r+ ]
LJMP INTT0 ;跳至INTTO执行+ C! T4 O* e1 ~9 M. W
ORG 0013H ;外中断1中断程序入口
. r, W5 ~4 R2 E% Z* A0 t: Z7 s, ]RETI ;外中断1中断返回
, U5 c# n- @* ]ORG 001BH ;定时器T1中断程序入口, W7 f$ g: u6 f3 K0 v o
LJMP INTT1 ;跳至INTT1执行
: ?: o2 h# n$ ], t, l6 rORG 0023H ;串行中断程序入口地址& ^4 k ?; Q8 e0 ?3 I
RETI ;串行中断程序返回
. f" b! j5 R3 l2 @; C4 I! w& O;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3 w9 ^1 [6 w, h$ D( M& C- w) h;; 主 程 序 ;;
3 X1 t/ z y E7 H+ P;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;: v' M7 Z3 }( o% J! U, c
;1 f1 y; `# \; K
START: MOV R0,#70H ;清70H-7AH共11个内存单元
$ k. D+ R# o8 I6 N- J" b7 P) YMOV R7,#0BH ( F7 |3 a$ s- a3 U1 M- M6 I
;clr P3.7 ;2 V; W- \' |& O/ t$ ?# v. i
CLEARDISP: MOV @R0,#00H ;; Q4 b0 ` c- L7 k1 g5 V" o0 f
INC R0 ;8 z9 h, W8 U3 p* a- l
DJNZ R7,CLEARDISP ;
/ u: L$ |: s1 g$ U0 sMOV 20H,#00H ;清20H(标志用)
y# N/ X: h# oMOV 7AH,#0AH ;放入"熄灭符"数据( G2 s+ w+ d p$ u
MOV TMOD,#11H ;设T0、T1为16位定时器' f1 y8 e2 K4 ~' b3 b- F- p
MOV TL0,#0B0H ;50MS定时初值(T0计时用)
5 B7 L. R( z8 _& V/ t; R4 w5 _MOV TH0,#3CH ;50MS定时初值
. ^2 u0 N% |5 q% h2 R8 g& \MOV TL1,#0B0H ;50MS定时初值(T1闪烁定时用)
% z* b" n4 M5 B( M0 c, _: r. lMOV TH1,#3CH ;50MS定时初值
) u4 J8 g2 {& C' C$ e4 l' PSETB EA ;总中断开放( O) u8 O" H6 h! _& Q! \
SETB ET0 ;答应T0中断
! ?7 h. c. L/ tSETB TR0 ;开启T0定时器
. b8 N5 y6 {7 j. R4 R: k$ D hMOV R4,#14H ;1秒定时用初值(50MS×20)
# A0 @0 o( S+ M# r; ASTART1: LCALL DISPLAY ;调用显示子程序6 V/ T; h4 l' M* z
JNB P3.7,SETMM1 ;P3.7口为0时转时间调整程序 ' l, r' T1 ]. i, ]) v! y9 n- Z7 p) P
SJMP START1 ;P3.7口为1时跳回START1
' j% |: f( A5 i- O5 bSETMM1: LJMP SETMM ;转到时间调整程序SETMM2 t3 e/ u8 t v# Q
;
. g3 d. m: O2 ], i7 U8 L;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; }, ]. P3 d6 }, R5 l: O1 j
;; 1秒计时程序 ;;
' T9 E5 }4 D0 Y7 b;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
* ~! M: h- b0 C: _1 N;T0中断服务程序! t6 S9 u! C! O0 Z% C8 Y
INTT0: PUSH ACC ;累加器入栈保护
) s! \4 \/ W) Z, V% ?PUSH PSW ;状态字入栈保护
( q) z' @- Z3 P! z: s" [CLR ET0 ;关T0中断答应$ K) n. q1 F+ N. E
CLR TR0 ;封闭定时器T0
0 ]$ _" S' T+ v& _+ K: ]* ~MOV A,#0B7H ;中断响应时间同步修正
+ U3 r7 d0 b- y$ T, RADD A,TL0 ;低8位初值修正, D) k) p6 ]$ t. y4 P
MOV TL0,A ;重装初值(低8位修正值)0 j- ^# w6 g" @+ s# X: F2 j
MOV A,#3CH ;高8位初值修正9 t; l: }' X6 l5 V! y* W
ADDC A,TH0 ;
2 D* H! R: l. M F5 @% @MOV TH0,A ;重装初值(高8位修正值)
* X. J3 Q5 a; d; H3 HSETB TR0 ;开启定时器T0
* a9 N+ Z0 ?& P' G$ K2 IDJNZ R4, OUTT0 ;20次中断未到中断退出5 v8 j/ J7 {5 k; G7 O
ADDSS: MOV R4,#14H ;20次中断到(1秒)重赋初值- B8 u2 h r1 U! y
MOV R0,#71H ;指向秒计时单元(71H-72H)
6 @: P i4 F/ ^ACALL ADD1 ;调用加1程序(加1秒操作)
% h( q" r4 e+ l$ OMOV A,R3 ;秒数据放入A(R3为2位十进制数组合), [+ g. T* E7 e
CLR C ;清进位标志# H- }7 c$ g/ ]4 t3 x
CJNE A,#60H,ADDMM ;
% U% `" l1 {: G6 IADDMM: JC OUTT0 ;小于60秒时中断退出
8 X n1 P8 \# v$ F1 M2 f0 jACALL CLR0 ;大于或即是60秒时对秒计时单元清0
$ }* A+ E5 N! {$ vMOV R0,#77H ;指向分计时单元(76H-77H)
) \8 I- h8 }0 B qACALL ADD1 ;分计时单元加1分钟
. ]$ D" g i7 z) y' CMOV A,R3 ;分数据放入A, |5 F2 [* ~" W. r# e; l
CLR C ;清进位标志
4 f7 }& D; o" @; MCJNE A,#60H,ADDHH ;0 M! {% K' q1 f0 w# G2 S2 m
ADDHH: JC OUTT0 ;小于60分时中断退出0 o$ L% U* U1 b3 Z5 |( `' |8 W
ACALL CLR0 ;大于或即是60分时分计时单元清04 q2 Z n4 |# f6 _ A# D& |1 Z
MOV R0,#79H ;指向小时计时单(78H-79H)
6 f9 f2 X1 {/ X/ q2 XACALL ADD1 ;小时计时单元加1小时
: p- _; y( {% S6 J/ F8 ^MOV A,R3 ;时数据放入A
& H, g0 ^1 z$ [8 W1 r( P* |2 q4 @8 FCLR C ;清进位标志4 _! i' r- G$ S1 |% q* y
CJNE A,#24H,HOUR ;* c" \: X8 K$ `! E& x, [1 B2 o
HOUR: JC OUTT0 ;小于24小时中断退出5 i% P! K# m/ u0 j: f
ACALL CLR0 ;大于或即是24小时小时计时单元清0& F3 C; c6 B2 E9 q- V( a% S
OUTT0: MOV 72H,76H ;中断退出时将分、时计时单元数据移
9 a+ y8 s$ }6 U& K' n( ]1 q1 IMOV 73H,77H ;入对应显示单元" p( l9 p: {2 j6 [
MOV 74H,78H ;
& R7 V+ ^0 l: t& [; I7 }) M9 A7 t% ?' PMOV 75H,79H ;
" Q* d& v8 A# rPOP PSW ;恢复状态字(出栈)
: J% Z- L5 L' k9 `' \1 nPOP ACC ;恢复累加器
, y, l3 v5 m& Y6 j) w6 `" g4 H! nSETB ET0 ;开放T0中断
* V" e8 K3 A% W$ O7 y* ?+ t1 ARETI ;中断返回$ _# l9 e# `; a# I0 E- I
;$ t8 h0 G! N z/ _
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+ s- E! g% B* t
;; 闪动调时 程 序 ;;3 J2 g2 ^# ]+ w, N# }
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
0 V e/ Z9 ?5 g;T1中断服务程序,用作时间调整时调整单元闪烁指示& Z# E+ { u( z
INTT1: PUSH ACC ;中断现场保护 q) K$ y% W0 e; `" S
PUSH PSW ;9 X* l! G. S$ M2 T0 d, o1 H0 p
MOV TL1, #0B0H ;装定时器T1定时初值
3 ~$ N6 Z9 k8 \6 [& WMOV TH1, #3CH ;( w, I! i. m5 `) }" j
DJNZ R2,INTT1OUT ;0.3秒未到退出中断(50MS中断6次) ]: l4 Q2 G0 D% W+ B. a1 h
MOV R2,#06H ;重装0.3秒定时用初值
* q+ b5 n3 J: k1 ^$ r: t, oCPL 02H ;0.3秒定时到对闪烁标志取反
9 y" E: z( ^1 w6 a0 oJB 02H,FLASH1 ;02H位为1时显示单元"熄灭"
, Q* C3 Z, q* T1 p- x& QMOV 72H,76H ;02H位为0时正常显示& } j6 @7 X' {8 _! W* \) y
MOV 73H,77H ;
F W& C& m# a- d7 \# fMOV 74H,78H ;
$ c8 Z6 D2 n% ]7 x! ]MOV 75H,79H ;
( y6 _" k) ?( }INTT1OUT: POP PSW ;恢复现场
' o9 D3 x* w j' h* G- Q# u; d( NPOP ACC ;# k0 ^; N- O! s7 Q, m/ E, F" x
RETI ;中断退出
3 t: f M, i# u, J: i# D# Q6 AFLASH1: JB 01H,FLASH2 ;01H位为1时,转小时熄灭控制" ?6 w, G* I4 H* Y; a$ p
MOV 72H,7AH ;01H位为0时,"熄灭符"数据放入分' L& Y& R+ u) s* B8 X
MOV 73H,7AH ;显示单元(72H-73H),将不显示分数据
B" w. J3 F6 I2 f1 {1 v" l, _MOV 74H,78H ;
9 l* k" C- y+ F# C7 KMOV 75H,79H ;) N+ g9 G1 o. d
AJMP INTT1OUT ;转中断退出2 |& Y1 Z3 w e& J
FLASH2: MOV 72H,76H ;01H位为1时,"熄灭符"数据放入小时9 q# a1 }" ?! T* R! s4 B9 k
MOV 73H,77H ;显示单元(74H-75H),小时数据将不显示
3 z, Y) I' T; G0 C! A: y3 `( UMOV 74H,7AH ;" i( U& k7 [ m
MOV 75H,7AH ;
1 ]. v+ J' v( b" M ~( pAJMP INTT1OUT ;转中断退出/ H3 S o4 F: i0 r: @* l
;
1 ]8 o2 Z" T' B9 E8 A;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; B" B: E, ?$ ?) a7 e
;; 加1子 程 序 ;;) \) I- s5 l! Q/ W0 K
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1 D5 I! x3 h1 }" J9 C9 n0 V;
- j$ O& }8 O% }2 n" P6 N- tADD1: MOV A,@R0 ;取当前计时单元数据到A
' Y$ x2 j5 o* J l5 X6 `& m6 L$ J9 ^: \DEC R0 ;指向前一地址4 E: j$ i$ b% S7 o8 _0 L$ s
SWAP A ;A中数据高四位与低四位交换
$ R1 ^7 H ?# t, Y9 t8 kORL A,@R0 ;前一地址中数据放入A中低四位
0 k7 e4 t& R) a* P0 m' ~% m6 D8 QADD A,#01H ;A加1操作' N: w: X4 e( ^" B- |! ]( T1 E. }
DA A ;十进制调整) K. `5 M; W8 {& l. E) }) B
MOV R3,A ;移入R3寄存器
3 j4 S: o. _, i4 {% q9 R% H9 \ANL A,#0FH ;高四位变0
7 f, G' U ]7 z; nMOV @R0,A ;放回前一地址单元
/ H6 q2 n. G* M- \MOV A,R3 ;取回R3中暂存数据
j( t0 \9 L! W# [. ]6 d4 }INC R0 ;指向当前地址单元
5 I. P) L9 C1 a7 L+ j2 o9 JSWAP A ;A中数据高四位与低四位交换8 i }- Y, \7 y8 I$ r" k1 r: F
ANL A,#0FH ;高四位变0
% C6 A* T* O! G9 V( z" H. \" V* rMOV @R0,A ;数据放入当削地址单元中
! } y% C( N) S' C1 ~, GRET ;子程序返回
9 ^- r3 ^. D; n* ?. t. I$ n- f% u2 {;
6 X" v* [4 \4 Q- i& R;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; `5 k1 m2 I* t7 Z+ R! Q
;; 清零程序 ;;" `) ^7 |) t* p5 I T" g" V" J
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;. W8 P" s+ g" w3 B
;.............( N3 p; [6 y2 y9 F ~
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;- b" M3 G, G6 |* v4 B
;; 时钟调整程序 ;;
( H! i5 T* C T( e6 P( h6 l;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;' x4 V- D! {9 `4 g
;当调时按键按下时进入此程序" P& B- Z0 K5 T
SETMM: cLR ET0 ;关定时器T0中断" v+ h& r I8 k: q2 Y0 D
CLR TR0 ;封闭定时器T0
: C& G) s8 q5 f6 S5 ILCALL DL1S ;调用1秒延时程序. @& |" J7 q& z# q. }7 c
JB P3.7,CLOSEDIS ;键按下时间小于1秒,封闭显示(省电)
, ^1 `. m, j; e) X% H6 v. {MOV R2,#06H ;进入调时状态,赋闪烁定时初值
6 v8 A5 Z+ v8 hSETB ET1 ;答应T1中断: a e* e! k8 m/ p' u- b
SETB TR1 ;开启定时器T1
1 I* m. I1 e3 L4 w2 t; l( `( O1 Z$ g3 sSET2: JNB P3.7,SET1 ;P3.7口为0(键未开释),等待( L- Q3 k( Q+ Q( M5 E
SETB 00H ;键开释,分调整闪烁标志置1
* t! P. |7 I' F) x5 k) HSET4: JB P3.7,SET3 ;等待键按下, |8 L! c/ q4 i
LCALL DL05S ;有键按下,延时0.5秒 b) k, O* Y. I% G
JNB P3.7,SETHH ;按下时间大于0.5秒转调小时状态
j6 p# ]. v% O9 P# sMOV R0,#77H ;按下时间小于0.5秒加1分钟操作
. u( R, s# k2 x% \0 yLCALL ADD1 ;调用加1子程序
0 \" q$ F/ F( a2 u; VMOV A,R3 ;取调整单元数据
8 C& _9 Q7 l5 j: V LCLR C ;清进位标志
6 }6 ? S# D- t: a* p' J7 M) jCJNE A,#60H,HHH ;调整单元数据与60比较
) ~# ^. e0 M _& I3 MHHH: JC SET4 ;调整单元数据小于60转SET4循环
( ~7 c( h& ^. U3 z0 o4 c. tLCALL CLR0 ;调整单元数据大于或即是60时清0
% l, N( u) b$ w1 Y s9 cCLR C ;清进位标志
6 c+ l6 e& S" y' @6 _( FAJMP SET4 ;跳转到SET4循环
4 a; P$ ]* ]! d& lCLOSEDIS: SETB ET0 ;省电(LED不显示)状态。开T0中断
8 Y" G3 i1 ^' w: G6 o1 r5 YSETB TR0 ;开启T0定时器(开时钟), d3 I& L( r/ I2 m3 K2 d
CLOSE: JB P3.7,CLOSE ;无按键按下,等待。: A. a! j- Q: P. \1 c- b
LCALL DISPLAY ;有键按下,调显示子程序延时削抖
9 J4 o' c) S1 m: Y0 i0 |JB P3.7,CLOSE ;是干扰返回CLOSE等待
. F7 w/ P8 i* L) H' p2 @4 ?WAITH: JNB P3.7,WAITH ;等待键开释4 d, H; I1 `& w# Z8 P' h7 v
LJMP START1 ;返回主程序(LED数据显示亮)
% Q- l! m4 {* H$ uSETHH: CLR 00H ;分闪烁标志清除(进入调小时状态)
" q( [2 h$ b/ Z, q8 }! G( R9 LSETHH1: JNB P3.7,SET5 ;等待键开释
, ^6 k x: E) zSETB 01H ;小时调整标志置1
/ i3 |- T7 H' F+ c$ _. ^- s. }SET6: JB P3.7,SET7 ;等待按键按下6 s* c& `, T' L( T
LCALL DL05S ;有键按下延时0.5秒
# a' f5 S, k& J6 F$ `" EJNB P3.7,SETOUT ;按下时间大于0.5秒退出时间调整
2 y+ n m2 g/ g' ]MOV R0,#79H ;按下时间小于0.5秒加1小时操作0 R( o7 o& n3 L) q) K) W, }
LCALL ADD1 ;调加1子程序
2 Q- f& f" \: V1 t$ q3 MMOV A,R3 ;
0 J, I2 r5 p' f& A8 k# j7 y ICLR C ;
0 w+ T3 ]. I/ t3 W/ RCJNE A,#24H,HOUU ;计时单元数据与24比较
' t. F6 Q" h9 L: A" qHOUU: JC SET6 ;小于24转SET6循环6 ^9 ~: s3 S0 C+ Q( E0 u
LCALL CLR0 ;大于或即是24时清0操作
9 p9 x1 a' L7 j9 RAJMP SET6 ;跳转到SET6循环% I# o7 G6 i; w4 g+ w2 o
SETOUT: JNB P3.7,SETOUT1 ;调时退出程序。等待键开释 a9 a. I1 W/ u" d% R# v& }# N8 ~
LCALL DISPLAY ;延时削抖# c. D+ x& j; _* C3 j
JNB P3.7,SETOUT ;是抖动,返回SETOUT再等待
D `& T: l2 d o% CCLR 01H ;清调小时标志
: v' @5 g8 T# p9 ]% vCLR 00H ;清调分标志
' y! t8 ]* l! i2 WCLR 02H ;清闪烁标志" h- \* w) |9 K% e& S5 a# z' q+ Q
CLR TR1 ;封闭定时器T1# i; O0 A5 `! j2 [9 a; N: g* Y- V
CLR ET1 ;关定时器T1中断4 J% D* }% z) w) b, F
SETB TR0 ;开启定时器T0/ c" T% ^% @0 ]; E+ J$ O2 J
SETB ET0 ;开定时器T0中断(计时开始)
8 G5 g6 V$ n( d; bLJMP START1 ;跳回主程序
# r3 Y4 H( O2 w; |. f( q& p7 @* jSET1: LCALL DISPLAY ;键开释等待时调用显示程序(调分)
5 M0 E% B2 g- f4 ` RAJMP SET2 ;防止键按下时无时钟显示
' g0 @; o' n% E- |1 [. Y" o7 ?SET3: LCALL DISPLAY ;等待调分按键时时钟显示用
2 A" G# I" R6 U2 T7 ~AJMP SET4
2 S+ G' L# R- h( B& xSET5: LCALL DISPLAY ;键开释等待时调用显示程序(调小时)
' C4 |& K$ r# W( E% D$ eAJMP SETHH1 ;防止键按下时无时钟显示8 H$ D5 o7 q! ?
SET7: LCALL DISPLAY ;等待调小时按键时时钟显示用
( J. p9 J6 X( z( t, q, o! XAJMP SET6
* M# y$ O/ E, q" h3 }SETOUT1: LCALL DISPLAY ;退出时钟调整时键开释等待( T1 e# v' O* q3 e, C* L
AJMP SETOUT ;防止键按下时无时钟显示: G. z3 s: [8 b+ I8 e8 W
;
$ n" O& K* O( h8 b+ O1 v1 F; q;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0 S9 ]6 ^/ `: j3 i
;; 显示程序 ;;
B9 X" b. S7 e, U" F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
! M+ |- \8 n% ^$$$$$$$$$$$$$$$$$$$$$$$$$$$
" y5 T( `/ W% ~: @1 w;1MS延时程序,LED显示程序用+ {" ]0 n( R# n, t" s8 M u
DL1MS: MOV R6,#14H- m( l) p0 B' X2 J' G( s) B4 q
DL1: MOV R7,#19H
* n. c: l6 C- Q2 H+ ^/ U4 ]DL2: DJNZ R7,DL29 x' \- I& w# F5 I r
DJNZ R6,DL16 f6 s) q- L1 o) O
RET! G* J, \4 Z% t/ v
;20MS延时程序,采用调用显示子程序以改善LED的显示闪烁现象, w" H" D9 y! V- Y7 L2 j, r
DS20MS: ACALL DISPLAY
6 s$ r& m/ u; ~/ z! m8 S5 U1 YACALL DISPLAY
6 s$ B: ?+ g( x1 |% e+ wACALL DISPLAY
$ n. L' x4 l# B* qRET
! q' E. c( u7 L) C;延时程序,用作按键时间的长短判定
/ d$ Z& l* i& PDL1S: LCALL DL05S
6 [3 h2 v* F! T1 s5 X& |; gLCALL DL05S
6 u! @2 N: {7 g3 f, |/ _1 [RET
9 {4 C% E+ U* [; j$ ZDL05S: MOV R3,#20H ;8毫秒*32=0.196秒' u3 H; f) _7 \0 c( z+ |$ t- k# _
DL05S1: LCALL DISPLAY* \9 d! `$ f- B4 F) B
DJNZ R3,DL05S15 p; \. k3 }, s$ Y' ]! j
RET( P. z8 u3 v% Y) h: I
END ;程序结束5 s# `/ }+ K/ L" F1 ^" ]
|