51单片机作的电子钟程序在很多地方已经有了介绍, 对于单片机学习者而言这个程序基本上是一道门槛,掌握了电子钟程序, 基本上可以说51单片机就掌握了80%。常见的电子钟程序由显示部分, 计算部分, 时钟调整部分构成。 : l! P/ A% Q3 ]( ]' f0 u# q0 l
时钟的基本显示原理:时钟开始显示为0时0分0秒,也就是数码管显示000000,然后每秒秒位加1 ,到9后,10秒位加1,秒位回0。10秒位到5后,即59秒 ,分钟加1,10秒位回0。依次类推,时钟最大的显示值为23小时59分59秒。这里只要确定了1秒的定时时间, 其他位均以此为基准往上累加。 ' S4 r2 P. }3 g5 _# g
开始程序定义了秒, 十秒, 分, 十分,小时, 十小时,共6位的寄存器, 分别存在30h,31h,32h,33h,34h,35h单元,便于程序以后调用和理解。 7 y4 s' p. b3 Z0 Z/ \" V: d5 p" W# s
6个数码管分别显示时、分、秒,一个功能键,可以切换调整时分秒、增加数值、熄灭节电等功能全部集一键。 / \+ b! k+ Y4 F, c$ m
/ ?6 N: n( t/ ^ W5 Y
: i5 r* w+ _5 X l' |
$ u- B5 c4 s5 V
以下是部分汇编源程序,购买我们产品后我们用光盘将完整的单片机汇编源程序和烧写文件送给客户。
- f1 a9 M; ?* }2 T;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;) r. b/ j& l T; x
;; 中断入口程序 ;; (仅供参考)- i8 m% Y, t' I& K1 b4 P1 t
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8 U0 B7 M* Z$ G& ?# N6 D! t4 ]
;
! C& C) [4 I- C( ?ORG 0000H ;程序执行开始地址
, a$ S) N" D# ?" F( [6 \LJMP START ;跳到标号START执行
3 J: \% a% v9 l+ g/ [/ h2 @$ e8 gORG 0003H ;外中断0中断程序入口
# h' l) A3 S2 _8 K. k. l. D# v, eRETI ;外中断0中断返回
a( p' k% e: M+ f* AORG 000BH ;定时器T0中断程序入口6 W, E7 A! e Q
LJMP INTT0 ;跳至INTTO执行, W8 l$ @4 n1 u' t
ORG 0013H ;外中断1中断程序入口- d' ~7 S" Y6 \- j" M1 g' `; x
RETI ;外中断1中断返回- ?* j/ d4 t7 B; A. x. T& X1 w
ORG 001BH ;定时器T1中断程序入口$ Y6 b' r6 r) o4 f: V
LJMP INTT1 ;跳至INTT1执行
9 k) Z( I4 x8 OORG 0023H ;串行中断程序入口地址
0 y" b \ n1 J# ?/ L* i6 yRETI ;串行中断程序返回) U; g; O5 r: f0 ]- w
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;( _7 o, G5 R# P# Z" l
;; 主 程 序 ;;5 J# `+ ]/ N* h
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;& C+ f+ h6 o, o
;9 f# u8 Y9 Y: O" |7 z/ |: P. K: t
START: MOV R0,#70H ;清70H-7AH共11个内存单元3 Z/ G: k! ]/ a
MOV R7,#0BH + A! z$ T1 V9 X
;clr P3.7 ;) C4 l: }* R! _& |! g9 d% z
CLEARDISP: MOV @R0,#00H ;
5 I% M( t" |! n7 CINC R0 ;2 E% U2 \! g; V3 e' P+ y9 h7 D
DJNZ R7,CLEARDISP ;9 d* O ~1 Y) ]$ l6 P
MOV 20H,#00H ;清20H(标志用)
; p7 q( N" G: @; u& r6 gMOV 7AH,#0AH ;放入"熄灭符"数据
C/ o+ o/ p6 YMOV TMOD,#11H ;设T0、T1为16位定时器
4 E2 _0 i6 a9 f( ?. B6 vMOV TL0,#0B0H ;50MS定时初值(T0计时用)
8 Q/ A/ C$ b, H$ P* t' WMOV TH0,#3CH ;50MS定时初值
" K3 o- o& \/ ?: s7 m: |; LMOV TL1,#0B0H ;50MS定时初值(T1闪烁定时用)
+ C% ~. t0 Y7 X" eMOV TH1,#3CH ;50MS定时初值/ u& K! c3 M; p8 ?$ j6 ^; G& k
SETB EA ;总中断开放
7 t8 v9 |2 x, F8 q. a4 p: |SETB ET0 ;答应T0中断
6 O2 u8 h/ _ Z: i6 PSETB TR0 ;开启T0定时器4 M8 J* W+ z9 o3 A9 e
MOV R4,#14H ;1秒定时用初值(50MS×20) x) w8 k% P0 v8 D7 O& L A9 z: W
START1: LCALL DISPLAY ;调用显示子程序1 J" t* H5 x; w% a( B9 R: P1 d5 D2 `, {
JNB P3.7,SETMM1 ;P3.7口为0时转时间调整程序
2 T9 t- c- I9 E* w1 u" C: q5 M9 c( DSJMP START1 ;P3.7口为1时跳回START1
2 Y* o! \- _6 A' ASETMM1: LJMP SETMM ;转到时间调整程序SETMM
3 i$ |0 [1 }+ k x8 i1 T3 i;9 i; B; O8 ?4 A4 k8 p' N
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9 C( z" Y7 w! p1 \& Z1 C
;; 1秒计时程序 ;;
8 O* E7 f; r% R/ b2 ^" Y8 b7 M0 n;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
# `2 V! t7 c+ N o5 i% m! j- D. V;T0中断服务程序 j# Q9 ~# ^ i/ }; H
INTT0: PUSH ACC ;累加器入栈保护% j* R) \( G7 y' ]
PUSH PSW ;状态字入栈保护 S+ h( E8 Q& z5 V/ _+ G" n3 ]8 D
CLR ET0 ;关T0中断答应
, |( t& E* ]+ P) y- V8 g. Q$ vCLR TR0 ;封闭定时器T00 G) p+ B+ `2 ]5 f( ~
MOV A,#0B7H ;中断响应时间同步修正
, i, u* u2 r: k8 i: i; D' SADD A,TL0 ;低8位初值修正' A' D8 N5 W' B2 a, y2 s$ m4 [0 j
MOV TL0,A ;重装初值(低8位修正值)/ F! |5 V. c q3 C/ B$ l! N4 d2 @! R
MOV A,#3CH ;高8位初值修正% }7 C- d) Z' a( g1 j! T' R. v
ADDC A,TH0 ;
( D" K/ a& i2 ?0 W0 ^MOV TH0,A ;重装初值(高8位修正值)
, n* s4 u+ J( T+ \2 pSETB TR0 ;开启定时器T06 ]6 v( h" Y1 ]: {
DJNZ R4, OUTT0 ;20次中断未到中断退出
# K- v# n4 q( A* \! TADDSS: MOV R4,#14H ;20次中断到(1秒)重赋初值: T7 x( u7 v0 c/ N8 h
MOV R0,#71H ;指向秒计时单元(71H-72H) }" i: q! v& W: p8 V2 b7 U
ACALL ADD1 ;调用加1程序(加1秒操作)' l" o7 |6 ?- q7 G# ]) W/ ?
MOV A,R3 ;秒数据放入A(R3为2位十进制数组合)9 E! w8 `* g- n, u
CLR C ;清进位标志
! J. |9 t1 a& A! J- xCJNE A,#60H,ADDMM ;$ O+ a) S z& F. p7 E; N% p4 S
ADDMM: JC OUTT0 ;小于60秒时中断退出3 C3 B1 w0 o# _, S
ACALL CLR0 ;大于或即是60秒时对秒计时单元清0
- P; [' Z5 k9 K' {: P$ s" I" YMOV R0,#77H ;指向分计时单元(76H-77H)0 }2 U' z& B6 o
ACALL ADD1 ;分计时单元加1分钟' d$ d" N: X# l# ^7 A! u; H. P
MOV A,R3 ;分数据放入A1 A1 v A' b- R
CLR C ;清进位标志# j8 l9 R/ [% L- _9 ~
CJNE A,#60H,ADDHH ;0 E! h% k/ s4 p& L6 w
ADDHH: JC OUTT0 ;小于60分时中断退出* Q$ P! n, h+ }" ^2 u/ e$ q- \: N
ACALL CLR0 ;大于或即是60分时分计时单元清0' k' _, i i% N1 w c
MOV R0,#79H ;指向小时计时单(78H-79H)/ O1 k3 @& _& S: t0 Y% ]# E* ]
ACALL ADD1 ;小时计时单元加1小时
+ ` m/ r& F% L( ~- P' OMOV A,R3 ;时数据放入A
3 T9 X8 `0 ~' s: U7 \( ACLR C ;清进位标志1 s+ l# A' `; _
CJNE A,#24H,HOUR ;
& s+ `# K* w4 i q7 A z+ {HOUR: JC OUTT0 ;小于24小时中断退出" ]7 w6 C& C2 _# J
ACALL CLR0 ;大于或即是24小时小时计时单元清0
$ V7 q$ l1 u, u5 g0 ]/ h* z- LOUTT0: MOV 72H,76H ;中断退出时将分、时计时单元数据移6 f& [+ ?1 z! f& m r
MOV 73H,77H ;入对应显示单元
( ?) k+ S% T: |: A/ k$ VMOV 74H,78H ;* x+ S6 ?' I) D5 r
MOV 75H,79H ;
( w" h* y" ]- hPOP PSW ;恢复状态字(出栈)
7 s0 x. `! H( P8 m: `2 nPOP ACC ;恢复累加器5 y6 A( u3 x, s8 \3 E9 N4 }
SETB ET0 ;开放T0中断
% g( q% f& o- p Q& t* D4 a- QRETI ;中断返回
! J8 ^' z4 Q4 q) ^/ J;6 u1 A* P& X' {% O$ t
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4 h8 e$ v! m- T! t4 w" o
;; 闪动调时 程 序 ;;2 B' U- j* X5 O( ^+ r. {* u
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;' Z7 ]' e. ~+ p% r4 K
;T1中断服务程序,用作时间调整时调整单元闪烁指示: |3 D+ V0 D2 q; k7 \9 O2 o _
INTT1: PUSH ACC ;中断现场保护4 i+ P+ l( I9 z1 X
PUSH PSW ;: G" a* ~( a! E7 E3 b3 p
MOV TL1, #0B0H ;装定时器T1定时初值7 |6 b6 I+ T( P
MOV TH1, #3CH ;0 l: Q8 |5 c% n. X
DJNZ R2,INTT1OUT ;0.3秒未到退出中断(50MS中断6次)
. J/ j3 U% r3 y6 ^/ ~MOV R2,#06H ;重装0.3秒定时用初值: x5 Q# |+ |: q, u0 f# c
CPL 02H ;0.3秒定时到对闪烁标志取反; F+ h6 @- O" m- G3 P( `% `5 g2 \
JB 02H,FLASH1 ;02H位为1时显示单元"熄灭"
2 s8 i' B6 R8 L4 i0 Z0 _6 ?" fMOV 72H,76H ;02H位为0时正常显示
8 [/ u$ i0 Y; D0 z7 l" W7 l+ fMOV 73H,77H ;* S ^! W5 }- Q
MOV 74H,78H ;
- E; E6 P- o* u. H% b9 JMOV 75H,79H ;7 C8 u8 |9 @6 ]: D5 U8 C
INTT1OUT: POP PSW ;恢复现场6 e5 z5 `7 {1 U$ a; Y _. U0 \% i
POP ACC ;
6 Q8 e5 b/ c6 E) T$ @RETI ;中断退出; t. }% I/ t! m; o, C. V
FLASH1: JB 01H,FLASH2 ;01H位为1时,转小时熄灭控制: |1 s" v3 Y& t9 D2 g- W: W
MOV 72H,7AH ;01H位为0时,"熄灭符"数据放入分
3 o7 S$ H3 B# W0 M" ^/ \MOV 73H,7AH ;显示单元(72H-73H),将不显示分数据
* }, D$ S; H/ ?7 w/ mMOV 74H,78H ;7 A/ a! y5 Z% w5 _- c
MOV 75H,79H ;
" X- \! E- I/ X% T) @/ s) vAJMP INTT1OUT ;转中断退出
) q1 K& d8 [" _ Q! A4 X, o( n' ~FLASH2: MOV 72H,76H ;01H位为1时,"熄灭符"数据放入小时9 a) _9 D$ y2 G+ _- ]
MOV 73H,77H ;显示单元(74H-75H),小时数据将不显示
% S1 A9 M1 z4 y+ l$ M8 F0 `MOV 74H,7AH ;: }+ ?' H3 s: n
MOV 75H,7AH ;: T) O6 f4 L S6 q R8 e9 N
AJMP INTT1OUT ;转中断退出
3 q1 R: T6 c6 j9 v! J;
2 o/ [2 ?; X0 G' {6 {% Y( K;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;, ~2 Q7 Q$ h0 N/ `: B- L+ E2 I
;; 加1子 程 序 ;;
: D* v- G5 ]9 R. p2 e( e" U;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4 {( @) ~4 d4 g# R$ n3 ]9 i8 m;
0 i! d/ \+ x+ {1 | WADD1: MOV A,@R0 ;取当前计时单元数据到A
) J( ~8 I: a% O8 d" }( uDEC R0 ;指向前一地址& @ G7 o7 @0 Y: E4 K4 A. c7 t
SWAP A ;A中数据高四位与低四位交换. f* o' S y' A
ORL A,@R0 ;前一地址中数据放入A中低四位
& v4 L8 o; J( R" h0 [ADD A,#01H ;A加1操作3 f8 |7 ~5 n9 R( e2 g) X( X
DA A ;十进制调整
, t8 P. ]) S3 M! p4 X1 E9 Z1 JMOV R3,A ;移入R3寄存器4 s. ^# A2 T3 q# K7 ^
ANL A,#0FH ;高四位变0
3 f# j$ C# T0 N4 k3 M0 R b, m2 _1 [MOV @R0,A ;放回前一地址单元/ s- @3 h; `. r) }% T! \
MOV A,R3 ;取回R3中暂存数据
* J) \, F; ]! T7 p* CINC R0 ;指向当前地址单元
& g' h4 ^+ I% G9 W# B1 R. v( zSWAP A ;A中数据高四位与低四位交换
$ z+ @9 ]; J8 s6 r. [5 lANL A,#0FH ;高四位变0' e) m( ]& E& K" @/ t: `
MOV @R0,A ;数据放入当削地址单元中3 z0 s# m- Y& q9 M+ @5 x
RET ;子程序返回
. ^& I5 }: w' J& R, ?. c9 m3 X+ r;/ j6 l% V% y$ A, M/ M
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+ J" G' j7 Z ~2 x y& v- g
;; 清零程序 ;;. K. t0 N4 l% K' Q+ K2 v4 a& r
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|* L9 C5 e# ^+ `4 c" G7 v: x+ M5 {;.............
* Z6 f" y0 u0 _) i" \8 e6 p2 t;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
5 l( y- @" C0 i1 X;; 时钟调整程序 ;;6 t6 @. R+ k+ g5 o4 `8 T+ \/ d
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4 V, E' U, v5 G# H! r/ C* R;当调时按键按下时进入此程序: R( Q6 D, w5 Q4 [6 x2 ?
SETMM: cLR ET0 ;关定时器T0中断1 |5 ]8 w; R/ s2 V9 a5 [8 `, v) E
CLR TR0 ;封闭定时器T0
+ I* D% t3 q1 DLCALL DL1S ;调用1秒延时程序
# t; e# L+ F" e* e( D# G5 K0 W! lJB P3.7,CLOSEDIS ;键按下时间小于1秒,封闭显示(省电)
7 N* o0 n! C" s4 D5 |MOV R2,#06H ;进入调时状态,赋闪烁定时初值. p9 w Q; Q$ y! I' H5 A6 W
SETB ET1 ;答应T1中断
! g+ n1 X$ _9 Q1 z9 gSETB TR1 ;开启定时器T1, x( {5 |- [5 r" c* v% A" e5 v. P
SET2: JNB P3.7,SET1 ;P3.7口为0(键未开释),等待3 F! ^' A) K1 t$ K- |( X1 |2 g) j
SETB 00H ;键开释,分调整闪烁标志置1
% E$ ?! l+ v3 E0 L- `+ JSET4: JB P3.7,SET3 ;等待键按下% }/ k( Q/ Z, B( c' l+ G9 z' ^* _
LCALL DL05S ;有键按下,延时0.5秒' u! k- b0 b( J8 o7 V0 i
JNB P3.7,SETHH ;按下时间大于0.5秒转调小时状态
% L% ~/ d8 b! Y" r- D9 t7 AMOV R0,#77H ;按下时间小于0.5秒加1分钟操作( i4 {4 h, y+ z' V, T
LCALL ADD1 ;调用加1子程序" [$ r. K1 M# U3 X* M# y, s
MOV A,R3 ;取调整单元数据
- G1 [$ x [* c i1 M: W" C+ uCLR C ;清进位标志$ Y. E: C0 C8 j% ]: y) G8 a
CJNE A,#60H,HHH ;调整单元数据与60比较
( p9 d1 e l; FHHH: JC SET4 ;调整单元数据小于60转SET4循环
" O1 m) q7 y8 K) mLCALL CLR0 ;调整单元数据大于或即是60时清0# D, z# |! L! o
CLR C ;清进位标志
( g" k4 C9 Q1 YAJMP SET4 ;跳转到SET4循环
9 q) E) S; f% E/ {4 SCLOSEDIS: SETB ET0 ;省电(LED不显示)状态。开T0中断
. Q6 ?( Y+ ` {' N$ j S# t* D1 |SETB TR0 ;开启T0定时器(开时钟)
7 { P0 m+ v; ~CLOSE: JB P3.7,CLOSE ;无按键按下,等待。
* Z# v. |" Q' @' aLCALL DISPLAY ;有键按下,调显示子程序延时削抖6 }' b5 g" T7 T
JB P3.7,CLOSE ;是干扰返回CLOSE等待7 Z1 S4 F1 Z1 D* z! s# ^7 }
WAITH: JNB P3.7,WAITH ;等待键开释
+ i7 V$ ]4 T( b2 ZLJMP START1 ;返回主程序(LED数据显示亮)3 l( g' a N. a- R/ ~) I! Q) ~5 Q
SETHH: CLR 00H ;分闪烁标志清除(进入调小时状态)+ Y. \& \5 v: U$ h4 C! {; _( I
SETHH1: JNB P3.7,SET5 ;等待键开释
! X3 ~( D" {, H- ]' cSETB 01H ;小时调整标志置1! P8 r* h5 D$ K3 @; N9 w4 f
SET6: JB P3.7,SET7 ;等待按键按下3 e0 r( c4 M" c L5 I* J
LCALL DL05S ;有键按下延时0.5秒
9 H9 o3 g2 P! GJNB P3.7,SETOUT ;按下时间大于0.5秒退出时间调整' B( q( n* m/ {/ g% ^; i2 a
MOV R0,#79H ;按下时间小于0.5秒加1小时操作1 m: o! c! c3 X
LCALL ADD1 ;调加1子程序! s4 q( r/ C0 R \2 v
MOV A,R3 ;
2 _$ z0 C# y NCLR C ;
5 o" {9 w4 @, p/ HCJNE A,#24H,HOUU ;计时单元数据与24比较/ B4 R$ s) {4 L1 c! }* l% y
HOUU: JC SET6 ;小于24转SET6循环
+ i4 T1 h% _& ALCALL CLR0 ;大于或即是24时清0操作
F: j, P8 Y4 j. G/ }AJMP SET6 ;跳转到SET6循环
7 o2 ~( Q& B/ JSETOUT: JNB P3.7,SETOUT1 ;调时退出程序。等待键开释7 U3 k, X3 d1 K8 v7 i. I
LCALL DISPLAY ;延时削抖
9 d4 [; C7 d6 T2 [3 DJNB P3.7,SETOUT ;是抖动,返回SETOUT再等待: B7 |% f) x9 ?7 ^1 E* |8 W b
CLR 01H ;清调小时标志
5 h7 ~3 s/ c& e j5 T# M HCLR 00H ;清调分标志
; G# L1 j+ D! w% ]CLR 02H ;清闪烁标志7 i9 N8 s# K- R5 H
CLR TR1 ;封闭定时器T15 [" [. B$ v$ b2 Z6 \7 t/ c
CLR ET1 ;关定时器T1中断" i) c+ }9 Z& D
SETB TR0 ;开启定时器T05 x* }& H) b! N* l) \
SETB ET0 ;开定时器T0中断(计时开始)
: v& x9 a* N- L7 X6 r rLJMP START1 ;跳回主程序
; Y! g& m9 E7 j i" y4 [SET1: LCALL DISPLAY ;键开释等待时调用显示程序(调分)" |" O, B+ y R- E) t
AJMP SET2 ;防止键按下时无时钟显示2 F/ {, s; o+ g; \. t+ F
SET3: LCALL DISPLAY ;等待调分按键时时钟显示用, G8 ?/ { o6 ?. E) O
AJMP SET43 Q' H" m8 U, f5 M M2 a" ]- [
SET5: LCALL DISPLAY ;键开释等待时调用显示程序(调小时)% S; k2 l8 ~5 y
AJMP SETHH1 ;防止键按下时无时钟显示: `* p+ J7 F' t7 B) }8 x& \6 u
SET7: LCALL DISPLAY ;等待调小时按键时时钟显示用/ t3 m' X o# H1 m( {! C( r0 a; f) ]
AJMP SET6
. {9 H# y1 O0 C# N3 r9 RSETOUT1: LCALL DISPLAY ;退出时钟调整时键开释等待
/ ~& O" X" m# e) }, h: l; x4 WAJMP SETOUT ;防止键按下时无时钟显示4 G2 }0 L4 i4 e3 q1 ?' K7 ?0 Y
;9 r* X% o# `& |% J5 \) f2 ~
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;. H4 u! e$ O. k" T G8 o) A }
;; 显示程序 ;;
1 q9 a' _" \3 ]1 K$ f;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;* b7 \0 {( t. X& Q& z0 `9 W6 B
$$$$$$$$$$$$$$$$$$$$$$$$$$$9 l r. V7 z4 m6 ~6 `. B
;1MS延时程序,LED显示程序用3 E' m- e$ J9 n) y9 k+ W
DL1MS: MOV R6,#14H
, p1 U R. F! y* I9 w' L# SDL1: MOV R7,#19H# S- i$ a: J- U+ y" ?, ]5 E
DL2: DJNZ R7,DL20 k! ?7 ?% d8 F
DJNZ R6,DL1
) A/ u/ R4 F: P/ w: D& }RET
/ M# J X6 n, ?;20MS延时程序,采用调用显示子程序以改善LED的显示闪烁现象- U( j9 U+ R7 E1 B8 v' s
DS20MS: ACALL DISPLAY
6 r" J6 x. I9 S! C$ p* bACALL DISPLAY( c8 m% q A0 _& H
ACALL DISPLAY4 x: f( |& o; T1 E5 U& x- ]
RET
2 X/ _- p3 S0 {5 ^* P0 r;延时程序,用作按键时间的长短判定
, \2 A, i; M2 D7 vDL1S: LCALL DL05S
: T4 p, G4 @' C% I6 ~5 sLCALL DL05S
5 S" P& ~$ V1 f0 |) K) G! vRET
) f6 F- f5 E% _; X! _6 l+ X. f/ cDL05S: MOV R3,#20H ;8毫秒*32=0.196秒
# X1 o! o2 z( TDL05S1: LCALL DISPLAY, T/ W7 y3 K1 _" Y6 a# g1 @
DJNZ R3,DL05S1, D/ L$ y1 T, U' z5 E( o) Y. l
RET: F& k5 I0 E! j2 Z& N
END ;程序结束& i5 S' ?" }7 v5 s1 o
|