51单片机作的电子钟程序在很多地方已经有了介绍, 对于单片机学习者而言这个程序基本上是一道门槛,掌握了电子钟程序, 基本上可以说51单片机就掌握了80%。常见的电子钟程序由显示部分, 计算部分, 时钟调整部分构成。
" {) P8 M' s' o 时钟的基本显示原理:时钟开始显示为0时0分0秒,也就是数码管显示000000,然后每秒秒位加1 ,到9后,10秒位加1,秒位回0。10秒位到5后,即59秒 ,分钟加1,10秒位回0。依次类推,时钟最大的显示值为23小时59分59秒。这里只要确定了1秒的定时时间, 其他位均以此为基准往上累加。 5 {2 B4 U9 f* G2 y
开始程序定义了秒, 十秒, 分, 十分,小时, 十小时,共6位的寄存器, 分别存在30h,31h,32h,33h,34h,35h单元,便于程序以后调用和理解。 * F, m( E2 y( s' I1 X: s
6个数码管分别显示时、分、秒,一个功能键,可以切换调整时分秒、增加数值、熄灭节电等功能全部集一键。 8 f2 w" Z( T* k2 u' ]* @+ g* H
9 I$ B% V* C! [, _ ! }! L U0 J, D
% ~1 V5 B! l. i$ M
以下是部分汇编源程序,购买我们产品后我们用光盘将完整的单片机汇编源程序和烧写文件送给客户。- {; [& ` n* @
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
6 \( B# y5 P/ |/ d;; 中断入口程序 ;; (仅供参考)9 s4 M- z) F9 v( N& k4 n1 ]
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;& f- ?2 \4 [2 _8 p/ [$ J9 C
;
_5 l: K4 L: {! tORG 0000H ;程序执行开始地址# C" j+ y: m( c$ K
LJMP START ;跳到标号START执行
: Z. F, ]! s& zORG 0003H ;外中断0中断程序入口
; k) h% X& t# Z( M, z( ~RETI ;外中断0中断返回
5 n4 b9 U: |2 K7 O, h' h9 L8 JORG 000BH ;定时器T0中断程序入口 R$ h+ ] B3 |5 S- r! F( y
LJMP INTT0 ;跳至INTTO执行3 Z% u# z# x h
ORG 0013H ;外中断1中断程序入口
( p2 ~- k5 }4 L6 uRETI ;外中断1中断返回
& l* v- J/ ^: [( b# d9 hORG 001BH ;定时器T1中断程序入口4 [* m" i, x4 y3 O1 N
LJMP INTT1 ;跳至INTT1执行8 S" \* L* |2 _) o
ORG 0023H ;串行中断程序入口地址' e( C! S ?$ O1 r w$ |" j
RETI ;串行中断程序返回+ Z) ]9 ~) T* C P: m
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;' m9 r) J3 e: I* J9 V- O
;; 主 程 序 ;;
8 a& F7 n+ H' {; q9 `;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3 S% g* G' D8 E' N& W;
1 e3 O* s1 M, T0 S. k9 a; N* @START: MOV R0,#70H ;清70H-7AH共11个内存单元
4 l+ R5 G9 j [4 TMOV R7,#0BH , I+ g+ s: J, T
;clr P3.7 ;7 q& U: u3 U+ g2 f1 j; X
CLEARDISP: MOV @R0,#00H ;
/ ~' Q* r- V1 h; [/ BINC R0 ;" u8 ?0 ~" D2 t
DJNZ R7,CLEARDISP ;' y9 S4 j3 U; T) T4 \# s8 ]. `
MOV 20H,#00H ;清20H(标志用)
0 p8 |7 o& h5 h; `" U8 W6 g# d% FMOV 7AH,#0AH ;放入"熄灭符"数据. z ~$ S; w! m) i
MOV TMOD,#11H ;设T0、T1为16位定时器7 M f* e `% N% P* v3 M0 m
MOV TL0,#0B0H ;50MS定时初值(T0计时用)
2 @; g2 R# D' D% X4 A; b3 H* c0 Z }MOV TH0,#3CH ;50MS定时初值
5 k2 f( Q1 y8 P {; }. h" nMOV TL1,#0B0H ;50MS定时初值(T1闪烁定时用)6 A( ~+ ^) G. Y( n8 P8 c% J, y! K
MOV TH1,#3CH ;50MS定时初值
7 W4 |, i+ A; BSETB EA ;总中断开放! C5 M6 [" Q+ w" z0 Z, _
SETB ET0 ;答应T0中断
4 r/ `/ m; y7 I+ j! x/ ySETB TR0 ;开启T0定时器( d5 h0 i+ k8 }' L' B
MOV R4,#14H ;1秒定时用初值(50MS×20)
' N8 `/ z9 f! x4 l, W0 T5 u7 t" JSTART1: LCALL DISPLAY ;调用显示子程序
/ N, g7 q: P5 {) r* G, ]5 i5 w8 u* sJNB P3.7,SETMM1 ;P3.7口为0时转时间调整程序
8 c" n; j. A$ TSJMP START1 ;P3.7口为1时跳回START1
9 ^* P( Z$ w" \9 ZSETMM1: LJMP SETMM ;转到时间调整程序SETMM) f/ g2 P$ W* ~; y9 t
;$ ~, B1 r9 r1 {! V
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;) x+ P+ l: Y$ r6 m R1 F7 T8 a
;; 1秒计时程序 ;;) g3 D R/ |% p1 J
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
6 D9 U3 `9 {+ M;T0中断服务程序. b7 O7 f" S. v5 Q w$ {, T: W
INTT0: PUSH ACC ;累加器入栈保护/ | M% O7 m) f' _$ X( U4 _
PUSH PSW ;状态字入栈保护
% v5 b. ]( {+ |0 R' b( Q5 J3 aCLR ET0 ;关T0中断答应# b0 F2 @3 `. D8 }' k: r9 _
CLR TR0 ;封闭定时器T0 H# V" @* `; M$ N5 z; l
MOV A,#0B7H ;中断响应时间同步修正" |! K+ @$ o# e9 N- y+ x8 d! ?: e
ADD A,TL0 ;低8位初值修正: P+ y8 S# K8 l) J/ G7 f1 ]$ Z' ?
MOV TL0,A ;重装初值(低8位修正值)8 m0 x6 D5 N7 c! R5 d4 R
MOV A,#3CH ;高8位初值修正- Q# M) h& y- f# H
ADDC A,TH0 ;
( t. f4 X/ D* o/ e; vMOV TH0,A ;重装初值(高8位修正值)
4 N5 f. C4 g! D* D9 c3 ]SETB TR0 ;开启定时器T0* l: }- ?+ \0 e: J" w& c
DJNZ R4, OUTT0 ;20次中断未到中断退出
7 M; e) D/ \- [' s; ^) h+ U" O1 RADDSS: MOV R4,#14H ;20次中断到(1秒)重赋初值( s+ d `: I! J4 }
MOV R0,#71H ;指向秒计时单元(71H-72H)
0 _0 N$ P: Z- NACALL ADD1 ;调用加1程序(加1秒操作)# B2 u2 _7 Z& \1 j9 W/ ~
MOV A,R3 ;秒数据放入A(R3为2位十进制数组合)
; u# A, t) n" e: E+ x4 h6 G- l& mCLR C ;清进位标志0 b% w: T5 v9 j8 {: h4 \5 n, i
CJNE A,#60H,ADDMM ;
4 q' H* |0 r' m8 d! C: iADDMM: JC OUTT0 ;小于60秒时中断退出6 w3 R3 y+ Z+ n& t' Y4 B: t% [
ACALL CLR0 ;大于或即是60秒时对秒计时单元清0/ Z+ J2 Z) I# k8 H
MOV R0,#77H ;指向分计时单元(76H-77H)' [1 h' ~) O4 N+ D# n
ACALL ADD1 ;分计时单元加1分钟; \3 h2 _; s# N8 N
MOV A,R3 ;分数据放入A# I( R3 [& p! V' x, K' y
CLR C ;清进位标志' o7 u: T/ M3 Q' \; e4 E- O* N' p
CJNE A,#60H,ADDHH ;
$ U( a2 u" ~6 G9 Y0 t9 D2 iADDHH: JC OUTT0 ;小于60分时中断退出6 U. Y0 C+ C6 [8 F8 ^
ACALL CLR0 ;大于或即是60分时分计时单元清0) u/ b% ?1 `9 g6 W9 \# a! w( v
MOV R0,#79H ;指向小时计时单(78H-79H), v! O: [4 e k# u
ACALL ADD1 ;小时计时单元加1小时
6 L* z$ D; Q# ^MOV A,R3 ;时数据放入A- E& b8 I8 ?) L, u3 A
CLR C ;清进位标志; W4 e3 `0 `0 s- D# b" v
CJNE A,#24H,HOUR ;# B5 c, n Z6 a+ `6 T$ @' F) K/ Q. N
HOUR: JC OUTT0 ;小于24小时中断退出
, @& _$ z+ K- N+ R& D* G F( KACALL CLR0 ;大于或即是24小时小时计时单元清06 k2 e* c: d, b5 l
OUTT0: MOV 72H,76H ;中断退出时将分、时计时单元数据移- h( B* g/ W/ X) j' ^; J8 \. ^
MOV 73H,77H ;入对应显示单元
7 J" w/ @6 {( K7 BMOV 74H,78H ;! ~3 F* ]1 j4 S/ X: P$ y! J
MOV 75H,79H ;% H; g% d" R% C* B! B" h+ V& _* K
POP PSW ;恢复状态字(出栈)% s2 n- ~' t% ?8 Q) f# M
POP ACC ;恢复累加器- Y4 E# k' ]) p
SETB ET0 ;开放T0中断
" H+ \# r% O# w/ _7 uRETI ;中断返回, S: m9 o3 Y! E5 Z/ d
;
v+ N% {3 d" m8 w( G6 ~! t;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4 `7 Z8 w% t V) ~; k
;; 闪动调时 程 序 ;;
0 |. V& Y6 j3 f$ a! `7 f; B; ?;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; T+ u4 ?/ \ u+ d
;T1中断服务程序,用作时间调整时调整单元闪烁指示
; W: y+ Z; T8 {2 r, DINTT1: PUSH ACC ;中断现场保护
) Z/ v9 @: K/ ]' vPUSH PSW ;
& R6 n' h; b& J2 J5 [3 j3 @* TMOV TL1, #0B0H ;装定时器T1定时初值
" b- y0 I, X, p7 ^3 ^6 K. W$ p# g+ JMOV TH1, #3CH ;
) W P' _( |7 ^* u& Z9 ODJNZ R2,INTT1OUT ;0.3秒未到退出中断(50MS中断6次)2 O# t4 f" t0 a5 d( E
MOV R2,#06H ;重装0.3秒定时用初值
, r: X- j, Z; C' PCPL 02H ;0.3秒定时到对闪烁标志取反! O. ?( T! [; C" P; e! t
JB 02H,FLASH1 ;02H位为1时显示单元"熄灭"! C/ ]5 U$ e3 W* d4 Z. V) I! D
MOV 72H,76H ;02H位为0时正常显示, b' A( x* K" E6 L
MOV 73H,77H ;
% e0 Z# D2 Z' h" _# M2 X6 `MOV 74H,78H ;
6 y0 p2 H" j/ N' sMOV 75H,79H ;& j" T5 ?- E/ ?4 S# W
INTT1OUT: POP PSW ;恢复现场
# O9 \) O9 v2 r1 _POP ACC ;$ h3 ~% B- m% E! A! Y8 c, W
RETI ;中断退出
% e$ N2 N0 p6 J% C# |FLASH1: JB 01H,FLASH2 ;01H位为1时,转小时熄灭控制
) @- |4 h( T' L! lMOV 72H,7AH ;01H位为0时,"熄灭符"数据放入分
5 D6 j% S) G. o& y2 EMOV 73H,7AH ;显示单元(72H-73H),将不显示分数据
/ C$ `3 v5 Q( k9 N& A% n* v/ SMOV 74H,78H ;
J. P, c$ U/ JMOV 75H,79H ;2 b) O" V) [0 L2 E9 o, l, v
AJMP INTT1OUT ;转中断退出
" Y, _% C" n9 r( N" e* rFLASH2: MOV 72H,76H ;01H位为1时,"熄灭符"数据放入小时
6 m$ |4 d2 V' Y" Z1 Z9 O5 jMOV 73H,77H ;显示单元(74H-75H),小时数据将不显示$ u" L# t: o: I, R
MOV 74H,7AH ;
5 P ?% i. E( r jMOV 75H,7AH ;3 ^$ O+ d3 i+ }9 J/ Y" h' P
AJMP INTT1OUT ;转中断退出
8 b% m6 T* u' O. m' Q;. T/ s" G6 B- u
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
6 s+ Z: B( l! B8 |. X;; 加1子 程 序 ;;9 ?% C0 M3 W3 a
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; P$ E$ h" v$ w7 ^;
' r& \* @3 }2 K( U( VADD1: MOV A,@R0 ;取当前计时单元数据到A
* K6 F8 a- G+ uDEC R0 ;指向前一地址$ S8 d# S8 {: {7 ?7 \/ c# c% _
SWAP A ;A中数据高四位与低四位交换# I# d8 O7 d% \" w7 {
ORL A,@R0 ;前一地址中数据放入A中低四位1 v F, J) h$ X0 E7 U% z
ADD A,#01H ;A加1操作6 @1 W6 l( Q" z0 @5 e! `9 j
DA A ;十进制调整
2 E4 @8 f7 X8 U, X3 W; d3 nMOV R3,A ;移入R3寄存器
5 x- @3 Z4 R1 r9 h- B' DANL A,#0FH ;高四位变0
4 p0 F( f& W3 O# MMOV @R0,A ;放回前一地址单元, B; [/ z& p, X a& ~* D% e. K
MOV A,R3 ;取回R3中暂存数据2 y. j- c+ @, p1 q; h2 ?
INC R0 ;指向当前地址单元2 T) U0 _+ B6 }6 g7 T
SWAP A ;A中数据高四位与低四位交换
% N6 j" b5 ?& D- Y0 j9 oANL A,#0FH ;高四位变0
1 K$ c) p9 t' X) Y8 XMOV @R0,A ;数据放入当削地址单元中
6 {5 @6 A5 X* z6 a- ^# B' V9 K9 d8 HRET ;子程序返回
5 N1 }8 Z; t; Z& g/ s! C4 W;
) t5 r; a0 @: v. V0 t# }4 g;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;, ?9 Q/ I/ H' g( N
;; 清零程序 ;;/ H* u* K: B% A5 R6 s6 o7 D! `
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
) p x2 a- V3 I+ M) Q;.............
4 z5 a% u* A( F$ s0 B' Z) H;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Q8 V% [# l8 [0 t( x;; 时钟调整程序 ;;% Q# e2 x& V( o( ] o& A
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; G7 l& l! g3 ~( q4 X6 \
;当调时按键按下时进入此程序6 K. ~$ Z" d* @ K+ U/ p; l4 F$ C
SETMM: cLR ET0 ;关定时器T0中断
6 e' e2 L# W& p( k' b3 \& b- Z2 zCLR TR0 ;封闭定时器T0) z8 i& w* w& f; c# D$ G, I
LCALL DL1S ;调用1秒延时程序
$ i# k W# x* a8 A& b) T9 K0 a- xJB P3.7,CLOSEDIS ;键按下时间小于1秒,封闭显示(省电)2 l, x% F% \& z. @( W: o7 ?3 X/ L# a
MOV R2,#06H ;进入调时状态,赋闪烁定时初值
8 [* l5 y$ p% i/ V1 U6 zSETB ET1 ;答应T1中断3 j) |% Q. O# o; ~
SETB TR1 ;开启定时器T1
2 a2 m3 w1 ^8 p9 P- P5 ISET2: JNB P3.7,SET1 ;P3.7口为0(键未开释),等待
4 q8 l$ z4 T8 o' ^* n: JSETB 00H ;键开释,分调整闪烁标志置12 u5 ?, v8 v1 P9 N
SET4: JB P3.7,SET3 ;等待键按下) R# G) n- ~# y9 }2 ]1 k
LCALL DL05S ;有键按下,延时0.5秒
3 Z% m- S/ n" G+ [* \& g! {+ w! W1 OJNB P3.7,SETHH ;按下时间大于0.5秒转调小时状态
6 F% ~, d5 M5 @# h7 q, NMOV R0,#77H ;按下时间小于0.5秒加1分钟操作
0 ?5 }- q) u. _7 MLCALL ADD1 ;调用加1子程序) |7 K$ @' C# l: Z7 I- ~
MOV A,R3 ;取调整单元数据- P1 ^) t0 X7 g m9 N6 g( \8 |
CLR C ;清进位标志
( T( |# w6 Z* Z( C2 r0 e) \* Y/ ECJNE A,#60H,HHH ;调整单元数据与60比较
( ^" x S; D2 m2 t7 c( \HHH: JC SET4 ;调整单元数据小于60转SET4循环
3 a: ^ d! ^% R( J1 ]LCALL CLR0 ;调整单元数据大于或即是60时清0! {. ?$ O0 B! `
CLR C ;清进位标志
* f( W% {% s. e& Z# h" hAJMP SET4 ;跳转到SET4循环
( k5 s: o: b' ^/ j! k6 E+ c, uCLOSEDIS: SETB ET0 ;省电(LED不显示)状态。开T0中断
: ~5 p |, ]8 {1 i9 i: s+ l* }SETB TR0 ;开启T0定时器(开时钟)
# w$ G. y, m" N+ YCLOSE: JB P3.7,CLOSE ;无按键按下,等待。
6 G* q3 n0 L8 uLCALL DISPLAY ;有键按下,调显示子程序延时削抖
4 E* m0 I) j$ e+ f. ?JB P3.7,CLOSE ;是干扰返回CLOSE等待0 ?$ Y9 G( u0 b# l8 G2 ^
WAITH: JNB P3.7,WAITH ;等待键开释, @2 m! V4 F" e
LJMP START1 ;返回主程序(LED数据显示亮)
; L9 t# i( q" N3 Z9 xSETHH: CLR 00H ;分闪烁标志清除(进入调小时状态). k1 I7 ?# `5 X& u
SETHH1: JNB P3.7,SET5 ;等待键开释& |3 q" C. J4 w$ X* d L0 J8 l) c
SETB 01H ;小时调整标志置1
% k2 A, Q5 m, WSET6: JB P3.7,SET7 ;等待按键按下4 V/ s' Y9 z z. H+ H
LCALL DL05S ;有键按下延时0.5秒: b& c7 p" }; b
JNB P3.7,SETOUT ;按下时间大于0.5秒退出时间调整$ T3 q! c8 c+ Y1 l7 g4 U/ C7 G
MOV R0,#79H ;按下时间小于0.5秒加1小时操作
# O8 Y) k6 C* e' @! V6 ^" TLCALL ADD1 ;调加1子程序$ ^3 w! R( Y! ~
MOV A,R3 ;
3 k: Q7 G9 v# a5 [% W3 X8 h7 J0 QCLR C ;
- D8 V" K- P9 j- lCJNE A,#24H,HOUU ;计时单元数据与24比较
0 J* V4 }4 \' E+ L7 B$ T4 ~, ~. jHOUU: JC SET6 ;小于24转SET6循环 A3 L# ?: x9 H* J, q9 F
LCALL CLR0 ;大于或即是24时清0操作
4 n( z: a. v5 J" ]* T( u8 p# fAJMP SET6 ;跳转到SET6循环9 @4 N- m \5 V6 t' X
SETOUT: JNB P3.7,SETOUT1 ;调时退出程序。等待键开释
" N; [6 O& V1 _LCALL DISPLAY ;延时削抖
+ {1 U$ t5 d7 A2 V0 a2 FJNB P3.7,SETOUT ;是抖动,返回SETOUT再等待3 m. y9 b0 y) G2 _& B1 ?% @8 r3 i
CLR 01H ;清调小时标志% N# s7 I% D+ u
CLR 00H ;清调分标志0 l/ N- T+ K |4 v! c) f, P6 q0 n
CLR 02H ;清闪烁标志
/ \6 Y- {( Y( M5 R+ ACLR TR1 ;封闭定时器T1% a9 V9 y5 Y0 W1 {
CLR ET1 ;关定时器T1中断
0 H H8 z0 P; D9 \SETB TR0 ;开启定时器T0
7 D% Y; T% f; a6 F" p+ b& nSETB ET0 ;开定时器T0中断(计时开始)' H) j$ O$ E2 f8 C ]" y7 V) ?
LJMP START1 ;跳回主程序* h0 i% v5 z0 z2 r+ o5 r
SET1: LCALL DISPLAY ;键开释等待时调用显示程序(调分)
( Y& e) t, V: G, G7 A# @( b7 n8 }! aAJMP SET2 ;防止键按下时无时钟显示 l7 N: i$ P! d$ f: L
SET3: LCALL DISPLAY ;等待调分按键时时钟显示用
: r% ?7 d$ w" y+ LAJMP SET4) Y! {+ v% W- S$ Q3 K
SET5: LCALL DISPLAY ;键开释等待时调用显示程序(调小时) b1 G9 H! r3 F
AJMP SETHH1 ;防止键按下时无时钟显示4 I% q, X+ _5 B
SET7: LCALL DISPLAY ;等待调小时按键时时钟显示用7 q' d5 \+ Q1 H- X3 C2 ~6 h
AJMP SET6
. O+ h/ U0 N7 W# t# ~7 {SETOUT1: LCALL DISPLAY ;退出时钟调整时键开释等待
2 p/ |0 L: p8 `8 C" gAJMP SETOUT ;防止键按下时无时钟显示
: P! u, V' i( \5 O% d2 P! D! e$ m;" I, ~4 `6 @% f4 e! }( q. q
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
: `& w) B% v# M/ r5 ^2 K8 M% f+ T;; 显示程序 ;;# ^5 O5 v: g0 S% x, }5 ?
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;) @" Y% t D7 I2 C; l
$$$$$$$$$$$$$$$$$$$$$$$$$$$
, o: A2 v) ]7 Q7 k0 g& a;1MS延时程序,LED显示程序用9 G' j, y3 O8 m' T4 N+ V
DL1MS: MOV R6,#14H/ P& W- N! m; X8 A0 T
DL1: MOV R7,#19H! ]+ ?0 r) H) T( {3 i5 O# l( ^+ ^
DL2: DJNZ R7,DL2
9 o* o6 d; ]( s' q$ s2 j# EDJNZ R6,DL18 X2 K" E/ ?2 _2 Y
RET! Z7 h3 v I2 Z3 H4 A9 m& p
;20MS延时程序,采用调用显示子程序以改善LED的显示闪烁现象
0 w1 f3 @3 V* s! Z* \1 v: u iDS20MS: ACALL DISPLAY
0 y; q7 n7 ?; {: S7 y2 h5 cACALL DISPLAY
4 h" Z4 I& x2 u$ bACALL DISPLAY
8 l5 a; I; S( ORET
% ]2 X0 J( C7 f5 M3 \/ S;延时程序,用作按键时间的长短判定
+ V% Z% [3 r' `" j. H' n. Q, @DL1S: LCALL DL05S7 z9 ?9 H' K' f9 q9 z5 x
LCALL DL05S
8 `1 u# ^- k' O: y& u4 [) _RET
4 ~4 r& I- o/ s# g2 e2 nDL05S: MOV R3,#20H ;8毫秒*32=0.196秒+ z; i8 f6 d7 B
DL05S1: LCALL DISPLAY
" h; V' K E0 @. U0 ~. \, ~4 \DJNZ R3,DL05S1
) ]/ J2 ?# h# C0 _RET2 v4 q; R3 o4 }8 p b7 V
END ;程序结束
" J/ T/ ?* _5 r1 [0 c+ Y |