51单片机作的电子钟程序在很多地方已经有了介绍, 对于单片机学习者而言这个程序基本上是一道门槛,掌握了电子钟程序, 基本上可以说51单片机就掌握了80%。常见的电子钟程序由显示部分, 计算部分, 时钟调整部分构成。
& F6 N$ D* [! \; R& b4 R 时钟的基本显示原理:时钟开始显示为0时0分0秒,也就是数码管显示000000,然后每秒秒位加1 ,到9后,10秒位加1,秒位回0。10秒位到5后,即59秒 ,分钟加1,10秒位回0。依次类推,时钟最大的显示值为23小时59分59秒。这里只要确定了1秒的定时时间, 其他位均以此为基准往上累加。 8 J. G7 q* b, B) ?( u* s' t
开始程序定义了秒, 十秒, 分, 十分,小时, 十小时,共6位的寄存器, 分别存在30h,31h,32h,33h,34h,35h单元,便于程序以后调用和理解。 7 |3 D7 T \$ P9 r* ^
6个数码管分别显示时、分、秒,一个功能键,可以切换调整时分秒、增加数值、熄灭节电等功能全部集一键。 ) A( u* J: ?- S
; L8 Q% d; I$ m2 F i ' O7 T$ ]! |3 @9 Y" x% g
, O% R* Y: O2 V% k: m 以下是部分汇编源程序,购买我们产品后我们用光盘将完整的单片机汇编源程序和烧写文件送给客户。
0 ?4 p6 o* h; }9 ^2 Y+ p) H$ ^;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
% b; w( u# m& N A;; 中断入口程序 ;; (仅供参考)2 ~2 v3 I, U( z# E4 \' V
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
7 {" c4 ?* p9 x; H;
. C: A1 Y/ v0 ~) x2 p4 vORG 0000H ;程序执行开始地址
5 s6 g) B4 v( B; s. VLJMP START ;跳到标号START执行
% q. [+ L1 A; H- D! |# jORG 0003H ;外中断0中断程序入口+ {. S) {% ~0 ?3 H
RETI ;外中断0中断返回
1 u8 m: T3 Q {& C3 |) P4 U& ?ORG 000BH ;定时器T0中断程序入口
4 ^6 n0 q4 V. O" M( qLJMP INTT0 ;跳至INTTO执行1 ` c6 T2 C- Y5 \
ORG 0013H ;外中断1中断程序入口8 z9 p+ e# F9 Z% R0 x
RETI ;外中断1中断返回
0 g- U3 D* Q% M% U# }0 hORG 001BH ;定时器T1中断程序入口
$ E0 i- V/ d$ o- m/ r! Q- ILJMP INTT1 ;跳至INTT1执行; y m5 B0 ]# w" @# q, |
ORG 0023H ;串行中断程序入口地址
0 a) |9 ?( I8 {+ D8 J' VRETI ;串行中断程序返回( e5 p! Q' d4 P9 V1 J- [; s
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9 u0 V) `/ P: u$ s3 ~, N
;; 主 程 序 ;;
7 _2 ]: d/ Z5 q6 V;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;* Z. o+ l+ z% ^- Y
;
7 s3 Z/ S% {! dSTART: MOV R0,#70H ;清70H-7AH共11个内存单元
; s& n9 b, R" c* W( s' b" V( ~4 `MOV R7,#0BH
+ @3 `1 ]! K% U; {( I6 A! R;clr P3.7 ;
5 P/ Q, U0 R- p) d* ?CLEARDISP: MOV @R0,#00H ;
. i& v9 v& v( PINC R0 ;
; {- b) l/ k3 q2 d5 D7 P. B6 V( q: SDJNZ R7,CLEARDISP ;
6 x) J, E$ h! {; @MOV 20H,#00H ;清20H(标志用)
2 y' l9 ~; @1 q' v/ M; b) AMOV 7AH,#0AH ;放入"熄灭符"数据
: O b R# f- W) q1 wMOV TMOD,#11H ;设T0、T1为16位定时器2 ]3 Y+ l' ?- |) R+ Z0 Y
MOV TL0,#0B0H ;50MS定时初值(T0计时用)
; a e! U% |9 j* BMOV TH0,#3CH ;50MS定时初值/ ?, I: q$ e- i! D
MOV TL1,#0B0H ;50MS定时初值(T1闪烁定时用)& e3 r/ w4 S& h! t2 n4 }
MOV TH1,#3CH ;50MS定时初值
P( p0 _1 `- _. e) R/ `' {1 vSETB EA ;总中断开放
! s! v0 ?; U. hSETB ET0 ;答应T0中断3 ^ ]' d' r7 f, _' _4 {
SETB TR0 ;开启T0定时器! H, Z. M0 {9 Z& R: t+ [( P. W
MOV R4,#14H ;1秒定时用初值(50MS×20)
4 p$ G- T& \- @) E1 TSTART1: LCALL DISPLAY ;调用显示子程序
5 v/ T* B$ a' m0 S* zJNB P3.7,SETMM1 ;P3.7口为0时转时间调整程序 7 _4 J! e+ j6 j) c& Q/ U9 [
SJMP START1 ;P3.7口为1时跳回START1% K4 T8 o. U) Y0 L3 J$ x
SETMM1: LJMP SETMM ;转到时间调整程序SETMM
* [* f' b% B* }$ q% V& i;
3 P2 s- d; t, k7 {5 t;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
. z/ s; o! g4 ?; }' @+ r! c;; 1秒计时程序 ;;9 Q6 u" |5 `* u; p2 M, a% O
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;. Q( G: D7 P* N1 l, p
;T0中断服务程序8 Z* t: D4 @9 x& u- E* y$ c- @& f
INTT0: PUSH ACC ;累加器入栈保护1 m. ~5 [+ I$ p, X
PUSH PSW ;状态字入栈保护
: N. t5 h! E$ Z- u! ^: cCLR ET0 ;关T0中断答应! Y6 G2 O* `7 K0 X, b) J
CLR TR0 ;封闭定时器T02 N. B Z9 h- Z3 P
MOV A,#0B7H ;中断响应时间同步修正8 Z v2 ~+ J1 C5 b9 q+ Y1 b% t
ADD A,TL0 ;低8位初值修正
0 k: K2 T# G4 `7 W6 w% E$ i" OMOV TL0,A ;重装初值(低8位修正值)
# u/ B; i' B. D2 f6 C$ [% c t" FMOV A,#3CH ;高8位初值修正
' _0 r- j% J9 P3 {2 z/ E* ~ADDC A,TH0 ;( ]3 E) l: Y4 t% e# {
MOV TH0,A ;重装初值(高8位修正值)
( b8 f9 Y$ ], S* E' l0 QSETB TR0 ;开启定时器T0
) h/ s. c2 u' W4 J! C; O: eDJNZ R4, OUTT0 ;20次中断未到中断退出& T0 R! `$ i1 i# u! w
ADDSS: MOV R4,#14H ;20次中断到(1秒)重赋初值
/ l4 r, }" B9 xMOV R0,#71H ;指向秒计时单元(71H-72H)& O) _' i: S; l+ `% T
ACALL ADD1 ;调用加1程序(加1秒操作)3 Y9 T" e2 p, x: l
MOV A,R3 ;秒数据放入A(R3为2位十进制数组合)
3 Q. h7 w9 k5 S4 u8 f3 SCLR C ;清进位标志' M7 S0 a- X( s- |! R: N# u$ C& l
CJNE A,#60H,ADDMM ;
' p" Q4 J2 C+ L4 [5 f: zADDMM: JC OUTT0 ;小于60秒时中断退出$ S4 k+ D- H) ]! S; l# _# t
ACALL CLR0 ;大于或即是60秒时对秒计时单元清0
% _: z/ Z: W# |1 @# Z+ xMOV R0,#77H ;指向分计时单元(76H-77H)
- k' ]5 M) q( a+ X7 u2 T b) ~ACALL ADD1 ;分计时单元加1分钟3 [+ ^+ W0 |( \# t0 S" y4 ~
MOV A,R3 ;分数据放入A
9 h* }7 T/ B6 K RCLR C ;清进位标志/ V3 \5 R! H$ n0 w' l+ I* Q% G: V3 j
CJNE A,#60H,ADDHH ;3 ^- y9 |# W' ^# u" t6 a
ADDHH: JC OUTT0 ;小于60分时中断退出
: I2 j3 p- X [) l8 j9 kACALL CLR0 ;大于或即是60分时分计时单元清0" H5 z! ^4 P$ `3 Q; [
MOV R0,#79H ;指向小时计时单(78H-79H)# q6 Q9 k* Y3 |' H! w
ACALL ADD1 ;小时计时单元加1小时
& V$ K, O" D* vMOV A,R3 ;时数据放入A
9 i: ^4 u6 H) S9 ~CLR C ;清进位标志
0 R4 X& S( z4 s# dCJNE A,#24H,HOUR ;
( o% |5 A6 J; r6 H5 ^4 ZHOUR: JC OUTT0 ;小于24小时中断退出% b( [3 M. W$ B( X
ACALL CLR0 ;大于或即是24小时小时计时单元清0' \7 s- Z& `1 p
OUTT0: MOV 72H,76H ;中断退出时将分、时计时单元数据移
: y' a! J y3 C, g( EMOV 73H,77H ;入对应显示单元
! }5 t4 A S# w; d! z1 UMOV 74H,78H ;0 D: N% n" F3 ~: q4 n
MOV 75H,79H ;0 h& |! d; c# U# n: G$ L
POP PSW ;恢复状态字(出栈)
/ a6 E" O1 O! `' i H( o. x( v pPOP ACC ;恢复累加器- K" t8 c4 e8 h2 C/ F5 n6 `$ j7 A
SETB ET0 ;开放T0中断8 l( j" |0 Q3 F' K* g' Y
RETI ;中断返回
/ `9 g/ d4 u2 i7 U, v1 y4 d;
/ \* E' D! e% J* C4 d6 `;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" x0 C+ f: g3 p
;; 闪动调时 程 序 ;;7 ?2 z" [' H6 V. v% K1 y
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1 \5 ?4 Z( R) H' t: ?;T1中断服务程序,用作时间调整时调整单元闪烁指示
8 x* Y6 F9 }3 X( G) R; LINTT1: PUSH ACC ;中断现场保护
6 c! f/ O _0 L H8 o8 g- H+ cPUSH PSW ;, c0 X6 e8 z$ v5 }5 \
MOV TL1, #0B0H ;装定时器T1定时初值 K- d/ ?( @7 H7 Y$ s; A' N9 g% [
MOV TH1, #3CH ;
0 S. C% G. A T+ oDJNZ R2,INTT1OUT ;0.3秒未到退出中断(50MS中断6次)
# t- E2 d( U( K) kMOV R2,#06H ;重装0.3秒定时用初值
+ f0 O- h3 F Y: d2 ]4 CCPL 02H ;0.3秒定时到对闪烁标志取反+ u, a2 f+ R& g1 G/ Q$ S+ F* T
JB 02H,FLASH1 ;02H位为1时显示单元"熄灭"# @4 y( N9 @$ M- l
MOV 72H,76H ;02H位为0时正常显示$ k6 z/ M3 F y- i
MOV 73H,77H ;
7 O- ]9 M$ e' O# `3 W1 kMOV 74H,78H ;4 v0 ^7 I' G- i/ \( T+ y/ I9 O$ x& Q
MOV 75H,79H ;6 N5 \, r! ?. ~8 `) e+ N* ^2 B7 b+ @' j
INTT1OUT: POP PSW ;恢复现场
9 b' P% h- A9 W: J4 ^3 ~" X0 jPOP ACC ;4 E5 H R! w3 n0 P/ ?8 Q1 ]
RETI ;中断退出9 }( v7 P7 ?6 [
FLASH1: JB 01H,FLASH2 ;01H位为1时,转小时熄灭控制/ y) h) f$ v* H( o1 ?8 A1 p0 y
MOV 72H,7AH ;01H位为0时,"熄灭符"数据放入分! a6 ?. q' h3 h$ K, h: b8 H
MOV 73H,7AH ;显示单元(72H-73H),将不显示分数据5 e- _5 b- z( N! B) ~- Z m
MOV 74H,78H ;
3 \- Q, e+ s1 m7 x W+ nMOV 75H,79H ;
" _4 z/ g- n) u& tAJMP INTT1OUT ;转中断退出! {" d4 q3 ^$ j
FLASH2: MOV 72H,76H ;01H位为1时,"熄灭符"数据放入小时
3 V, |' \9 [% {MOV 73H,77H ;显示单元(74H-75H),小时数据将不显示/ V4 O7 P8 b; l J" B2 U {& ~
MOV 74H,7AH ;4 C! H& i# @* u8 A K7 E
MOV 75H,7AH ;
( Y& m! q1 v' D. p/ ~5 l1 XAJMP INTT1OUT ;转中断退出
7 ] U( y, b# K/ Y;( `3 o& }& v/ c+ e0 I# E+ j
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5 b- h/ Q) p5 _, u6 S5 U
;; 加1子 程 序 ;;1 p! L! x% G4 F8 @' B+ Y) j) k
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
. \! s0 S, D" o7 G+ Q( v9 V;
/ `0 G2 m) H, bADD1: MOV A,@R0 ;取当前计时单元数据到A6 Q9 c' u$ `, n/ {; ]. y
DEC R0 ;指向前一地址
: r8 z! b0 t( DSWAP A ;A中数据高四位与低四位交换
* ?$ i) |" F! H8 [( P0 nORL A,@R0 ;前一地址中数据放入A中低四位
1 ]1 U5 w8 ^/ K) d0 S5 hADD A,#01H ;A加1操作
3 }0 `) H( r4 n* A- ?; {DA A ;十进制调整
2 x+ S8 Z$ M4 x* cMOV R3,A ;移入R3寄存器, G% d" M; v7 K$ W+ A& {
ANL A,#0FH ;高四位变0
# g5 n- H. F# J5 ~" x+ eMOV @R0,A ;放回前一地址单元
% S6 c5 F9 [1 ~0 a$ _$ ^& @" KMOV A,R3 ;取回R3中暂存数据7 f+ U$ L' r5 ~7 B" q' y$ _" K
INC R0 ;指向当前地址单元8 r* o: @+ e) z0 X
SWAP A ;A中数据高四位与低四位交换" B9 v( K# x4 z1 X& O
ANL A,#0FH ;高四位变0
$ Z0 B* x8 ^4 D( c- D8 `4 R4 P, BMOV @R0,A ;数据放入当削地址单元中, z8 M2 m8 Q4 H9 I7 \% d# z+ x# E5 l" l
RET ;子程序返回# T0 T' {- Y0 i9 d7 s9 R7 F
;
2 m' G! f, ?+ n* X+ o) h;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
! u/ L3 B3 b4 N% U8 l;; 清零程序 ;;) b* Z4 n6 t" _: b' C0 O
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;& C" H/ D# A. q
;.............( v8 q8 O! A4 p' u' ?, R
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
9 H# `: Z/ L! H; R# y2 T5 i;; 时钟调整程序 ;;
9 N; f; x0 Z2 m+ @) g3 @0 ^;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4 m8 I0 U9 }; n' V+ J;当调时按键按下时进入此程序
. z x( Q+ ^4 CSETMM: cLR ET0 ;关定时器T0中断
! k# L" P# Z2 T, g- L. Y, BCLR TR0 ;封闭定时器T0
+ O$ U8 O( H# w/ {3 m/ yLCALL DL1S ;调用1秒延时程序2 d1 T- P( c# v. s2 r* M& j
JB P3.7,CLOSEDIS ;键按下时间小于1秒,封闭显示(省电)+ K. Q. b- ~/ d6 h( d
MOV R2,#06H ;进入调时状态,赋闪烁定时初值
1 ^) x$ v6 s/ L! d7 ESETB ET1 ;答应T1中断 s8 `6 t" u* t8 O. y2 {3 v
SETB TR1 ;开启定时器T1
# V* \% o* X2 f2 {% g! r6 ?SET2: JNB P3.7,SET1 ;P3.7口为0(键未开释),等待
9 ~1 z) M" a/ n6 M& a$ g4 ?SETB 00H ;键开释,分调整闪烁标志置1
7 W( g! W& w" s$ Z# o5 }SET4: JB P3.7,SET3 ;等待键按下
- j" z5 f& l) a" GLCALL DL05S ;有键按下,延时0.5秒
+ y1 I0 ^! k/ X+ S: `JNB P3.7,SETHH ;按下时间大于0.5秒转调小时状态" A" e+ ?7 |( [5 M, M
MOV R0,#77H ;按下时间小于0.5秒加1分钟操作( t* Y, X, V: C7 {; j6 B
LCALL ADD1 ;调用加1子程序# j( P/ F, C/ Q$ m
MOV A,R3 ;取调整单元数据
) F3 a. v' b% d9 U' A3 fCLR C ;清进位标志
+ X' Y y9 Z6 z! B& ?4 }2 yCJNE A,#60H,HHH ;调整单元数据与60比较
$ ~5 d0 |5 K! Z& fHHH: JC SET4 ;调整单元数据小于60转SET4循环
& \* L, ]# u3 W! uLCALL CLR0 ;调整单元数据大于或即是60时清0! w- O( u3 n) _7 z7 C
CLR C ;清进位标志
# j( g% b' H5 a# \' X& Y9 I/ yAJMP SET4 ;跳转到SET4循环
# I) x) Q; V4 M# `% N2 uCLOSEDIS: SETB ET0 ;省电(LED不显示)状态。开T0中断
; G( w2 a- B. A4 g' |8 pSETB TR0 ;开启T0定时器(开时钟)
% \' k; X; @; v- B- ]2 i* x0 NCLOSE: JB P3.7,CLOSE ;无按键按下,等待。
/ p1 M1 ~/ ?4 T3 V9 s6 ~0 F7 ILCALL DISPLAY ;有键按下,调显示子程序延时削抖
" M* i% d, y2 u+ ^% eJB P3.7,CLOSE ;是干扰返回CLOSE等待
6 r" L% J4 Q6 a/ A7 I" mWAITH: JNB P3.7,WAITH ;等待键开释
+ M2 J1 ~. m( ?. i1 ELJMP START1 ;返回主程序(LED数据显示亮)7 w$ ?" v* P- A x
SETHH: CLR 00H ;分闪烁标志清除(进入调小时状态)+ Z$ z. S$ r( ~ _1 m& j" C2 E, s5 f
SETHH1: JNB P3.7,SET5 ;等待键开释1 O. ^! m0 G& y1 V
SETB 01H ;小时调整标志置1
5 ~" L6 X( Q; `' L9 W( \SET6: JB P3.7,SET7 ;等待按键按下/ l. g; |0 }; I' ~/ p( g
LCALL DL05S ;有键按下延时0.5秒0 E9 l* x' o- J
JNB P3.7,SETOUT ;按下时间大于0.5秒退出时间调整, o y2 |5 b9 Y7 R7 k- ~! p
MOV R0,#79H ;按下时间小于0.5秒加1小时操作) F7 d7 o$ ?. ^4 [( N& Y
LCALL ADD1 ;调加1子程序
2 @; k; ]' x( d# LMOV A,R3 ;
% J) g8 g9 D6 b+ s# qCLR C ;
# w; u9 g n* Y1 p' K, } k$ u+ yCJNE A,#24H,HOUU ;计时单元数据与24比较" P2 a$ s" y6 c5 a3 m) W9 S9 L, l% _
HOUU: JC SET6 ;小于24转SET6循环
. C& ?1 G' N5 A% Z/ ELCALL CLR0 ;大于或即是24时清0操作
7 Q8 u( M3 a, |, D" EAJMP SET6 ;跳转到SET6循环
" t4 n7 F7 p `4 @7 l( SSETOUT: JNB P3.7,SETOUT1 ;调时退出程序。等待键开释
# I1 Q. U& e2 z' p* x( cLCALL DISPLAY ;延时削抖
9 i; ?# d4 B1 N1 fJNB P3.7,SETOUT ;是抖动,返回SETOUT再等待
7 v8 h/ D g; z. y" jCLR 01H ;清调小时标志
7 J+ t# {% F9 z# [CLR 00H ;清调分标志! g/ M8 d1 V* Q* x2 j- |8 Z7 q6 _
CLR 02H ;清闪烁标志9 Q. V! U* m3 R. m3 R" E
CLR TR1 ;封闭定时器T1* b; ^ x, | A9 ]" k4 d$ v
CLR ET1 ;关定时器T1中断/ ]: N4 ?! H" t5 w+ t7 j+ D3 \, J
SETB TR0 ;开启定时器T0
1 r$ c1 y# J! \8 k$ d2 u# ASETB ET0 ;开定时器T0中断(计时开始)
; p* F: l$ o1 ^LJMP START1 ;跳回主程序 Q4 |6 o) O5 i
SET1: LCALL DISPLAY ;键开释等待时调用显示程序(调分)
! u+ B1 _) y5 ^0 JAJMP SET2 ;防止键按下时无时钟显示8 r' h2 t3 E1 |1 i* r/ ]8 U! V2 k
SET3: LCALL DISPLAY ;等待调分按键时时钟显示用; ~& S4 C. ^+ T5 U0 O1 q
AJMP SET4" q9 g! F/ {3 Q8 [$ g
SET5: LCALL DISPLAY ;键开释等待时调用显示程序(调小时)
" d( {- F$ I) i) \3 xAJMP SETHH1 ;防止键按下时无时钟显示
0 n* P% }$ y9 T. zSET7: LCALL DISPLAY ;等待调小时按键时时钟显示用
6 V1 \7 _8 Z6 Z# pAJMP SET6
' C$ k- i1 g3 o. u. k: _SETOUT1: LCALL DISPLAY ;退出时钟调整时键开释等待- t# F, P- S9 i+ m& t( C
AJMP SETOUT ;防止键按下时无时钟显示8 g+ l M% O, b
;
8 p8 h; W& W, c' z;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;/ E. |1 K4 Y0 e! O. B
;; 显示程序 ;;3 j' z Q# C* S7 p) b$ Y( x; P* Q
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
& Z) o w Z# x3 D, v3 ~3 p w$$$$$$$$$$$$$$$$$$$$$$$$$$$
6 I" k5 \9 r$ k6 x/ t;1MS延时程序,LED显示程序用- S& Y2 U# Q1 l8 T+ j+ s4 ]
DL1MS: MOV R6,#14H
1 k/ \2 N2 b5 z6 p3 V8 hDL1: MOV R7,#19H
( u3 b: r! Y/ ]) C1 kDL2: DJNZ R7,DL2
) o' ]* o& Z' pDJNZ R6,DL15 v3 u0 |5 p* e1 t
RET4 o# h n6 h2 i+ `' K9 l
;20MS延时程序,采用调用显示子程序以改善LED的显示闪烁现象. X, p+ `2 F" z% @4 v" Z
DS20MS: ACALL DISPLAY8 j" m3 j6 w Z0 q3 b. R. e
ACALL DISPLAY
' Z# {% W# |4 h& e- f: xACALL DISPLAY
. a0 c' f6 w! O9 n/ G# s6 ERET: V# F \$ }: C& v- w. @, r, c0 c2 K6 ?
;延时程序,用作按键时间的长短判定
% g) Y) Y; s% q8 @7 z" FDL1S: LCALL DL05S _6 G3 `' d$ y+ Z/ y, k. }' y$ D7 y1 Q
LCALL DL05S
" [1 k9 v, f* Z- z) Z" X7 N; ^4 PRET
& A4 Q0 ]' p# V5 [6 Q9 M6 {DL05S: MOV R3,#20H ;8毫秒*32=0.196秒' [ k; c4 N9 |2 [2 q
DL05S1: LCALL DISPLAY/ P* v! s* f) c* y' p d: H2 r
DJNZ R3,DL05S1) H- e3 D. s! C, m% u, V; U
RET
! V, s2 ^. H# w. yEND ;程序结束
& _9 Q( }' E$ X. j, o8 e |