51单片机作的电子钟程序在很多地方已经有了介绍, 对于单片机学习者而言这个程序基本上是一道门槛,掌握了电子钟程序, 基本上可以说51单片机就掌握了80%。常见的电子钟程序由显示部分, 计算部分, 时钟调整部分构成。
; q" c& G+ J# G2 Z) b& V' b: p+ \6 g% t' V 时钟的基本显示原理:时钟开始显示为0时0分0秒,也就是数码管显示000000,然后每秒秒位加1 ,到9后,10秒位加1,秒位回0。10秒位到5后,即59秒 ,分钟加1,10秒位回0。依次类推,时钟最大的显示值为23小时59分59秒。这里只要确定了1秒的定时时间, 其他位均以此为基准往上累加。 ( k' g! c0 t& R! r \
开始程序定义了秒, 十秒, 分, 十分,小时, 十小时,共6位的寄存器, 分别存在30h,31h,32h,33h,34h,35h单元,便于程序以后调用和理解。 ; C. N5 o5 P- K& W5 ], w
6个数码管分别显示时、分、秒,一个功能键,可以切换调整时分秒、增加数值、熄灭节电等功能全部集一键。 : z+ F, N2 X4 n; Y; |- M9 z
" m+ {: Z+ }) J% ~" | i2 t1 ` ' M5 V6 V9 X0 n
- \5 f1 O' k" v 以下是部分汇编源程序,购买我们产品后我们用光盘将完整的单片机汇编源程序和烧写文件送给客户。1 L" D& _8 ]* S
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;( M$ f3 G& f+ W+ ?5 B( M, o* Y( @
;; 中断入口程序 ;; (仅供参考)
B$ J* q6 C' A+ U;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5 y. k& K; k7 Q9 J6 e
;
1 J8 c( n& ?" h, ~7 y9 cORG 0000H ;程序执行开始地址
7 I4 C: y' F* ~) Z/ MLJMP START ;跳到标号START执行
; K5 m+ Y3 t6 S5 `! rORG 0003H ;外中断0中断程序入口
3 u/ i: \4 ~5 N3 H8 ARETI ;外中断0中断返回# J. u! [- P# z0 f% L X( E
ORG 000BH ;定时器T0中断程序入口! v9 E$ s$ @, E1 G* N! j
LJMP INTT0 ;跳至INTTO执行" j$ T7 t1 J8 S" i1 z2 C% W/ _
ORG 0013H ;外中断1中断程序入口
$ @7 A2 N; S- M5 ~: n) u# {& m( Y C# PRETI ;外中断1中断返回
- A/ n$ n2 r+ D# l j+ aORG 001BH ;定时器T1中断程序入口
1 W$ k; v5 B; t4 [) |. d4 [LJMP INTT1 ;跳至INTT1执行3 I( ?3 ~+ i( k& U+ u3 u
ORG 0023H ;串行中断程序入口地址
$ E4 f: `& Z4 a! g6 qRETI ;串行中断程序返回
) K* h: v! k9 l& t/ K) S- K;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;& a, v- \6 |4 T2 E: n% p T
;; 主 程 序 ;;
n5 E3 R: ]+ [9 Y& n, g;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
5 ]4 R1 N; G. ?( T! \;
0 N* @. X. i) f, q6 T' y+ e- u- ?START: MOV R0,#70H ;清70H-7AH共11个内存单元
) b% _4 `8 Y0 a( ?/ n1 d1 gMOV R7,#0BH 4 g) u0 _/ @- I" F+ @
;clr P3.7 ;
8 @2 M) C; j; i0 K4 U, iCLEARDISP: MOV @R0,#00H ;
0 k2 M) f* y* W/ c0 |; A; p: |INC R0 ;- F3 h) M* P( w/ N/ E' `0 p) {# s7 j
DJNZ R7,CLEARDISP ;
- A5 b! r: o4 CMOV 20H,#00H ;清20H(标志用)
3 f9 I' b3 G2 m9 s' ?6 SMOV 7AH,#0AH ;放入"熄灭符"数据
2 }3 \5 V. g3 C- K& rMOV TMOD,#11H ;设T0、T1为16位定时器
4 Y/ ?* L7 j R% {# I# JMOV TL0,#0B0H ;50MS定时初值(T0计时用)1 d1 O Z* S9 v; l4 a7 X
MOV TH0,#3CH ;50MS定时初值* B+ i. x1 c; S$ Z
MOV TL1,#0B0H ;50MS定时初值(T1闪烁定时用)( c2 J* F4 a9 m2 x5 o c
MOV TH1,#3CH ;50MS定时初值8 {2 e E, w, w0 z0 n% {
SETB EA ;总中断开放
" @$ [9 |+ H4 QSETB ET0 ;答应T0中断( _- T& V% q$ ~' }$ m
SETB TR0 ;开启T0定时器
# U9 j+ S) Z1 g4 XMOV R4,#14H ;1秒定时用初值(50MS×20)
3 U; U9 ?9 I- A. e* OSTART1: LCALL DISPLAY ;调用显示子程序& G7 T" h2 e2 p: I% L! f
JNB P3.7,SETMM1 ;P3.7口为0时转时间调整程序 ' V+ C% M( e+ V4 F+ r' p
SJMP START1 ;P3.7口为1时跳回START1
3 M ?# z- s( {+ w7 s9 R/ ]! [SETMM1: LJMP SETMM ;转到时间调整程序SETMM
5 f8 K$ _1 r& V4 G2 }2 V;
- z# C: H# O: A8 T;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
) d) G @ M( _5 x- b7 H8 H) @;; 1秒计时程序 ;;
n7 t1 m) ]( z5 T;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5 i- i% E7 X2 j
;T0中断服务程序- L/ S# F8 D) t" B7 J9 L8 U( _
INTT0: PUSH ACC ;累加器入栈保护
- j& W8 t( `6 }* l% d2 kPUSH PSW ;状态字入栈保护
$ \5 `% w$ P1 A) _+ E5 x0 d, `CLR ET0 ;关T0中断答应% y4 {6 S9 G1 x
CLR TR0 ;封闭定时器T0* f: G* ? n. [
MOV A,#0B7H ;中断响应时间同步修正
2 s' a: `' V- Z0 ]ADD A,TL0 ;低8位初值修正 W0 Y& P4 A5 \8 |+ h7 K# T
MOV TL0,A ;重装初值(低8位修正值)2 j! U, o9 p$ c# P
MOV A,#3CH ;高8位初值修正
+ ^8 e' W$ X1 O& ?$ d1 m2 ]; U5 u' SADDC A,TH0 ;& q; d' _) L7 G1 L* a( T
MOV TH0,A ;重装初值(高8位修正值)+ m9 _9 V Z! ]' x) X) l
SETB TR0 ;开启定时器T0
7 N3 o6 k' V! x0 aDJNZ R4, OUTT0 ;20次中断未到中断退出 g6 N- }) Q9 a
ADDSS: MOV R4,#14H ;20次中断到(1秒)重赋初值8 ~: [. h/ m* }# r5 g" P
MOV R0,#71H ;指向秒计时单元(71H-72H)7 @3 a0 w( B) {" L0 k7 q1 q; j
ACALL ADD1 ;调用加1程序(加1秒操作)
D( Z8 I. p; u) W7 T; V$ i; gMOV A,R3 ;秒数据放入A(R3为2位十进制数组合)
) h6 C3 U# k) b2 G5 W! V% HCLR C ;清进位标志3 d5 T9 Q6 I/ ?5 G2 Z s) U
CJNE A,#60H,ADDMM ;! D1 K6 X5 ^9 Z# T, U0 \
ADDMM: JC OUTT0 ;小于60秒时中断退出1 U3 R7 @2 o0 I% t8 {, O
ACALL CLR0 ;大于或即是60秒时对秒计时单元清0; e# K) j8 Q- e; c; }) ^5 D
MOV R0,#77H ;指向分计时单元(76H-77H)
+ r4 E" M' K& U( m/ D+ y# Y% DACALL ADD1 ;分计时单元加1分钟. @3 D& s! a0 H6 `# o
MOV A,R3 ;分数据放入A
6 J6 z9 e6 m. ^: Z, t% X. qCLR C ;清进位标志4 f) U" {" Q, U8 {& u: _8 I+ p7 q
CJNE A,#60H,ADDHH ;
) r( L- q" o2 T1 u" ~% i: l2 }ADDHH: JC OUTT0 ;小于60分时中断退出) r q* ?% z, P
ACALL CLR0 ;大于或即是60分时分计时单元清0) I& {3 R2 h7 v! D) R: r) q
MOV R0,#79H ;指向小时计时单(78H-79H)
% k+ a& ^& x' c6 k0 \ACALL ADD1 ;小时计时单元加1小时
9 U4 W1 _6 s( E9 z+ x- S" ^MOV A,R3 ;时数据放入A7 G1 G, D, G4 Y7 v% D( l
CLR C ;清进位标志. X( q2 `* g( y
CJNE A,#24H,HOUR ;; s8 J; ^+ O+ a7 A1 d. W& O
HOUR: JC OUTT0 ;小于24小时中断退出
# x% z: t2 C3 `# I+ NACALL CLR0 ;大于或即是24小时小时计时单元清0& k$ | A7 T+ H# I. S3 I+ y- J
OUTT0: MOV 72H,76H ;中断退出时将分、时计时单元数据移
; s* F* R! D I. C9 xMOV 73H,77H ;入对应显示单元9 n) j# ]$ X% q# f+ B! z: S
MOV 74H,78H ;2 N+ q) c) ^+ Z; K1 F$ W8 o
MOV 75H,79H ;5 @; d& }! p: F# X0 h1 M
POP PSW ;恢复状态字(出栈)' x. l2 Q" O$ O6 L2 m, S6 u' k. {
POP ACC ;恢复累加器- Q: Y3 T7 \+ V' d4 U6 Z# M5 z
SETB ET0 ;开放T0中断
/ v6 R9 y/ v3 n- d" H% v; [2 Z0 ?3 ]: GRETI ;中断返回
& M' P* f7 T. _. t/ h/ U;5 T0 r- \- v$ w/ l+ n% g9 ?
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;$ ]+ Q) K* f& d& G1 T. d6 h* W+ V# `
;; 闪动调时 程 序 ;;
9 C2 C/ q6 ?, g6 M;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3 d; x" s' a5 {$ P( h;T1中断服务程序,用作时间调整时调整单元闪烁指示
! ~3 y% U+ T" eINTT1: PUSH ACC ;中断现场保护# `8 V0 ~7 {, @4 I; e2 L& R
PUSH PSW ;
) ~5 I, R2 V0 G5 n/ y4 D% _MOV TL1, #0B0H ;装定时器T1定时初值3 m1 N+ P6 S$ L3 a. }* q
MOV TH1, #3CH ;
4 ]7 c( T% z# y) x1 t, {DJNZ R2,INTT1OUT ;0.3秒未到退出中断(50MS中断6次)
( c! R7 B( j0 ~* W8 S, ?) {MOV R2,#06H ;重装0.3秒定时用初值) E. V- t7 v6 q# U: s
CPL 02H ;0.3秒定时到对闪烁标志取反/ [# [* @% T8 p2 q$ [) l
JB 02H,FLASH1 ;02H位为1时显示单元"熄灭"- z2 a$ Q/ l2 a3 p$ h! p
MOV 72H,76H ;02H位为0时正常显示
/ i9 V, d' }; oMOV 73H,77H ;
+ ` X3 K2 O4 W9 Q wMOV 74H,78H ;
& q* x: P. y8 gMOV 75H,79H ;# m6 X% h9 `( D! E7 Q I6 j
INTT1OUT: POP PSW ;恢复现场6 k0 G6 h+ X9 R ^2 d6 K
POP ACC ;! g9 m# U5 J0 U7 ]
RETI ;中断退出) @, P) _$ Z4 I2 e8 q
FLASH1: JB 01H,FLASH2 ;01H位为1时,转小时熄灭控制: s7 r! ]) [8 Z- K* w1 p
MOV 72H,7AH ;01H位为0时,"熄灭符"数据放入分
& b( D# X6 [. T# ~$ h+ ?" PMOV 73H,7AH ;显示单元(72H-73H),将不显示分数据
8 m$ B9 A/ j2 ]MOV 74H,78H ;
+ o- _- s3 l2 C* N+ ]MOV 75H,79H ;
4 z- X) M! p& \: w7 x8 r, zAJMP INTT1OUT ;转中断退出& V( l% W! t9 ~* v9 @6 s. a9 D
FLASH2: MOV 72H,76H ;01H位为1时,"熄灭符"数据放入小时& w8 y# d: v* ]
MOV 73H,77H ;显示单元(74H-75H),小时数据将不显示
4 R& y/ C. ^/ g! l- J: ^- e4 A% [MOV 74H,7AH ;
' y, q* z" D2 a' e6 S+ yMOV 75H,7AH ;
2 v! d' X2 O1 eAJMP INTT1OUT ;转中断退出
8 N' k3 O) s' P7 C: S;! n3 ?+ Y. ^) P. A
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
: A2 C- v' R5 ]; F;; 加1子 程 序 ;;# |- f0 a/ }6 a4 i
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;- ]% u) }. f; z& Y ?3 X
;
! I3 @: P$ U4 _5 TADD1: MOV A,@R0 ;取当前计时单元数据到A; R) X; r1 a/ g4 |1 }. r/ A6 Q# S
DEC R0 ;指向前一地址) ~+ m6 Z! O- ` K1 Y
SWAP A ;A中数据高四位与低四位交换
2 F! e2 _# j) u6 n ZORL A,@R0 ;前一地址中数据放入A中低四位1 L g9 A+ Y4 Q- g
ADD A,#01H ;A加1操作- J1 _+ s/ K& p5 g# @! o8 x0 a
DA A ;十进制调整 Q# m3 X4 k" [$ b, Z
MOV R3,A ;移入R3寄存器
7 e v6 ~5 {* H8 q% JANL A,#0FH ;高四位变0
% H, k# F9 b$ @MOV @R0,A ;放回前一地址单元* @! N8 d# j; ~
MOV A,R3 ;取回R3中暂存数据
3 C/ q. M2 L. |! ]& v# c- S g( ZINC R0 ;指向当前地址单元
! {" u4 W' I1 Z0 jSWAP A ;A中数据高四位与低四位交换
1 {3 }$ s' S; @7 e) eANL A,#0FH ;高四位变05 {/ X! m1 ~ L0 v4 c
MOV @R0,A ;数据放入当削地址单元中8 ~: u2 X! }* y6 @
RET ;子程序返回, n) ~6 B4 y4 @# U1 X- q2 b/ F
;8 ~* P; I7 ^! ~/ k N0 n& @/ p
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
, b1 f# y3 @& K/ B;; 清零程序 ;;
9 E7 d) H, w# [8 m$ f; w2 };;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;) `, B" p+ Y; n, W2 h0 c8 w
;............." f4 a; d, r4 R4 `( Q3 V
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2 D& p) A4 k1 x5 @( n* Q;; 时钟调整程序 ;;0 k$ r, \9 R. d% M# k8 B4 J
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
$ A0 ^* }. U) u* ?% y;当调时按键按下时进入此程序$ w3 _1 Y; C- F' F8 s+ u
SETMM: cLR ET0 ;关定时器T0中断
7 w. p0 f4 x5 NCLR TR0 ;封闭定时器T0
$ R+ t# a! f1 A6 I. ?! O; L: c x' `LCALL DL1S ;调用1秒延时程序
& R/ i+ e! W; NJB P3.7,CLOSEDIS ;键按下时间小于1秒,封闭显示(省电)
' t2 H; O) a" n2 s: wMOV R2,#06H ;进入调时状态,赋闪烁定时初值
. v2 U* D- Q8 A; G0 H6 NSETB ET1 ;答应T1中断+ `; v: w: m" u, x) i7 f
SETB TR1 ;开启定时器T1
0 j1 k/ z0 |. z# p, kSET2: JNB P3.7,SET1 ;P3.7口为0(键未开释),等待
( m- P5 K3 E6 q* kSETB 00H ;键开释,分调整闪烁标志置1
3 a1 w& Y$ Y# \7 kSET4: JB P3.7,SET3 ;等待键按下" l1 i& y' z3 w- q: [
LCALL DL05S ;有键按下,延时0.5秒$ \: t b' _# h3 d8 y
JNB P3.7,SETHH ;按下时间大于0.5秒转调小时状态. U- D9 `3 D4 K
MOV R0,#77H ;按下时间小于0.5秒加1分钟操作
+ y0 [/ P b1 ~5 p( D+ ^" XLCALL ADD1 ;调用加1子程序! a1 @; e. B2 c# U4 r: P3 S' q& Y
MOV A,R3 ;取调整单元数据
9 Z8 a( X* a% q' @- wCLR C ;清进位标志0 [# }+ f6 V: D& Y5 ?; X
CJNE A,#60H,HHH ;调整单元数据与60比较$ p; g; c1 ?* @3 @) D% I
HHH: JC SET4 ;调整单元数据小于60转SET4循环
1 e) ]& @' t" P; d* vLCALL CLR0 ;调整单元数据大于或即是60时清0
5 A+ ~& F& h0 ]1 k9 a' vCLR C ;清进位标志
2 X- }, `' J+ D- V) EAJMP SET4 ;跳转到SET4循环$ v8 A" S7 _4 j, ~
CLOSEDIS: SETB ET0 ;省电(LED不显示)状态。开T0中断
2 E4 T* ^. o5 qSETB TR0 ;开启T0定时器(开时钟)* x% c: h* P. z% t7 P( d/ w
CLOSE: JB P3.7,CLOSE ;无按键按下,等待。
0 ~# a6 {7 F7 p0 a8 u% ~LCALL DISPLAY ;有键按下,调显示子程序延时削抖
, X) o2 P! i4 X+ z% p! @7 FJB P3.7,CLOSE ;是干扰返回CLOSE等待
1 s( m6 `$ b: Q( P; {1 a# r1 vWAITH: JNB P3.7,WAITH ;等待键开释
/ q- B/ c% j' c& R/ I9 L8 ZLJMP START1 ;返回主程序(LED数据显示亮); T+ g" v: I1 f% q. |/ i
SETHH: CLR 00H ;分闪烁标志清除(进入调小时状态)
" t1 E1 _, K6 B6 Q- P. QSETHH1: JNB P3.7,SET5 ;等待键开释
! E( M+ m* D+ e8 [; |+ ~' QSETB 01H ;小时调整标志置1" p. X% H# |3 Q% z$ j' w
SET6: JB P3.7,SET7 ;等待按键按下4 S9 n0 \2 h$ c
LCALL DL05S ;有键按下延时0.5秒( Q L/ Q, n+ Y( L! ^$ Q G
JNB P3.7,SETOUT ;按下时间大于0.5秒退出时间调整 l2 N# a0 n; A3 b$ a& c" U; z
MOV R0,#79H ;按下时间小于0.5秒加1小时操作- e) _2 Y# p5 ^% n; @
LCALL ADD1 ;调加1子程序
! d# i5 e0 q; X/ w) LMOV A,R3 ; x' L! L+ ?5 z% X3 v% @- H! T! J5 g" }4 O
CLR C ;
% V$ J3 L; N+ {' Q5 ECJNE A,#24H,HOUU ;计时单元数据与24比较
2 ]( c8 q1 k( V) wHOUU: JC SET6 ;小于24转SET6循环
! l1 V: B1 p) B/ `/ }6 yLCALL CLR0 ;大于或即是24时清0操作! r F$ P) P2 i) s8 ?# @
AJMP SET6 ;跳转到SET6循环. e6 x% b6 C$ }8 V3 _( ` J
SETOUT: JNB P3.7,SETOUT1 ;调时退出程序。等待键开释& q" J5 G7 b& c' ^
LCALL DISPLAY ;延时削抖
1 o3 w) z9 c9 m. `JNB P3.7,SETOUT ;是抖动,返回SETOUT再等待
* z& F! K; U* g4 R, i0 aCLR 01H ;清调小时标志5 v& d! f! i( M7 m' `" P
CLR 00H ;清调分标志( u( F- X; k# d
CLR 02H ;清闪烁标志
, W& F4 X, r: H) a6 vCLR TR1 ;封闭定时器T1+ T( n, Q% [$ H( W
CLR ET1 ;关定时器T1中断
9 Z# R1 N! b2 H$ sSETB TR0 ;开启定时器T0
0 _! _" ~1 O3 d9 V/ p+ GSETB ET0 ;开定时器T0中断(计时开始)
* K) g, X1 T# Q v8 i9 X: C; SLJMP START1 ;跳回主程序0 ^- s6 G7 |; i7 O; O, O+ i5 X
SET1: LCALL DISPLAY ;键开释等待时调用显示程序(调分)* R& M, G4 C ?# Q$ K0 L
AJMP SET2 ;防止键按下时无时钟显示% ?4 {; }5 ]4 Q$ ~6 X
SET3: LCALL DISPLAY ;等待调分按键时时钟显示用
$ p( Y4 @- l2 E; N H9 hAJMP SET4
# m- R* f. E3 G0 g% TSET5: LCALL DISPLAY ;键开释等待时调用显示程序(调小时)) `* b0 @+ ]/ r
AJMP SETHH1 ;防止键按下时无时钟显示
* X, J3 z! X- q8 i8 ASET7: LCALL DISPLAY ;等待调小时按键时时钟显示用
" d; J$ E1 E. Q3 r" {! @ [AJMP SET6
; F# w- C3 d8 a9 bSETOUT1: LCALL DISPLAY ;退出时钟调整时键开释等待
. x6 c: c/ O0 x. d" V6 c# t/ iAJMP SETOUT ;防止键按下时无时钟显示0 E8 [% @4 C F" u# G* _' R
;
" a4 Y2 o9 o6 b4 }0 I# F/ e1 k( m5 O;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;- v% l. ?% r* K5 v3 d$ i$ U# R8 R& {
;; 显示程序 ;;$ Z0 B( P* R- N( n% `3 }$ Y/ m
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" S& z6 e) P$ Z+ k
$$$$$$$$$$$$$$$$$$$$$$$$$$$$ I+ J6 r$ P' n$ w
;1MS延时程序,LED显示程序用; m* o. g2 Z3 Z i$ ~$ Z
DL1MS: MOV R6,#14H) J8 G& B, ]8 U5 K- q
DL1: MOV R7,#19H0 R. U* p9 g @+ J0 Q ^1 I
DL2: DJNZ R7,DL2. k" u; _8 i5 Z6 {' {
DJNZ R6,DL18 Z6 b9 ~3 J' u# [# G
RET1 E0 h9 P& x+ z- l4 H
;20MS延时程序,采用调用显示子程序以改善LED的显示闪烁现象! u" T2 x7 U" F) y( d- {
DS20MS: ACALL DISPLAY( i5 C* d8 h' F+ b: v+ f' p
ACALL DISPLAY
G( P; {0 P Y" I" B+ X/ ~3 LACALL DISPLAY
7 s0 l/ ~9 {5 o1 _# W# r$ WRET F) C E* [ K! `9 {7 ?& b
;延时程序,用作按键时间的长短判定/ C# Z9 W; d3 [. `
DL1S: LCALL DL05S
! ]- H. c4 W9 m- ^+ t0 R5 OLCALL DL05S
6 U. \" i6 q" Z- i d- W% C- TRET a- M+ ?8 U" _- E* `" e
DL05S: MOV R3,#20H ;8毫秒*32=0.196秒& ^( Q+ B" ?. B3 B5 u8 J
DL05S1: LCALL DISPLAY. W" u J/ v+ s& K8 B7 F
DJNZ R3,DL05S1
! \7 C A+ e# nRET
+ U* L! O* m$ BEND ;程序结束- A+ \1 l, c8 h' ^5 C
|