51单片机作的电子钟程序在很多地方已经有了介绍, 对于单片机学习者而言这个程序基本上是一道门槛,掌握了电子钟程序, 基本上可以说51单片机就掌握了80%。常见的电子钟程序由显示部分, 计算部分, 时钟调整部分构成。 # ^4 q7 N/ X7 M+ R. z
时钟的基本显示原理:时钟开始显示为0时0分0秒,也就是数码管显示000000,然后每秒秒位加1 ,到9后,10秒位加1,秒位回0。10秒位到5后,即59秒 ,分钟加1,10秒位回0。依次类推,时钟最大的显示值为23小时59分59秒。这里只要确定了1秒的定时时间, 其他位均以此为基准往上累加。
% m. y& G/ ^" l) S 开始程序定义了秒, 十秒, 分, 十分,小时, 十小时,共6位的寄存器, 分别存在30h,31h,32h,33h,34h,35h单元,便于程序以后调用和理解。 / ^- K0 d# V% O0 X3 S$ m
6个数码管分别显示时、分、秒,一个功能键,可以切换调整时分秒、增加数值、熄灭节电等功能全部集一键。![]()
* J) P# B6 Q4 J/ d# K, f% H# _
; l2 ~- T. N2 f! C
; w" L7 R' Y: J
! c3 `4 J5 t/ L/ |: f7 U/ N 以下是部分汇编源程序,购买我们产品后我们用光盘将完整的单片机汇编源程序和烧写文件送给客户。9 d9 n* g3 m6 A% y7 T! J: F* q% y8 _
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; B+ C" S/ M4 y2 m1 }0 ]3 N
;; 中断入口程序 ;; (仅供参考)
" r. p+ l+ R4 E; {! r, w;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;$ f% ^0 i' i5 e5 V
;1 l! N! U; a9 r' `
ORG 0000H ;程序执行开始地址7 t3 D4 a4 ^6 E
LJMP START ;跳到标号START执行
8 @! Y5 p" _5 j8 ]7 M' O; oORG 0003H ;外中断0中断程序入口3 N, [$ X+ O* g7 M- P( c% _
RETI ;外中断0中断返回
4 O- V7 l: I5 p5 v6 W. wORG 000BH ;定时器T0中断程序入口' P/ S3 `7 r1 [* l7 D
LJMP INTT0 ;跳至INTTO执行
% G9 ]: d; Y- k7 z; QORG 0013H ;外中断1中断程序入口0 \7 o z5 {$ k$ @% y
RETI ;外中断1中断返回
. t$ C, Y7 k3 o$ F" } ]& e! A0 LORG 001BH ;定时器T1中断程序入口
- L7 l) I# h" x$ X, r( gLJMP INTT1 ;跳至INTT1执行0 b, u: \( ]/ C# r
ORG 0023H ;串行中断程序入口地址; f/ Z* N; `3 H; @2 F! o
RETI ;串行中断程序返回
& \: d+ v, h" D8 l& l7 [: k6 l! b;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;. o/ {( r1 G% H
;; 主 程 序 ;;
/ Q4 K Q( P" i7 L) o) a$ L6 c) y;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8 _% o/ A; u5 d+ K" h1 V: A7 P6 y, _
;0 R; [ Z1 b( A/ ?4 o- Y
START: MOV R0,#70H ;清70H-7AH共11个内存单元
2 w) h1 j) ^7 g$ T4 JMOV R7,#0BH
" j7 o$ T3 D$ ^/ t z1 K0 W;clr P3.7 ;' N1 h+ K) |# `3 W( O5 r- f
CLEARDISP: MOV @R0,#00H ;& L% S; L1 }6 O. E, t/ S
INC R0 ;
- @5 ^* H; ~/ oDJNZ R7,CLEARDISP ;
1 a2 C; \/ r# _. eMOV 20H,#00H ;清20H(标志用)- V4 a) U3 ?3 @- {+ y2 ~; l
MOV 7AH,#0AH ;放入"熄灭符"数据4 z5 e, r* _) w2 y; v
MOV TMOD,#11H ;设T0、T1为16位定时器
7 I: l5 d; O4 G( PMOV TL0,#0B0H ;50MS定时初值(T0计时用)
1 o* \$ w. `4 k5 j- ^2 W( jMOV TH0,#3CH ;50MS定时初值" o- F+ f* [- g8 K9 O2 R5 q
MOV TL1,#0B0H ;50MS定时初值(T1闪烁定时用)+ Y2 E+ Q) o4 s
MOV TH1,#3CH ;50MS定时初值
, X0 i: Y6 {# e1 A/ }SETB EA ;总中断开放
( z* u3 ?+ K m) M+ [SETB ET0 ;答应T0中断$ c" G, N& r) A- S% T* U# K' h+ z/ C5 B8 z
SETB TR0 ;开启T0定时器5 M8 [& p) y" J0 |/ z( e! e1 }
MOV R4,#14H ;1秒定时用初值(50MS×20)0 t& m$ m3 ]$ r+ A
START1: LCALL DISPLAY ;调用显示子程序
8 y( x! j; `2 eJNB P3.7,SETMM1 ;P3.7口为0时转时间调整程序
5 H4 E& e: ]- Q) R; jSJMP START1 ;P3.7口为1时跳回START1
4 |8 k/ x% ~/ a( x: _1 k3 s6 v) ~: OSETMM1: LJMP SETMM ;转到时间调整程序SETMM
& t7 G6 V7 O' _% U;
q7 F* j2 _4 x/ v, o4 A* d+ c;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
" d; T9 _2 ?$ \+ u- r;; 1秒计时程序 ;;
+ |) L% \0 X. Y& q! v o;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
& d0 J# n [/ z. q. ~& [7 {;T0中断服务程序
8 q% z+ _% l9 _% M) i9 C) W$ RINTT0: PUSH ACC ;累加器入栈保护; q) J% r$ V) ]! P3 m3 s! e0 U# [8 e
PUSH PSW ;状态字入栈保护
( h, \6 E/ S7 H2 N- fCLR ET0 ;关T0中断答应
! h$ p6 c) t% q% B: P/ dCLR TR0 ;封闭定时器T0- `: q# S* _+ ^
MOV A,#0B7H ;中断响应时间同步修正. ^: @. z4 f8 h! H
ADD A,TL0 ;低8位初值修正# A* [0 e* |1 k1 m' Y
MOV TL0,A ;重装初值(低8位修正值)
9 ]) m8 w$ M8 GMOV A,#3CH ;高8位初值修正
" ~" D8 I! f, }7 x" W1 h4 wADDC A,TH0 ;
- f: ^; H6 Y! W0 C9 SMOV TH0,A ;重装初值(高8位修正值)
: G7 z' O8 q# ~+ nSETB TR0 ;开启定时器T0
M% e/ ~$ d/ T% d; V1 D% U3 hDJNZ R4, OUTT0 ;20次中断未到中断退出8 W6 p8 i3 W$ n/ S# C; w
ADDSS: MOV R4,#14H ;20次中断到(1秒)重赋初值1 I/ @) z9 m' s: ?- Q) {# o
MOV R0,#71H ;指向秒计时单元(71H-72H)
0 e/ I0 Y+ j. V, T v* s' F. dACALL ADD1 ;调用加1程序(加1秒操作)
$ t! M6 D, X1 D: V3 `4 H/ }MOV A,R3 ;秒数据放入A(R3为2位十进制数组合)
% V% k5 }. |4 ~' Z% F6 L5 y$ \CLR C ;清进位标志
0 o ^8 A( m/ b1 ?/ WCJNE A,#60H,ADDMM ;* x- @ e) s m; s% w! y: J6 g# A$ B
ADDMM: JC OUTT0 ;小于60秒时中断退出
1 `, y5 H" ~9 t9 f8 U8 L MACALL CLR0 ;大于或即是60秒时对秒计时单元清0+ g% l5 W* }4 J/ ?5 I3 ^
MOV R0,#77H ;指向分计时单元(76H-77H)% y, c* ?$ I' Q
ACALL ADD1 ;分计时单元加1分钟4 G' H! K5 i. e n8 D; M
MOV A,R3 ;分数据放入A
' e$ [ ~( n+ t6 Y6 M7 ^4 TCLR C ;清进位标志/ A( C& W( H4 o/ \! J6 x- h- F e
CJNE A,#60H,ADDHH ;$ V0 G1 x* `' N' Z# K2 {
ADDHH: JC OUTT0 ;小于60分时中断退出
8 ^1 W) H) T+ `* I, x% T* TACALL CLR0 ;大于或即是60分时分计时单元清0
5 Q }& K1 n2 `2 FMOV R0,#79H ;指向小时计时单(78H-79H)
8 P$ Q* U* o* HACALL ADD1 ;小时计时单元加1小时
3 S& B2 }8 V, c! _5 U/ b$ yMOV A,R3 ;时数据放入A
2 m! a' L$ n+ N" SCLR C ;清进位标志6 t2 _) u1 v' E! \" U b8 s
CJNE A,#24H,HOUR ;
5 s0 P( l; d* |# W6 RHOUR: JC OUTT0 ;小于24小时中断退出0 g2 \+ z. O. a8 p+ N) s
ACALL CLR0 ;大于或即是24小时小时计时单元清0" H: o4 z3 o' y: x* n }
OUTT0: MOV 72H,76H ;中断退出时将分、时计时单元数据移
: Y" Q6 Z; Q& r, R7 G' rMOV 73H,77H ;入对应显示单元, j" y- w6 |; y( {
MOV 74H,78H ;
! ~7 m8 q* T" _MOV 75H,79H ;5 V' r! Z/ {1 w& Z
POP PSW ;恢复状态字(出栈)- [' T) J; F8 D2 M1 F: P1 h# k
POP ACC ;恢复累加器
! p, V( `+ W- n$ J- FSETB ET0 ;开放T0中断
' g. z& s h- M+ ?- N" n5 CRETI ;中断返回
" G; R9 ?6 s3 }. n7 y;' G0 ~7 M/ M( H% C. w. x# H
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- u/ s" m+ f# b$ D' Y/ Q;; 闪动调时 程 序 ;; f" x: j/ n; Y2 y6 a# U s6 S% ~
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
0 @% u& ]2 V. ?$ I" u- h;T1中断服务程序,用作时间调整时调整单元闪烁指示8 t4 ?! }+ I2 s4 b- B f( Z
INTT1: PUSH ACC ;中断现场保护6 p/ j& Y1 @6 w V+ M2 i- E: W
PUSH PSW ;
: d2 I7 a. j; k" kMOV TL1, #0B0H ;装定时器T1定时初值
% z6 K8 E# n' a8 tMOV TH1, #3CH ;/ H+ m3 T/ {5 `! n' {* ^ T
DJNZ R2,INTT1OUT ;0.3秒未到退出中断(50MS中断6次)( g) @4 k& w5 f3 N& F3 X
MOV R2,#06H ;重装0.3秒定时用初值
: H+ P8 E* f+ }4 O6 F8 kCPL 02H ;0.3秒定时到对闪烁标志取反
9 R2 W) J, L9 x! k4 t* cJB 02H,FLASH1 ;02H位为1时显示单元"熄灭"
6 Q# J5 q1 i7 R% L: s* M: kMOV 72H,76H ;02H位为0时正常显示+ g( T* i% Y3 }: p: @9 x
MOV 73H,77H ;
$ I9 u( i" U2 F0 {MOV 74H,78H ;, F: z. d# r+ f4 S1 {! v2 _
MOV 75H,79H ;
/ V! J6 Y. ^ ?$ E- d) Y2 KINTT1OUT: POP PSW ;恢复现场" Y$ Q5 T- c. {! G* ]1 F
POP ACC ;
O9 S2 W$ R# x) C ~6 E: VRETI ;中断退出1 u) v2 U5 X5 r& l& w$ z0 \( f' Q
FLASH1: JB 01H,FLASH2 ;01H位为1时,转小时熄灭控制. @6 D9 l9 R6 {, x+ d
MOV 72H,7AH ;01H位为0时,"熄灭符"数据放入分
& x1 n; J% }% k- d$ jMOV 73H,7AH ;显示单元(72H-73H),将不显示分数据, [' ?+ g$ [1 H9 m+ U5 D
MOV 74H,78H ;
" u& i/ X0 C6 l P" d7 D0 }+ rMOV 75H,79H ;2 y8 ?* r' {+ b* s) u3 m! q" U* z
AJMP INTT1OUT ;转中断退出% h% \# i3 ]5 `6 `; p# Z
FLASH2: MOV 72H,76H ;01H位为1时,"熄灭符"数据放入小时
/ w- X* N7 u; L4 RMOV 73H,77H ;显示单元(74H-75H),小时数据将不显示
( u0 x' M6 O7 Y9 z% X: X2 ~$ zMOV 74H,7AH ;/ ^4 T' V4 C+ @* `
MOV 75H,7AH ;( P; U3 } p+ r% h6 ]& j
AJMP INTT1OUT ;转中断退出% a o3 C$ Q H8 G5 f+ I; M5 g
;
9 X8 {4 o' ]# a* {;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;. |* x' Q) d- b; Y- ]) v9 x2 o
;; 加1子 程 序 ;;
% S: g% a- v+ N1 {& g;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
) h K2 n# C; p2 } U: E;/ x' C' b, Y2 ^! |# u
ADD1: MOV A,@R0 ;取当前计时单元数据到A
7 ]4 h1 _. T7 k- v% A& B6 ?4 N" oDEC R0 ;指向前一地址
v" i$ s0 m$ o6 S% {SWAP A ;A中数据高四位与低四位交换
& C V1 Z- T9 G+ d8 w, p7 `: hORL A,@R0 ;前一地址中数据放入A中低四位6 P' j( K- m e
ADD A,#01H ;A加1操作
. k ^9 w; ^- {# {: a: A# r ODA A ;十进制调整# `2 e; _ e" s2 Y
MOV R3,A ;移入R3寄存器: \( d4 Z4 C$ _4 X6 o# G! h
ANL A,#0FH ;高四位变08 E6 w* z8 ~/ s+ }2 N" S+ f/ [5 p
MOV @R0,A ;放回前一地址单元# V) x( f H% l/ U
MOV A,R3 ;取回R3中暂存数据8 Z3 v* b( W8 D3 N9 v, H' o
INC R0 ;指向当前地址单元' U+ M! B7 d, B6 u
SWAP A ;A中数据高四位与低四位交换6 Q) ^" {" o+ I) O
ANL A,#0FH ;高四位变0
6 q% B6 h6 C) H9 N) R7 kMOV @R0,A ;数据放入当削地址单元中4 [" h \2 @3 n' S+ b R" U; J. o4 ?
RET ;子程序返回
5 V2 G% m5 g8 S# @6 {6 Y' L U;
* O) u& k) {8 ?+ {5 f$ _;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
! ~" j* g* ]/ N9 U3 j" a( L;; 清零程序 ;;
$ x2 b3 [/ q0 o* D# {# @;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0 x! N4 Z3 W: B) d
;.............% k/ b8 G& d6 D8 J- k% y
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;) I; Q& C% B; J2 N: s
;; 时钟调整程序 ;;
1 t0 m; h$ u0 g1 \;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- h7 f8 t8 T2 k& Z' ];当调时按键按下时进入此程序
5 s! P- V) m( W$ m& D dSETMM: cLR ET0 ;关定时器T0中断2 {# q" I4 G2 \8 f, C
CLR TR0 ;封闭定时器T0
! s; ?, N9 g" t0 A; `* kLCALL DL1S ;调用1秒延时程序- ^! ?/ G, c7 [7 \/ A( V
JB P3.7,CLOSEDIS ;键按下时间小于1秒,封闭显示(省电)
5 Q1 I8 n: a( n ^6 e6 O( ?MOV R2,#06H ;进入调时状态,赋闪烁定时初值9 E0 I% W: U. |% {4 @& p
SETB ET1 ;答应T1中断
( B, O+ ~* @! }7 s ?0 v3 ]4 ]SETB TR1 ;开启定时器T1% A% Y( @( s% \9 Q# q
SET2: JNB P3.7,SET1 ;P3.7口为0(键未开释),等待+ b) H) j z7 @: n a
SETB 00H ;键开释,分调整闪烁标志置1/ y, S A6 k. w/ Y) G0 Q: k9 L
SET4: JB P3.7,SET3 ;等待键按下
: Z: U" ^2 E z# U8 c _LCALL DL05S ;有键按下,延时0.5秒
! J- C8 ^5 V0 f6 d" \+ u% lJNB P3.7,SETHH ;按下时间大于0.5秒转调小时状态
- I5 ?3 c1 Q, J5 q# J7 vMOV R0,#77H ;按下时间小于0.5秒加1分钟操作
% R4 S* x6 ?7 i0 J! U9 W9 dLCALL ADD1 ;调用加1子程序
1 q9 z* l7 V( B% p( G* m6 rMOV A,R3 ;取调整单元数据
; n! j; N( G& y. y0 O. O. j) T9 pCLR C ;清进位标志5 X& e* d& M1 h4 F. a
CJNE A,#60H,HHH ;调整单元数据与60比较 A/ S9 f1 c$ ~' U* P8 }0 G
HHH: JC SET4 ;调整单元数据小于60转SET4循环1 U( K# i$ n( G, U
LCALL CLR0 ;调整单元数据大于或即是60时清0( G2 Z1 y# \# \$ O8 K
CLR C ;清进位标志
0 U% ~: ?8 A% f( \ Z1 NAJMP SET4 ;跳转到SET4循环
6 a4 d" H4 b D- G. ~8 C: ?CLOSEDIS: SETB ET0 ;省电(LED不显示)状态。开T0中断
% c9 ^/ ^2 S2 j/ A' Y+ b6 P8 V/ _SETB TR0 ;开启T0定时器(开时钟)4 A4 t# g4 X% a# r. e$ S
CLOSE: JB P3.7,CLOSE ;无按键按下,等待。
5 T( {% l( m3 c, g( A8 vLCALL DISPLAY ;有键按下,调显示子程序延时削抖( p) C4 W% l8 V( @1 c0 _: h5 B/ U
JB P3.7,CLOSE ;是干扰返回CLOSE等待8 ~: w d; R6 }+ n" h- k
WAITH: JNB P3.7,WAITH ;等待键开释$ N* x: x3 E9 U v( H& I, O
LJMP START1 ;返回主程序(LED数据显示亮)
+ f+ `. @" x# H6 J/ I# DSETHH: CLR 00H ;分闪烁标志清除(进入调小时状态)! X2 @' f: @. g- s' J" _
SETHH1: JNB P3.7,SET5 ;等待键开释
% e9 V$ t% a u. f1 p0 h4 jSETB 01H ;小时调整标志置1" _) W% G P8 F' q6 m2 n
SET6: JB P3.7,SET7 ;等待按键按下( n) p# s- B$ h# j3 j$ K
LCALL DL05S ;有键按下延时0.5秒
8 E w* G1 o0 r8 b* y7 F7 ?: a0 @( _JNB P3.7,SETOUT ;按下时间大于0.5秒退出时间调整
- _2 J' v F$ N6 E/ KMOV R0,#79H ;按下时间小于0.5秒加1小时操作% O1 a" Y8 t" C% U7 I
LCALL ADD1 ;调加1子程序* x2 f% K5 R1 p, M8 G- B) `
MOV A,R3 ;
; @) h" ?2 h1 NCLR C ;
( [# U8 t: a; ~ P% f1 O/ LCJNE A,#24H,HOUU ;计时单元数据与24比较
! s W# c( I2 @: ^1 z/ Z% N$ ^& S- @5 MHOUU: JC SET6 ;小于24转SET6循环1 h% k/ c' y; @( n, @
LCALL CLR0 ;大于或即是24时清0操作
* X% Y$ _7 [; w0 j) yAJMP SET6 ;跳转到SET6循环
% Y4 K# g$ y" l% N! c, d. ]SETOUT: JNB P3.7,SETOUT1 ;调时退出程序。等待键开释
. {1 O! t5 ~) j# aLCALL DISPLAY ;延时削抖
! R% x! S; G$ N) q. n7 V; T8 tJNB P3.7,SETOUT ;是抖动,返回SETOUT再等待* H8 \" O ^! ^8 i- }
CLR 01H ;清调小时标志
/ f8 |! S1 U2 ~- c# b5 rCLR 00H ;清调分标志
- D8 O* S% i+ \ hCLR 02H ;清闪烁标志4 I% n- w$ F6 t
CLR TR1 ;封闭定时器T12 m, f5 T4 D( ?. v( Y" a
CLR ET1 ;关定时器T1中断- y" N, r5 }/ L h9 o( F
SETB TR0 ;开启定时器T0
$ J+ d% ?; Y! zSETB ET0 ;开定时器T0中断(计时开始)
" V2 u3 A! h' F! {; vLJMP START1 ;跳回主程序
. ^; s" W. ~9 N( M; z! j7 s) P: rSET1: LCALL DISPLAY ;键开释等待时调用显示程序(调分)
2 H2 y `3 g7 i' h: w2 p' rAJMP SET2 ;防止键按下时无时钟显示8 A+ Y( p9 Z5 W4 E: J. j& c6 R- ~
SET3: LCALL DISPLAY ;等待调分按键时时钟显示用
1 G# F, ^1 k+ w% W- i' [ EAJMP SET4
5 ?0 n r2 r MSET5: LCALL DISPLAY ;键开释等待时调用显示程序(调小时)
9 e& n0 i. Q$ c/ i* c/ bAJMP SETHH1 ;防止键按下时无时钟显示. x0 g/ R7 j& [8 e. e
SET7: LCALL DISPLAY ;等待调小时按键时时钟显示用# |7 ~" V" F2 y+ N9 j
AJMP SET6
: ~ W8 `1 R N: m k+ N# m% G6 QSETOUT1: LCALL DISPLAY ;退出时钟调整时键开释等待
N/ e$ N& {3 L$ I: Q$ u8 sAJMP SETOUT ;防止键按下时无时钟显示% D1 k V4 z2 Z7 [
;- F/ G5 ^! j6 p& x* g" Q
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3 b" @. l/ A6 ?& K: ]! o, @ q;; 显示程序 ;; L$ s7 k/ E5 O% \; s+ M
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
. r! \5 I# ?; x( T v+ s7 n$$$$$$$$$$$$$$$$$$$$$$$$$$$
+ m; j, I( P5 ^4 z5 k;1MS延时程序,LED显示程序用
2 W1 p* `/ O; IDL1MS: MOV R6,#14H
, j7 U+ i: n" m+ r' {DL1: MOV R7,#19H
8 @! W: q1 ~6 b+ c4 J# W0 wDL2: DJNZ R7,DL2
; L, F. h3 B; d' }0 p% H! jDJNZ R6,DL1
0 K, Z+ f' x- j# I& k/ }RET& X8 [7 R! A9 h2 O
;20MS延时程序,采用调用显示子程序以改善LED的显示闪烁现象/ x5 t% _/ y& `9 t2 H
DS20MS: ACALL DISPLAY
1 x- n6 g4 V, ]0 Z4 GACALL DISPLAY3 l8 V* u- C ?
ACALL DISPLAY
, w) H+ v$ Y' u% o. n) lRET
8 n4 n) O& ^. j3 M5 `1 G5 v;延时程序,用作按键时间的长短判定3 u$ f* l* L6 n: K
DL1S: LCALL DL05S. c3 f$ \0 Z( J' \( r
LCALL DL05S
/ l1 O8 F- X, G u8 W6 s! RRET
% `/ n% J: T8 V9 I( S. D& sDL05S: MOV R3,#20H ;8毫秒*32=0.196秒
/ ~) I5 \: x; n" zDL05S1: LCALL DISPLAY! m% R+ a. e1 b4 g
DJNZ R3,DL05S10 d: g/ n9 @ O$ }6 @0 J
RET# g8 g" ?9 _3 N9 L3 N3 V9 F4 e
END ;程序结束$ [! |0 X0 j7 K S
|