51单片机作的电子钟程序在很多地方已经有了介绍, 对于单片机学习者而言这个程序基本上是一道门槛,掌握了电子钟程序, 基本上可以说51单片机就掌握了80%。常见的电子钟程序由显示部分, 计算部分, 时钟调整部分构成。
% C4 m/ O; V: m, n) {1 H5 Q7 x0 s6 C 时钟的基本显示原理:时钟开始显示为0时0分0秒,也就是数码管显示000000,然后每秒秒位加1 ,到9后,10秒位加1,秒位回0。10秒位到5后,即59秒 ,分钟加1,10秒位回0。依次类推,时钟最大的显示值为23小时59分59秒。这里只要确定了1秒的定时时间, 其他位均以此为基准往上累加。
1 c$ {' h; ^) ~ 开始程序定义了秒, 十秒, 分, 十分,小时, 十小时,共6位的寄存器, 分别存在30h,31h,32h,33h,34h,35h单元,便于程序以后调用和理解。 " }0 @- u! K L6 G, P
6个数码管分别显示时、分、秒,一个功能键,可以切换调整时分秒、增加数值、熄灭节电等功能全部集一键。 Y! R' P) Z7 T1 K4 |0 }0 a
' y6 g6 @4 N1 O4 M, |
: Z8 s- p! ]/ T! Q; {4 ?
0 s. C' A) M2 T9 D4 y7 o" I# K 以下是部分汇编源程序,购买我们产品后我们用光盘将完整的单片机汇编源程序和烧写文件送给客户。
& O* P3 F( V4 ~ ? o1 a;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
' }5 k; [/ d6 p& `+ };; 中断入口程序 ;; (仅供参考)
0 W+ r+ z: B0 h- D0 I5 ~;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2 c* b5 R: } i, e0 o% D' b5 g;$ W* u# C& N; M6 u& O( ~
ORG 0000H ;程序执行开始地址
. d0 D' N0 \0 K, d, z6 x0 P4 FLJMP START ;跳到标号START执行
0 q; A: @2 Y; a! [& i" ^ORG 0003H ;外中断0中断程序入口
. [* p' l) y! m0 wRETI ;外中断0中断返回8 F& Y& I. L- _5 l
ORG 000BH ;定时器T0中断程序入口# `2 L5 N* |5 K
LJMP INTT0 ;跳至INTTO执行
! y( `8 T+ g& H" P) {ORG 0013H ;外中断1中断程序入口4 {- q8 O* U% X& h; C
RETI ;外中断1中断返回; n* X- {& v+ b2 _+ K9 g
ORG 001BH ;定时器T1中断程序入口( q& v6 v$ K" ~; t1 o( y; F- h' Q( N# \
LJMP INTT1 ;跳至INTT1执行
( ]2 h: {% F/ o6 M# ?6 WORG 0023H ;串行中断程序入口地址4 v2 }% O/ v( M0 K( D% r
RETI ;串行中断程序返回7 B- b1 R8 r+ }# o9 F4 I
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;! A- T6 i1 _7 v; `- a( E
;; 主 程 序 ;;
+ |1 D- L" F+ \2 R;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;, G; z- L. R: D: y
;
) z( ]1 `8 C2 t/ @( K8 p8 t4 qSTART: MOV R0,#70H ;清70H-7AH共11个内存单元
# F: q! V: r* C: Q: KMOV R7,#0BH
7 t& i9 q, K9 |* ?9 i! [' ~* F;clr P3.7 ;
, _" g4 H. X+ [8 rCLEARDISP: MOV @R0,#00H ;) T. ]' m0 D4 @3 m7 r
INC R0 ;+ j% |% B0 P6 ]) Q# k. K
DJNZ R7,CLEARDISP ;5 X: i3 P9 C' T! |% h2 A0 A/ ^/ D
MOV 20H,#00H ;清20H(标志用)
* f6 c3 G8 ]3 v8 N3 JMOV 7AH,#0AH ;放入"熄灭符"数据, ^; S9 @/ e5 P, T. Z* S
MOV TMOD,#11H ;设T0、T1为16位定时器3 i2 ~! g4 t. n& D. ?% U
MOV TL0,#0B0H ;50MS定时初值(T0计时用)7 v% |3 v; a/ i u# a
MOV TH0,#3CH ;50MS定时初值& L) }! M5 [1 s& M; `
MOV TL1,#0B0H ;50MS定时初值(T1闪烁定时用)
: k2 Z0 i w5 o+ _* ?MOV TH1,#3CH ;50MS定时初值
" \; Y* s* l9 ISETB EA ;总中断开放
& k0 q& S9 c& N1 f# `SETB ET0 ;答应T0中断; g6 ]2 o9 @! J( p: U
SETB TR0 ;开启T0定时器$ J0 h0 z* `/ K7 q8 z
MOV R4,#14H ;1秒定时用初值(50MS×20)
" l9 o3 }# ]- n) I/ T+ v. gSTART1: LCALL DISPLAY ;调用显示子程序
1 K/ g. r7 n) M7 ^JNB P3.7,SETMM1 ;P3.7口为0时转时间调整程序
3 Q4 l% u- f: r6 ]+ w/ i: [9 zSJMP START1 ;P3.7口为1时跳回START13 z) ~5 m+ @6 W2 A
SETMM1: LJMP SETMM ;转到时间调整程序SETMM) f- Q0 c3 ]0 F( R- Y( Z$ j
;' O. j$ H2 e5 }9 j
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ M8 Q. Q- w+ D7 p) ^, s;; 1秒计时程序 ;;
$ I* E; Q- n( c1 b. c, K;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1 [( H- J9 z" Q5 u# k/ ~- S* a, k1 I
;T0中断服务程序
4 e: Y" D2 n' ^, gINTT0: PUSH ACC ;累加器入栈保护
% R; P7 a/ N- X+ y, J# X8 yPUSH PSW ;状态字入栈保护
/ `4 n; m3 Y& U4 ]) I5 RCLR ET0 ;关T0中断答应
3 H, G7 W' I; S+ }CLR TR0 ;封闭定时器T0
5 r: X& |1 ] }- }) xMOV A,#0B7H ;中断响应时间同步修正' G+ z+ q0 b. o4 w& b; ?. b' Q! u
ADD A,TL0 ;低8位初值修正# H2 k# I1 k! m7 a( O7 E
MOV TL0,A ;重装初值(低8位修正值)
9 I p' p9 V; ~' g7 `# RMOV A,#3CH ;高8位初值修正, X8 w" v5 y1 `; [
ADDC A,TH0 ;
& x7 ]/ `. F$ `# U# L( c' I, dMOV TH0,A ;重装初值(高8位修正值)
, G& H+ f: e, N/ pSETB TR0 ;开启定时器T0
0 w! j8 a' n% N( xDJNZ R4, OUTT0 ;20次中断未到中断退出
/ `) ~( [: [% S9 P# g) z0 \: l/ `ADDSS: MOV R4,#14H ;20次中断到(1秒)重赋初值$ c& O# K2 `( f5 L1 M1 S* C* V
MOV R0,#71H ;指向秒计时单元(71H-72H): p- K) x0 z; b. I
ACALL ADD1 ;调用加1程序(加1秒操作)
' P0 l4 h( R+ q" m/ ]5 l0 vMOV A,R3 ;秒数据放入A(R3为2位十进制数组合)
" x# y% L( R9 ]2 v! W+ i6 dCLR C ;清进位标志 w5 b' I' m$ Z
CJNE A,#60H,ADDMM ;
|. K/ E8 x. w" O# U) t% FADDMM: JC OUTT0 ;小于60秒时中断退出
2 F$ p- i3 ` O) _. T1 k0 p( CACALL CLR0 ;大于或即是60秒时对秒计时单元清0
7 k8 l; @* o; J/ T# U D1 BMOV R0,#77H ;指向分计时单元(76H-77H)& s E/ @2 D7 _1 T6 [' R
ACALL ADD1 ;分计时单元加1分钟
( ^7 s, X1 o! K7 z& o- hMOV A,R3 ;分数据放入A; u- z. F2 Z6 L( ^ _% g
CLR C ;清进位标志/ ~8 a8 O+ ^2 H8 ]
CJNE A,#60H,ADDHH ;; {; |4 F w* }3 a5 |
ADDHH: JC OUTT0 ;小于60分时中断退出
) B" P$ D# C5 w- PACALL CLR0 ;大于或即是60分时分计时单元清0
+ z. e9 j' s/ s, IMOV R0,#79H ;指向小时计时单(78H-79H)" |# n( c Y1 K
ACALL ADD1 ;小时计时单元加1小时, j* w k2 G8 a% V1 [3 E
MOV A,R3 ;时数据放入A
3 j7 b/ z' q# C) V/ d9 d2 Y4 | wCLR C ;清进位标志: X+ f' d; d/ O" R5 j
CJNE A,#24H,HOUR ;! H& p/ H# N) s, l' u& A
HOUR: JC OUTT0 ;小于24小时中断退出
/ S Y, o6 p- G( y. p& g( \# F1 ?ACALL CLR0 ;大于或即是24小时小时计时单元清0
) e+ K. O9 Y6 n. e6 f/ COUTT0: MOV 72H,76H ;中断退出时将分、时计时单元数据移5 b2 ?/ Z9 X# f% i7 `
MOV 73H,77H ;入对应显示单元3 b3 y, N2 M" C
MOV 74H,78H ;& z8 `$ u% s0 ?6 Z* ?# G [
MOV 75H,79H ;
$ q5 x# I' V; d% Y' ZPOP PSW ;恢复状态字(出栈)
$ G3 H$ R1 Z! x2 x! P' E! u4 l- dPOP ACC ;恢复累加器
; U) F$ M5 B5 k4 M" y/ T1 w. L' C3 FSETB ET0 ;开放T0中断& ]- _) p5 X( Q& l3 t
RETI ;中断返回
) Z, p- t+ e- b/ J+ x7 f, n7 X% r;; a$ S/ j- v5 S9 |% r$ K3 \
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
, B2 S' |& m# ?6 J! c4 p4 r;; 闪动调时 程 序 ;;
" L0 V- k7 b/ a( b6 h6 W1 h;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
8 h( r$ S2 f9 t4 A1 h;T1中断服务程序,用作时间调整时调整单元闪烁指示& X6 }7 @; A! d* ]
INTT1: PUSH ACC ;中断现场保护7 j( g: V& d) L* j8 g
PUSH PSW ;% e2 S, Q! Z/ R9 a- }4 Q
MOV TL1, #0B0H ;装定时器T1定时初值
) B2 h: E3 {; u* q5 D8 _% h( JMOV TH1, #3CH ;7 `: |- K5 V/ Z0 i$ P
DJNZ R2,INTT1OUT ;0.3秒未到退出中断(50MS中断6次)
. r/ O& Q2 j5 V' a8 j* HMOV R2,#06H ;重装0.3秒定时用初值
. x& e8 {% Q8 a8 @CPL 02H ;0.3秒定时到对闪烁标志取反
+ d, M) g" `+ M5 l; Q O j5 ZJB 02H,FLASH1 ;02H位为1时显示单元"熄灭"
# s' E ~9 K1 h& T$ _! B$ X& r+ GMOV 72H,76H ;02H位为0时正常显示( X3 w* K: m2 s4 Z% G( o, Y
MOV 73H,77H ;; x8 G4 O; w% Q; k
MOV 74H,78H ;
9 W& j/ v% m) s& l, @MOV 75H,79H ;
$ ~7 U! x; v" s! d! a) I# E# {INTT1OUT: POP PSW ;恢复现场$ x! p: b0 B" @' M) h% v, y0 G9 r
POP ACC ;
7 M# y# D" W5 M; m( a e* QRETI ;中断退出( l( z' ~+ E) a8 q9 l5 H
FLASH1: JB 01H,FLASH2 ;01H位为1时,转小时熄灭控制( t0 y& G3 u# k& y9 q$ l! ~
MOV 72H,7AH ;01H位为0时,"熄灭符"数据放入分
& c8 y7 u1 u% f6 M- B4 xMOV 73H,7AH ;显示单元(72H-73H),将不显示分数据- B! d; w6 Z: _; B5 ^
MOV 74H,78H ;
' k* o$ p% s7 U6 u9 B9 V0 i( VMOV 75H,79H ;1 ?0 o! Z5 J7 g6 s: {4 {
AJMP INTT1OUT ;转中断退出2 G2 L( h3 @6 ~) M8 ]" H: o5 H
FLASH2: MOV 72H,76H ;01H位为1时,"熄灭符"数据放入小时
, h* S# j9 m6 \% K( r3 A$ J7 \* HMOV 73H,77H ;显示单元(74H-75H),小时数据将不显示. b. G' W f# }, G
MOV 74H,7AH ;" T4 R2 D6 F7 `; x4 d, V' u
MOV 75H,7AH ;
1 m7 {2 S, F) K$ dAJMP INTT1OUT ;转中断退出$ Y! G, m. P9 `6 q. Q- t3 {
;- S: e3 M: M1 U) H6 a
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0 n* g; [' y6 j% P
;; 加1子 程 序 ;;( ]% i9 y0 ?) B6 S' F* [, T0 ^
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4 t9 F; @& x- H, w! |;) P: ?. o* N$ Q: v( K
ADD1: MOV A,@R0 ;取当前计时单元数据到A
, V$ q6 D8 n% N' R8 u$ l0 O9 JDEC R0 ;指向前一地址
3 B% t- u& ^+ s. i" ?$ u: cSWAP A ;A中数据高四位与低四位交换* w: n2 }2 P8 b& E- `3 m! E* K
ORL A,@R0 ;前一地址中数据放入A中低四位
0 K" a; P5 ?, jADD A,#01H ;A加1操作
: `( j7 ]! z+ t' wDA A ;十进制调整3 z! R9 f5 G+ D# O. E1 Q7 d6 p
MOV R3,A ;移入R3寄存器
. m1 e, M$ R- M2 }9 i. F1 bANL A,#0FH ;高四位变07 u7 G$ f, f- _7 C
MOV @R0,A ;放回前一地址单元9 Z, O8 O9 W; t2 i" B& Q" s
MOV A,R3 ;取回R3中暂存数据6 |* [ y2 X. a) a( W- r/ I
INC R0 ;指向当前地址单元, L: {8 s2 _9 ]4 H
SWAP A ;A中数据高四位与低四位交换
7 d6 q7 a5 Y& p8 W Z" R3 n( uANL A,#0FH ;高四位变0
! H9 i. U$ W+ P1 {3 f! C+ Q+ oMOV @R0,A ;数据放入当削地址单元中
( v" E- T% k) ~! B2 `# A/ [; ~RET ;子程序返回
3 g" D' S3 U7 {2 w1 o: N;- u* ^9 |5 G$ K0 @
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;. |1 j* U6 e: ^5 v+ E* b; j
;; 清零程序 ;;
. s: C2 k0 S$ j! `+ B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
$ n3 _) c! a/ b0 f; w$ |;.............8 d3 C7 D# k9 x& _! o5 F
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0 |" B) V% w% A% ~
;; 时钟调整程序 ;;
@: v5 f' U3 j: x7 d% q, ] w;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
% ^6 s3 L8 S% t- ?! U. Q/ I;当调时按键按下时进入此程序
- S0 \% q$ |# r8 N9 i* ESETMM: cLR ET0 ;关定时器T0中断
' f% G, ?3 C1 X1 @# s, ~CLR TR0 ;封闭定时器T0
4 {- \0 h- @, NLCALL DL1S ;调用1秒延时程序
, ^7 [4 c" q0 K6 DJB P3.7,CLOSEDIS ;键按下时间小于1秒,封闭显示(省电)7 Q- S$ i/ i0 W$ C( K0 G
MOV R2,#06H ;进入调时状态,赋闪烁定时初值* r. O) `& C, `$ r$ k
SETB ET1 ;答应T1中断
5 L3 Z9 w# `; @( h- _& qSETB TR1 ;开启定时器T1
9 i' L! m0 V2 M/ w( L0 H! TSET2: JNB P3.7,SET1 ;P3.7口为0(键未开释),等待
# O/ R) ]) k$ z1 W, P$ \% i% GSETB 00H ;键开释,分调整闪烁标志置18 ?- W; W3 G! f2 N- k
SET4: JB P3.7,SET3 ;等待键按下" l" h3 P: M* g7 H$ m' W3 ]) X
LCALL DL05S ;有键按下,延时0.5秒
7 S( i7 e9 Q% [5 T: @9 `JNB P3.7,SETHH ;按下时间大于0.5秒转调小时状态* M6 D3 R$ o. {7 t2 y# M
MOV R0,#77H ;按下时间小于0.5秒加1分钟操作+ I4 T. s8 M2 L8 ^3 V# T X
LCALL ADD1 ;调用加1子程序
, l) j& n. ]/ O/ hMOV A,R3 ;取调整单元数据& I9 z1 |0 x2 Z0 ?$ J! I
CLR C ;清进位标志/ m9 Z( H( o, W! q
CJNE A,#60H,HHH ;调整单元数据与60比较, k! X$ j9 a3 u4 }3 }- s1 N9 J
HHH: JC SET4 ;调整单元数据小于60转SET4循环
7 p4 I# i8 F/ Y h$ @LCALL CLR0 ;调整单元数据大于或即是60时清0
0 W; j7 ~, {3 @& J, C2 }& XCLR C ;清进位标志
1 L4 e8 s+ d8 l! cAJMP SET4 ;跳转到SET4循环
/ ^7 F+ k) l. H8 I2 q! OCLOSEDIS: SETB ET0 ;省电(LED不显示)状态。开T0中断0 S1 |% J; Z6 {8 Z& p: W+ h
SETB TR0 ;开启T0定时器(开时钟)9 |' k/ g# h' a. E* O
CLOSE: JB P3.7,CLOSE ;无按键按下,等待。9 \7 X2 T" F+ Q$ A z* o5 C
LCALL DISPLAY ;有键按下,调显示子程序延时削抖, ?- J! N0 R8 j/ Q+ b* \" o
JB P3.7,CLOSE ;是干扰返回CLOSE等待5 b& g+ }' J( u" p1 Y5 Z3 O* L
WAITH: JNB P3.7,WAITH ;等待键开释
6 k: F# F* N5 K! NLJMP START1 ;返回主程序(LED数据显示亮)
8 c' w! z" O* i: XSETHH: CLR 00H ;分闪烁标志清除(进入调小时状态)) U3 e" C8 n: [ ^- a
SETHH1: JNB P3.7,SET5 ;等待键开释
- I" ^5 o$ J$ j5 E7 _" NSETB 01H ;小时调整标志置1) M/ t4 H; ]3 l% u1 g( i ?! K4 o1 e
SET6: JB P3.7,SET7 ;等待按键按下3 g4 ~* W5 J |8 I1 {
LCALL DL05S ;有键按下延时0.5秒- ~' I; U# n% |
JNB P3.7,SETOUT ;按下时间大于0.5秒退出时间调整
5 Q7 b: @1 E" m- CMOV R0,#79H ;按下时间小于0.5秒加1小时操作! T& m- n9 X2 {, T/ r4 T
LCALL ADD1 ;调加1子程序1 u2 b# k1 o1 ^/ `
MOV A,R3 ;
: k) f! e y) a" B' r D, h) k% ?CLR C ;- o% {. S" s R8 F
CJNE A,#24H,HOUU ;计时单元数据与24比较
# q, I! s; ]7 ?4 b: y. j2 [; |HOUU: JC SET6 ;小于24转SET6循环
. A& ^+ @% O6 }. U3 Y# iLCALL CLR0 ;大于或即是24时清0操作 k, A# a* u) }; S
AJMP SET6 ;跳转到SET6循环! a/ g5 p# c/ @! x, v' f+ E; o
SETOUT: JNB P3.7,SETOUT1 ;调时退出程序。等待键开释0 s8 ~" }3 `1 Y& {1 V
LCALL DISPLAY ;延时削抖$ f& F! f% h4 L% n
JNB P3.7,SETOUT ;是抖动,返回SETOUT再等待
! ~3 q5 g% u0 r1 T& I& J9 t5 Y: J# _6 rCLR 01H ;清调小时标志9 {$ g, G- ]9 z# E3 f7 \
CLR 00H ;清调分标志
/ g1 Z2 W) j T5 JCLR 02H ;清闪烁标志
' u( N$ i8 l9 v( }+ ?( f# ACLR TR1 ;封闭定时器T1
- Q, J3 t3 Q, I; W8 K* p, CCLR ET1 ;关定时器T1中断
) } q. y2 C& {9 {SETB TR0 ;开启定时器T0
) D U! L8 K' b, ]" ISETB ET0 ;开定时器T0中断(计时开始)" m6 G1 N1 Q7 V S, n, `' t. z9 K
LJMP START1 ;跳回主程序
: P# F0 V) ~+ t0 x4 mSET1: LCALL DISPLAY ;键开释等待时调用显示程序(调分)
( S3 E3 [' V% k+ o0 I3 Q+ {( bAJMP SET2 ;防止键按下时无时钟显示
9 X9 T: Q$ [( n7 X* j" fSET3: LCALL DISPLAY ;等待调分按键时时钟显示用
$ x1 B0 X! B" X! i6 c* j, k, wAJMP SET42 o0 T, B5 W: i2 |1 j" V( Q
SET5: LCALL DISPLAY ;键开释等待时调用显示程序(调小时)
5 f* y1 t( v H6 D% p, x3 U, QAJMP SETHH1 ;防止键按下时无时钟显示: ] b+ |' a; w5 G
SET7: LCALL DISPLAY ;等待调小时按键时时钟显示用
# d" {' s* B# H8 ?# S) \7 D IAJMP SET6
( b( A$ M; P. sSETOUT1: LCALL DISPLAY ;退出时钟调整时键开释等待
4 m1 o, ?. p. k2 {: GAJMP SETOUT ;防止键按下时无时钟显示; z( k* i# b/ b
;# H+ U* s4 P2 @* u' W l8 f+ J
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
]; u& I6 [* Q F;; 显示程序 ;;6 R/ k# Y3 }0 e9 I. z( Z Q9 p
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;! Q0 e3 q; I, Y( ?. t
$$$$$$$$$$$$$$$$$$$$$$$$$$$
# m6 w1 c5 u* V6 z1 `;1MS延时程序,LED显示程序用
9 |& T4 O* f) V% Q; l6 W) o/ t' WDL1MS: MOV R6,#14H
( ]" Y/ ~+ L, cDL1: MOV R7,#19H
/ e; b( ]. k0 E TDL2: DJNZ R7,DL2
4 V5 X6 V& a! B, e' VDJNZ R6,DL1
; k8 X+ ]+ I) M3 B; e' B8 M( \3 r- cRET! u: [: T9 H+ I3 C0 R: d$ n9 p% ^
;20MS延时程序,采用调用显示子程序以改善LED的显示闪烁现象. [3 e. ^3 r+ K, q9 @* Q. |4 V
DS20MS: ACALL DISPLAY
$ e9 I& a7 A) g; R0 J" aACALL DISPLAY# ~/ W! D; f1 @
ACALL DISPLAY
' d: Q+ `% F, M: C% J# w/ F" MRET
: F- F3 w7 ^8 M/ j9 s9 ^( J# \# y;延时程序,用作按键时间的长短判定
/ E0 P( z2 {! a. EDL1S: LCALL DL05S1 W) E& o( V# \% j, @
LCALL DL05S
F. R9 A- N" s0 l) [ l4 vRET, \1 J& c. o8 H& f
DL05S: MOV R3,#20H ;8毫秒*32=0.196秒
8 Z) K8 [2 E1 q* tDL05S1: LCALL DISPLAY
, x: U2 n$ ?" H+ l: R# m- m& MDJNZ R3,DL05S1
' u' G$ j: M# A3 L+ BRET
5 t; m7 ^% N( l, j% ~END ;程序结束
6 C" X) v6 r/ d/ C |