51单片机作的电子钟程序在很多地方已经有了介绍, 对于单片机学习者而言这个程序基本上是一道门槛,掌握了电子钟程序, 基本上可以说51单片机就掌握了80%。常见的电子钟程序由显示部分, 计算部分, 时钟调整部分构成。 - C0 t5 n1 C$ @
时钟的基本显示原理:时钟开始显示为0时0分0秒,也就是数码管显示000000,然后每秒秒位加1 ,到9后,10秒位加1,秒位回0。10秒位到5后,即59秒 ,分钟加1,10秒位回0。依次类推,时钟最大的显示值为23小时59分59秒。这里只要确定了1秒的定时时间, 其他位均以此为基准往上累加。 - u9 X3 i$ L, j' N% V
开始程序定义了秒, 十秒, 分, 十分,小时, 十小时,共6位的寄存器, 分别存在30h,31h,32h,33h,34h,35h单元,便于程序以后调用和理解。 0 Y; q* ~# a( ?4 ^/ A$ F" p0 ~
6个数码管分别显示时、分、秒,一个功能键,可以切换调整时分秒、增加数值、熄灭节电等功能全部集一键。![]()
* B I( S6 a9 [6 J+ a" |
, s1 s u" P ]
9 y- B* _5 l8 A) ~' ?* S4 J
1 v* C- U& {3 L; Z7 K9 K6 A 以下是部分汇编源程序,购买我们产品后我们用光盘将完整的单片机汇编源程序和烧写文件送给客户。* q3 t2 d& p' m7 z) m
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
7 ^- L3 `2 u6 d# v$ Q n, Q;; 中断入口程序 ;; (仅供参考)) J: ~# a' ^1 A* K7 t1 l& r/ z
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" q7 n! M9 I# |& z
;1 z3 b0 I0 f. ]/ q
ORG 0000H ;程序执行开始地址
8 c* x" C3 e) m- w5 ~, ~- \0 k% cLJMP START ;跳到标号START执行) `$ @4 L4 Y8 }; n/ l' e
ORG 0003H ;外中断0中断程序入口
7 n: Q$ H8 A+ U! E/ d! iRETI ;外中断0中断返回
3 }9 Y# g3 Y: g5 F1 [# uORG 000BH ;定时器T0中断程序入口
( x( S4 h n: Q/ ?- WLJMP INTT0 ;跳至INTTO执行
0 q: \1 I( a( H9 w7 I% N ^' EORG 0013H ;外中断1中断程序入口
F' F& |1 a( j0 IRETI ;外中断1中断返回) H& s1 N' M) L b' \/ b
ORG 001BH ;定时器T1中断程序入口! T! O1 D1 i+ u/ _9 _3 \& L p4 K: s
LJMP INTT1 ;跳至INTT1执行: a- k- ~4 s3 n" E- D6 H
ORG 0023H ;串行中断程序入口地址* w( q, K: T) E
RETI ;串行中断程序返回
7 j. m% _2 |* `9 n% r1 Q;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
^$ o- ^0 r0 T- u: L5 S$ O* y;; 主 程 序 ;;3 S' Y6 S* I4 [4 t
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
7 V+ {9 z- w; B x/ m;
; e, h- \! e. S5 z% i' ?4 V P( B* a6 tSTART: MOV R0,#70H ;清70H-7AH共11个内存单元
! E4 n0 h3 @8 RMOV R7,#0BH
s, r6 O, _0 K% Z0 n6 ~5 h* H( Z;clr P3.7 ;8 o9 g) f4 N- p+ {9 B( \$ K- Y
CLEARDISP: MOV @R0,#00H ;" `# v$ q7 f1 I- L$ N* S
INC R0 ;
- k0 K# o5 f0 V* s8 L/ jDJNZ R7,CLEARDISP ;
0 S/ Y- \2 \( k5 k/ wMOV 20H,#00H ;清20H(标志用)+ R& y8 e6 x" x9 U9 B& E( ?
MOV 7AH,#0AH ;放入"熄灭符"数据
! z1 I. O$ |' o1 @3 f4 _6 |MOV TMOD,#11H ;设T0、T1为16位定时器& m* L' ?# C/ N/ K6 Q
MOV TL0,#0B0H ;50MS定时初值(T0计时用)2 C6 x8 i1 n6 d, [- E4 s6 @
MOV TH0,#3CH ;50MS定时初值
3 b3 ?2 n1 P8 p4 c b4 j$ fMOV TL1,#0B0H ;50MS定时初值(T1闪烁定时用), E* }" i2 ?; G i
MOV TH1,#3CH ;50MS定时初值/ C) O4 W; \* f1 A
SETB EA ;总中断开放( A; e/ Q* J! E7 d) E
SETB ET0 ;答应T0中断
5 ^, n* B7 R' R G% t8 B \$ |SETB TR0 ;开启T0定时器
3 @$ X6 w8 ?- \0 LMOV R4,#14H ;1秒定时用初值(50MS×20)
. }4 t$ r3 |$ K# U0 c/ y* h0 zSTART1: LCALL DISPLAY ;调用显示子程序
" m) p9 ^# n$ `+ [* ?6 l8 q+ h/ AJNB P3.7,SETMM1 ;P3.7口为0时转时间调整程序
5 z) z, `+ W8 G! nSJMP START1 ;P3.7口为1时跳回START18 Z+ U {( Q; r9 Q1 u. U7 y+ Q
SETMM1: LJMP SETMM ;转到时间调整程序SETMM0 I/ t h, e; Q: H0 x j
;
- O4 k- o/ ~! C( _' H; \+ k;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3 x# c4 a! x8 g;; 1秒计时程序 ;;5 k" H* z8 z& O- y5 [6 P
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
7 X) J. S; Z$ V( u;T0中断服务程序
2 O1 J* o6 M. w5 Z# DINTT0: PUSH ACC ;累加器入栈保护
" b: ?3 d- ^- b& Z" c& `PUSH PSW ;状态字入栈保护* ^: z6 `* m% ^8 {
CLR ET0 ;关T0中断答应
, P6 I/ _4 v& Y0 zCLR TR0 ;封闭定时器T0# Q! R/ j: Z/ C9 l* R! C6 t) K
MOV A,#0B7H ;中断响应时间同步修正
5 D( ]/ R8 M8 M) d4 w* pADD A,TL0 ;低8位初值修正* A/ d, X: i. Q% D @; R
MOV TL0,A ;重装初值(低8位修正值)# _9 r+ k& O1 ], {
MOV A,#3CH ;高8位初值修正
1 M4 D+ H! u0 e: L& wADDC A,TH0 ;7 d S8 S( O- v1 {0 `# H# p6 g
MOV TH0,A ;重装初值(高8位修正值)
3 r- l% I7 b8 Z0 v. I( @SETB TR0 ;开启定时器T05 M; b& z Z+ h" S# {& S: l
DJNZ R4, OUTT0 ;20次中断未到中断退出% s$ `) j3 b% D; Z7 s& H9 E. ^& p9 X7 m
ADDSS: MOV R4,#14H ;20次中断到(1秒)重赋初值
0 d5 W. e9 v: s6 V8 HMOV R0,#71H ;指向秒计时单元(71H-72H)( p& b! C% r! T, ~- q
ACALL ADD1 ;调用加1程序(加1秒操作)$ t4 r! o- g9 ?+ o3 `/ |
MOV A,R3 ;秒数据放入A(R3为2位十进制数组合)9 p+ e' o- k! F4 Y) k5 ~1 f/ T6 k
CLR C ;清进位标志
8 g3 C6 ^$ |4 f: k+ F' `/ DCJNE A,#60H,ADDMM ;
- Z* u' v# q8 Y# m t* B9 K E' GADDMM: JC OUTT0 ;小于60秒时中断退出& |# {7 I6 J2 e/ y5 j% ]
ACALL CLR0 ;大于或即是60秒时对秒计时单元清0
1 E" m Y* g3 @/ o2 V) KMOV R0,#77H ;指向分计时单元(76H-77H)! z3 Y+ {) c3 G4 v( u7 V7 ~
ACALL ADD1 ;分计时单元加1分钟
m0 Q/ M+ J0 O3 l) ? \( j+ ]+ GMOV A,R3 ;分数据放入A: x) C/ |5 k7 P( _. j" Q n
CLR C ;清进位标志
8 R# Y; P( R- V% z9 M, ]CJNE A,#60H,ADDHH ;
& X( S! B0 N! ]. T, G& \' A; p# DADDHH: JC OUTT0 ;小于60分时中断退出4 [# D0 v( q( W6 V ?: {
ACALL CLR0 ;大于或即是60分时分计时单元清0
+ X! _+ ~) K: z( i2 ?0 d2 {MOV R0,#79H ;指向小时计时单(78H-79H)& m& f. B- H( ?5 r! P+ K# B* G. x
ACALL ADD1 ;小时计时单元加1小时& }% w+ c4 E. b2 I% u0 A4 l
MOV A,R3 ;时数据放入A
" n& n. h7 q4 } o4 M7 L7 h1 `0 h. {CLR C ;清进位标志- s7 S1 Q9 C9 ~8 g! E
CJNE A,#24H,HOUR ;
( H" G# s J; H+ G' @! G: xHOUR: JC OUTT0 ;小于24小时中断退出
, D' e- h5 n4 u5 k& VACALL CLR0 ;大于或即是24小时小时计时单元清0- `) m1 o. @* [* S, E% O
OUTT0: MOV 72H,76H ;中断退出时将分、时计时单元数据移3 S- M! ^3 d! v6 }" p" M
MOV 73H,77H ;入对应显示单元
# c9 |/ v6 o2 xMOV 74H,78H ;
* d# X/ m9 y+ G$ zMOV 75H,79H ;# m! m$ c5 O3 ]! U2 I
POP PSW ;恢复状态字(出栈)* o9 V$ b! O+ x* K# y/ w
POP ACC ;恢复累加器7 `1 o& N2 _7 C; e& m
SETB ET0 ;开放T0中断8 ] A8 ?9 O1 E" c& K4 l4 @
RETI ;中断返回
. R7 x! a9 b8 j% T;
8 [# Y6 A. G; k4 L7 @;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
8 s# |& p6 A" j" F;; 闪动调时 程 序 ;;
' j1 Q2 T. ^+ q, T0 a$ R;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;' i- T( m' x/ V4 G5 u
;T1中断服务程序,用作时间调整时调整单元闪烁指示
7 u, n0 V5 I! Z* F) Q8 t2 I& ?+ i, XINTT1: PUSH ACC ;中断现场保护& D5 v2 |% ]& ^+ W0 K4 _2 ]
PUSH PSW ;* o7 [3 A- _0 l2 E2 d" S1 Z
MOV TL1, #0B0H ;装定时器T1定时初值
) v" e4 R' C5 }( ]2 _MOV TH1, #3CH ;
$ j3 d7 v) u7 l3 s7 b1 lDJNZ R2,INTT1OUT ;0.3秒未到退出中断(50MS中断6次): N7 Z9 A8 h I" N8 e7 X3 O8 e+ H
MOV R2,#06H ;重装0.3秒定时用初值
$ x3 b( r8 Y1 l) a4 x% t1 ] ]CPL 02H ;0.3秒定时到对闪烁标志取反6 X6 E% i" i8 `0 \ p% O; j! K4 Z
JB 02H,FLASH1 ;02H位为1时显示单元"熄灭"( M H9 E6 k- g, J' n* O( y7 R* ]
MOV 72H,76H ;02H位为0时正常显示* Y: E& m2 F/ Q I1 ?* z
MOV 73H,77H ;
4 b" U& ?4 P$ \MOV 74H,78H ;% a+ ~0 G H+ O) G/ ~$ M* I9 [
MOV 75H,79H ; u5 K* b6 ]9 p( w; I
INTT1OUT: POP PSW ;恢复现场
; r& o# Z2 p0 M5 a+ BPOP ACC ;; b$ z/ x0 S( i% }) {! ^- j2 h' T
RETI ;中断退出
1 p; c* g/ p2 j- g* MFLASH1: JB 01H,FLASH2 ;01H位为1时,转小时熄灭控制
" s' b8 \+ w! hMOV 72H,7AH ;01H位为0时,"熄灭符"数据放入分
; D" p1 V4 N X4 j# uMOV 73H,7AH ;显示单元(72H-73H),将不显示分数据1 x% P w% [: ^2 u. S$ {
MOV 74H,78H ;
/ G G M7 y9 r4 v6 V0 t: x& vMOV 75H,79H ;. U& ^) S0 v, B( D5 g4 ~
AJMP INTT1OUT ;转中断退出
" H: d, T! A3 T# {7 c2 WFLASH2: MOV 72H,76H ;01H位为1时,"熄灭符"数据放入小时7 J9 o+ |9 ~) z* w
MOV 73H,77H ;显示单元(74H-75H),小时数据将不显示
7 b: {. ]) K" w1 f4 \ A. E! u" E) YMOV 74H,7AH ;0 k1 S( M- g; \' D
MOV 75H,7AH ;
) X: p( Q- |- S+ c8 @2 }AJMP INTT1OUT ;转中断退出& X! _! j$ R8 C7 L. f: i
;! c& Q" G; Q, J2 \4 k/ @
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ t8 w- |' u' z( D. U- q- l;; 加1子 程 序 ;;2 n; {7 }0 R6 u0 ~2 t( m) Y
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2 B2 _* K: b# I# c4 }* `;! q2 V8 B* f* |; X, }
ADD1: MOV A,@R0 ;取当前计时单元数据到A. z1 R& h4 f$ W& B
DEC R0 ;指向前一地址
/ E1 \. [6 ~' S8 x% n- x" K3 @2 ~SWAP A ;A中数据高四位与低四位交换7 s" [$ q f1 K5 u
ORL A,@R0 ;前一地址中数据放入A中低四位8 b- b, t$ ?# M, i
ADD A,#01H ;A加1操作
" a( `% f0 L& F: dDA A ;十进制调整. v, z$ i5 V }1 ]
MOV R3,A ;移入R3寄存器+ H8 A4 S# g( s) ~+ ^0 N( U2 a( _
ANL A,#0FH ;高四位变0
8 }, a) w* ~1 V* C; L3 x8 o& @MOV @R0,A ;放回前一地址单元
3 o' l+ D4 L& F8 F6 OMOV A,R3 ;取回R3中暂存数据( i! F1 i. ~" U, w
INC R0 ;指向当前地址单元; y9 B* Q& W( s- S8 |- P; a+ Z
SWAP A ;A中数据高四位与低四位交换
4 S! x, i6 G+ [5 dANL A,#0FH ;高四位变0 o: C$ k$ ^# }6 R# o6 a
MOV @R0,A ;数据放入当削地址单元中1 c6 ^7 G* L, \/ g9 V" I8 J. U8 i8 |
RET ;子程序返回
' a6 v$ ^5 ~; t4 A2 r;
0 P( `. q( ]. |& q5 S;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4 I5 @3 O; J# c( k+ v. M4 @( i S
;; 清零程序 ;;, K. g" l! O. r0 x$ N
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
* z6 A3 q+ ~) Q;.............4 V" o1 x) k- f7 u$ L1 C
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
# [9 N2 j, b: d; t6 D;; 时钟调整程序 ;;, t# S7 g: ~) L% {5 w4 z% e
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
7 N1 q; ?6 k4 K7 o;当调时按键按下时进入此程序. T) a9 d% r ]* ~
SETMM: cLR ET0 ;关定时器T0中断
4 V) T( }2 w2 s( |1 TCLR TR0 ;封闭定时器T09 ^ V$ {6 v& ~# |% C' K
LCALL DL1S ;调用1秒延时程序
/ B* d% z9 k6 rJB P3.7,CLOSEDIS ;键按下时间小于1秒,封闭显示(省电)
% O7 n! K; i) M4 t- GMOV R2,#06H ;进入调时状态,赋闪烁定时初值" W! K! i) t' Y
SETB ET1 ;答应T1中断
( B" w# G- E" L) a5 f& F DSETB TR1 ;开启定时器T1
' w" E- I0 x, c+ n- [2 PSET2: JNB P3.7,SET1 ;P3.7口为0(键未开释),等待
( @ \# k4 k0 ^ \4 Q+ \* V* NSETB 00H ;键开释,分调整闪烁标志置19 ~. S/ e( g% Q6 y
SET4: JB P3.7,SET3 ;等待键按下' |, k9 U/ [7 A: e* }
LCALL DL05S ;有键按下,延时0.5秒
" |% D( S6 G# U( }6 DJNB P3.7,SETHH ;按下时间大于0.5秒转调小时状态$ F; E5 K0 Z0 h4 v; R: p/ o
MOV R0,#77H ;按下时间小于0.5秒加1分钟操作 Z6 t( k/ _( g6 N% X( H
LCALL ADD1 ;调用加1子程序
; u+ `2 v" J1 i, a" y4 j2 BMOV A,R3 ;取调整单元数据
- f: g8 N" {, l$ ?1 `, H3 P$ fCLR C ;清进位标志2 W" H8 u) e( L
CJNE A,#60H,HHH ;调整单元数据与60比较
, ^7 F1 f3 d e5 W! c: z1 K" \HHH: JC SET4 ;调整单元数据小于60转SET4循环
, f$ x! X% I$ \& S KLCALL CLR0 ;调整单元数据大于或即是60时清00 z9 {9 {! H/ S+ V
CLR C ;清进位标志
8 V! }- ]4 e: z# J3 ~; tAJMP SET4 ;跳转到SET4循环, X$ M( u: C, ~8 J3 }0 K! Q
CLOSEDIS: SETB ET0 ;省电(LED不显示)状态。开T0中断0 k, N. W6 L+ P4 i% j( b" P
SETB TR0 ;开启T0定时器(开时钟)$ ?9 E. T7 a2 R! C
CLOSE: JB P3.7,CLOSE ;无按键按下,等待。
) q- F0 {! t: r1 B" m7 F( [/ J' |LCALL DISPLAY ;有键按下,调显示子程序延时削抖+ g6 G( p4 _! n
JB P3.7,CLOSE ;是干扰返回CLOSE等待
8 l3 b& r4 f5 ^* h# T1 V2 lWAITH: JNB P3.7,WAITH ;等待键开释3 [+ \' G' @/ G2 k( h5 Y
LJMP START1 ;返回主程序(LED数据显示亮)6 w& @! l( C7 w* D
SETHH: CLR 00H ;分闪烁标志清除(进入调小时状态)
9 _6 y o+ @0 b. k: h5 \) W" l0 vSETHH1: JNB P3.7,SET5 ;等待键开释
& n& p) O) ~. [0 l3 xSETB 01H ;小时调整标志置1
4 n8 _1 `* ?1 Y, T/ y2 Z( s4 ySET6: JB P3.7,SET7 ;等待按键按下) ~. R5 L8 W& `/ X* \' x
LCALL DL05S ;有键按下延时0.5秒
, Y% q9 e1 X: m) [" Y+ E G9 HJNB P3.7,SETOUT ;按下时间大于0.5秒退出时间调整2 K3 ^7 Z- P$ K
MOV R0,#79H ;按下时间小于0.5秒加1小时操作: I( {, l/ z W
LCALL ADD1 ;调加1子程序
a5 g: g* q6 i/ ^3 q f& |, ~; XMOV A,R3 ;
9 E' o9 b& [( p% o# n$ A# MCLR C ;0 A- \$ q8 b: T2 x' u' \
CJNE A,#24H,HOUU ;计时单元数据与24比较5 Y {2 b* m4 v" D3 G2 L
HOUU: JC SET6 ;小于24转SET6循环0 H, e: g' k& ?2 `! w* U% Y9 B
LCALL CLR0 ;大于或即是24时清0操作
4 Q3 L/ m+ E- p6 P8 vAJMP SET6 ;跳转到SET6循环
. O+ J6 T! c8 xSETOUT: JNB P3.7,SETOUT1 ;调时退出程序。等待键开释: _3 I. K, {4 K: i
LCALL DISPLAY ;延时削抖
u! X8 G( d" o, o( iJNB P3.7,SETOUT ;是抖动,返回SETOUT再等待
2 P) ^% h# `9 \% Q1 a9 o- p% cCLR 01H ;清调小时标志
3 h+ t& e; l j5 q9 I4 gCLR 00H ;清调分标志/ N; ~( [/ k8 O8 l- ~& k. T) A
CLR 02H ;清闪烁标志' s7 Y' L% ?* I( A( n
CLR TR1 ;封闭定时器T1
% Q4 R, L. z3 Z2 V5 aCLR ET1 ;关定时器T1中断) `' D8 V% S3 p m6 k2 L2 S+ P
SETB TR0 ;开启定时器T0
% ]% U8 F5 y' xSETB ET0 ;开定时器T0中断(计时开始); _% _; {- p4 B0 y$ [5 Y
LJMP START1 ;跳回主程序2 p3 }; g" \! R0 H* R. C0 _; ?
SET1: LCALL DISPLAY ;键开释等待时调用显示程序(调分)
4 z* ~0 @! a: c3 F1 s: C! KAJMP SET2 ;防止键按下时无时钟显示
( ^% t' Q, `/ ?, SSET3: LCALL DISPLAY ;等待调分按键时时钟显示用
2 h4 C4 k" B8 b1 [8 M0 b5 \AJMP SET40 _3 `7 R/ i1 V H& W5 h( G! i
SET5: LCALL DISPLAY ;键开释等待时调用显示程序(调小时) O5 L; h! R. Q* e! C1 u
AJMP SETHH1 ;防止键按下时无时钟显示
- f0 D. ]5 \" X/ q! qSET7: LCALL DISPLAY ;等待调小时按键时时钟显示用: }, {8 M7 C. E' s
AJMP SET6% j, |5 p$ \0 H3 _% g( }* c
SETOUT1: LCALL DISPLAY ;退出时钟调整时键开释等待
2 h1 ^5 O. U6 V+ ]/ LAJMP SETOUT ;防止键按下时无时钟显示
( z+ ^ c2 i7 b6 b' e2 H' };
( b, N5 i2 t4 M9 a. q1 u;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2 f4 C4 G4 C9 s0 N! ~2 [1 e;; 显示程序 ;;6 a z) N2 I: q8 M6 Q
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3 X' D; D( ~& I( B; X
$$$$$$$$$$$$$$$$$$$$$$$$$$$
, z, J8 h8 b* b9 H; C8 s0 s* L/ p;1MS延时程序,LED显示程序用; c+ w/ Q5 N5 ~4 l, a$ Q9 i
DL1MS: MOV R6,#14H
3 H5 X7 v8 O( _, G$ \ b( CDL1: MOV R7,#19H
) Q- s0 o( p+ L( T1 tDL2: DJNZ R7,DL2
7 Z6 _1 _. ^+ y: |DJNZ R6,DL1
$ P$ E) P+ ~$ H, K9 ^/ cRET+ K# R% I: l7 d1 U# B% o5 \
;20MS延时程序,采用调用显示子程序以改善LED的显示闪烁现象0 ~3 {7 w- g2 ~! O8 v4 |
DS20MS: ACALL DISPLAY
4 c. q" Q' h' RACALL DISPLAY7 V! f( U$ @; V7 _2 }
ACALL DISPLAY
, E+ i! x @ Y: URET% Q- V J$ I% v: d) R) f
;延时程序,用作按键时间的长短判定
# x, v8 H6 |5 ^2 ?: M# H8 iDL1S: LCALL DL05S8 y" _' E9 t: S* m4 O
LCALL DL05S0 ]/ r5 J) s/ w. `& D. b
RET
# N7 J/ |- J; \. Y6 eDL05S: MOV R3,#20H ;8毫秒*32=0.196秒
3 b+ `8 h* [% I9 k! WDL05S1: LCALL DISPLAY, L; Q3 \6 s' u' X
DJNZ R3,DL05S13 H% Z) c- P5 y. u7 y- U0 T& C
RET
& \ y+ L6 [+ f6 l% \2 ?" aEND ;程序结束
+ K/ _, e7 b# m |