51单片机作的电子钟程序在很多地方已经有了介绍, 对于单片机学习者而言这个程序基本上是一道门槛,掌握了电子钟程序, 基本上可以说51单片机就掌握了80%。常见的电子钟程序由显示部分, 计算部分, 时钟调整部分构成。 7 ~" E2 g+ a9 Z
时钟的基本显示原理:时钟开始显示为0时0分0秒,也就是数码管显示000000,然后每秒秒位加1 ,到9后,10秒位加1,秒位回0。10秒位到5后,即59秒 ,分钟加1,10秒位回0。依次类推,时钟最大的显示值为23小时59分59秒。这里只要确定了1秒的定时时间, 其他位均以此为基准往上累加。 , T) Z! r7 }+ S6 t9 _
开始程序定义了秒, 十秒, 分, 十分,小时, 十小时,共6位的寄存器, 分别存在30h,31h,32h,33h,34h,35h单元,便于程序以后调用和理解。
: g+ a+ A* r2 i 6个数码管分别显示时、分、秒,一个功能键,可以切换调整时分秒、增加数值、熄灭节电等功能全部集一键。![]()
8 k4 b1 u7 ` q; n G8 G/ `+ N
7 m. `7 X$ N3 c& ^) F
# ?+ r7 j' d1 ]1 P; F: Q( S
5 X O; ?9 P( t4 z* B/ E 以下是部分汇编源程序,购买我们产品后我们用光盘将完整的单片机汇编源程序和烧写文件送给客户。5 P( ~- C6 }5 @7 D4 B" z
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
/ ~' ]# Z/ T& ?, ~4 v2 v! O;; 中断入口程序 ;; (仅供参考)
6 L; N! d& o4 }: f/ _0 B x9 f;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8 k9 G* R$ t: D3 W* X
;
2 h% U: F; `" y5 JORG 0000H ;程序执行开始地址6 w' ]8 a; j6 Y/ E# i, u
LJMP START ;跳到标号START执行0 c* }% f- b8 J' o) a
ORG 0003H ;外中断0中断程序入口
6 j9 \7 M9 D/ U, s; L5 \: B9 VRETI ;外中断0中断返回
) ~, s5 t# \# ?3 r! WORG 000BH ;定时器T0中断程序入口; l: ^ v1 o2 N8 Y# O
LJMP INTT0 ;跳至INTTO执行# y1 y3 s! k1 T* O6 _, g
ORG 0013H ;外中断1中断程序入口
P+ h1 u( {) J$ y# t# q" I' MRETI ;外中断1中断返回7 D) w, L6 \3 |+ i" B. ^# H
ORG 001BH ;定时器T1中断程序入口0 K; o9 C* o3 `, Q! q* [5 L
LJMP INTT1 ;跳至INTT1执行) l/ t2 j; f h D2 P& h
ORG 0023H ;串行中断程序入口地址 [% O2 z8 i9 H( ^/ [% a2 ` s
RETI ;串行中断程序返回7 _% ~; g- }+ }
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
) k7 L2 R: [6 C& L" e% a$ } s;; 主 程 序 ;;
5 V U, g# e3 w- F( A* [;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
7 v: Y# d3 B0 b0 d# Q$ j' ?;; r7 T9 }% u3 _! ^8 D& I
START: MOV R0,#70H ;清70H-7AH共11个内存单元
. Z7 Y0 w- i7 c9 C# HMOV R7,#0BH + v* |, S0 g+ |2 ^! s9 _& z
;clr P3.7 ;
5 ~# ^. z q# yCLEARDISP: MOV @R0,#00H ;
5 x: w! h( I8 @# R$ P# a9 N2 dINC R0 ;% n+ N' @8 v& q" s/ X# T* M! ]
DJNZ R7,CLEARDISP ;1 M' \; ~+ v( D4 k9 K0 I
MOV 20H,#00H ;清20H(标志用). n5 z- Z5 s' _
MOV 7AH,#0AH ;放入"熄灭符"数据2 v( }8 \7 v0 e3 O2 Y+ h
MOV TMOD,#11H ;设T0、T1为16位定时器- \+ {$ k$ d) ^9 X2 S, ^# ]
MOV TL0,#0B0H ;50MS定时初值(T0计时用)3 r4 M; K% W( }) O- e& H0 z
MOV TH0,#3CH ;50MS定时初值
6 [4 B$ L0 R/ A8 A8 q( uMOV TL1,#0B0H ;50MS定时初值(T1闪烁定时用)$ U; u8 S: k# F7 w- t# o! l
MOV TH1,#3CH ;50MS定时初值- J/ ~7 m: ~! h( I* f, q, m
SETB EA ;总中断开放
- R: z- Q+ {8 ~4 ~; Q+ i8 I" ySETB ET0 ;答应T0中断6 v5 ?4 g4 l- {& q. T/ K& D z
SETB TR0 ;开启T0定时器
5 W3 w) @. t! n7 ?# SMOV R4,#14H ;1秒定时用初值(50MS×20)
7 l9 E& O2 v' @6 J. f, F6 j5 V' ESTART1: LCALL DISPLAY ;调用显示子程序
* q6 Z4 R1 j% JJNB P3.7,SETMM1 ;P3.7口为0时转时间调整程序 5 _/ H) r+ s+ I) m4 R: U' b
SJMP START1 ;P3.7口为1时跳回START1 d$ n+ v! p: N+ D& Z7 _
SETMM1: LJMP SETMM ;转到时间调整程序SETMM3 j k1 Q; c% I: e+ {% p
;
6 O' I* J9 H' S+ V# ?! ~; y;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1 g0 x, M4 u5 { F1 W4 a( S# g;; 1秒计时程序 ;;
0 X1 k& S+ _1 {( N y% J( n* d7 q;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;) H2 p$ n; N- k( v- }
;T0中断服务程序
' U0 g: V/ X# j$ L0 HINTT0: PUSH ACC ;累加器入栈保护
6 V9 i% t [; [" e& qPUSH PSW ;状态字入栈保护( \3 A7 [' _8 R7 d
CLR ET0 ;关T0中断答应& C6 Q/ ^6 s8 @: y8 f2 M
CLR TR0 ;封闭定时器T0' K7 w) n5 P- m8 @" |: z5 T; `
MOV A,#0B7H ;中断响应时间同步修正
/ z$ W. T8 [) Y8 r+ n' yADD A,TL0 ;低8位初值修正
8 z! r" ]0 O7 ?: pMOV TL0,A ;重装初值(低8位修正值)2 `9 l6 C- g `
MOV A,#3CH ;高8位初值修正1 k+ b/ K5 r- F# H
ADDC A,TH0 ;+ G9 H+ p* I" B2 o2 e7 o' x6 R7 c
MOV TH0,A ;重装初值(高8位修正值)
0 |4 J1 ?" o9 S# tSETB TR0 ;开启定时器T0: f" J" y' X; S/ v
DJNZ R4, OUTT0 ;20次中断未到中断退出
- Z/ l+ `8 X8 z& ^& xADDSS: MOV R4,#14H ;20次中断到(1秒)重赋初值8 Z0 ?7 {" w7 ?% `! u2 {
MOV R0,#71H ;指向秒计时单元(71H-72H)" N \; q$ f' v+ G- y& Z) ^+ L
ACALL ADD1 ;调用加1程序(加1秒操作)+ X1 _* _) @! U: L+ V/ t0 O+ L
MOV A,R3 ;秒数据放入A(R3为2位十进制数组合)
3 \* j3 P% ~$ Z# U( \CLR C ;清进位标志+ W- Z: T0 \8 a8 u
CJNE A,#60H,ADDMM ;4 ^! [8 n( T# r$ _3 w- q% d3 N
ADDMM: JC OUTT0 ;小于60秒时中断退出
/ w- O# c. B* a2 q+ l# |ACALL CLR0 ;大于或即是60秒时对秒计时单元清0
! m3 [* T$ L( `2 `MOV R0,#77H ;指向分计时单元(76H-77H)' F$ I. j4 ^8 v7 Q2 `
ACALL ADD1 ;分计时单元加1分钟
/ \6 u2 b1 y2 D: ]: H* UMOV A,R3 ;分数据放入A8 F" ?4 A5 T- k {% l! V6 r
CLR C ;清进位标志' l E2 u& A5 m3 d8 i$ ]( I7 c
CJNE A,#60H,ADDHH ;
& {4 f5 j% S% d; l# GADDHH: JC OUTT0 ;小于60分时中断退出; ?2 Z3 I: z0 u( U
ACALL CLR0 ;大于或即是60分时分计时单元清04 _0 C* n+ ^, r- B
MOV R0,#79H ;指向小时计时单(78H-79H)$ g ]" J5 Z! A( u8 g: P
ACALL ADD1 ;小时计时单元加1小时
$ i* [: [& J9 }6 [+ UMOV A,R3 ;时数据放入A
5 Q! C/ u! e7 A8 q L h, pCLR C ;清进位标志
& U' Z0 @: H; v0 M) X. h( ]CJNE A,#24H,HOUR ;) |& e/ m0 U" ]. h( u& v1 P- |
HOUR: JC OUTT0 ;小于24小时中断退出
: H2 Q5 I4 M6 K" F' C5 OACALL CLR0 ;大于或即是24小时小时计时单元清0
5 S8 d. R* r: {3 Z8 _OUTT0: MOV 72H,76H ;中断退出时将分、时计时单元数据移
* {6 Z t5 o7 v; }1 gMOV 73H,77H ;入对应显示单元
' T3 L, s. j. | v1 wMOV 74H,78H ;
: P! _1 f* K6 u' LMOV 75H,79H ;
$ R" I" F# Q9 L/ N {; TPOP PSW ;恢复状态字(出栈): S8 h7 x9 R5 b
POP ACC ;恢复累加器
' U7 g0 v+ O# R% E) p9 t" u fSETB ET0 ;开放T0中断) L2 E3 m. R4 N7 u* Q3 I2 k3 }
RETI ;中断返回
% f# L5 O# B9 h: V" Y7 i;: \5 n9 i% Y+ c5 o4 f
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; V5 y, F+ h) V( N$ o# P; q
;; 闪动调时 程 序 ;;1 ?8 a5 |% F3 v- d
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;! a- ] j4 }- W* o, G6 @1 Z
;T1中断服务程序,用作时间调整时调整单元闪烁指示4 N$ I2 L2 K: d' z' c3 O
INTT1: PUSH ACC ;中断现场保护5 o! T4 C( q8 i* c8 N$ h8 ]
PUSH PSW ;3 g( r6 m5 G: H
MOV TL1, #0B0H ;装定时器T1定时初值, r- B3 r! u- K$ u; L- s
MOV TH1, #3CH ;7 O% S5 f. H$ T
DJNZ R2,INTT1OUT ;0.3秒未到退出中断(50MS中断6次)
4 a& m( I/ a# I' x9 v+ E9 X: jMOV R2,#06H ;重装0.3秒定时用初值
; J+ @7 u8 j/ v1 i* PCPL 02H ;0.3秒定时到对闪烁标志取反
0 R9 d2 t/ T, l9 \JB 02H,FLASH1 ;02H位为1时显示单元"熄灭"3 e) f" S @% i# J' t7 `% g+ L% O
MOV 72H,76H ;02H位为0时正常显示( B. k' ]6 Y: \
MOV 73H,77H ;* E* Y# Z% t2 S% t( i% R# c* |- y
MOV 74H,78H ;
) K1 E2 `" Q, Q5 b% CMOV 75H,79H ;5 H2 z4 k/ R9 ?$ T% X" k9 w0 Q+ ]/ z
INTT1OUT: POP PSW ;恢复现场& r4 R+ O7 w( j% |
POP ACC ;
$ q; X) }# Z8 a3 }: E* t. ARETI ;中断退出. G1 Q) q1 u$ U9 c' T: @/ O
FLASH1: JB 01H,FLASH2 ;01H位为1时,转小时熄灭控制0 u' k" Y# M0 k9 f3 E* N
MOV 72H,7AH ;01H位为0时,"熄灭符"数据放入分
) R0 ^; M; q" n: P- | f0 CMOV 73H,7AH ;显示单元(72H-73H),将不显示分数据
$ I& c3 N# f7 i5 BMOV 74H,78H ;
R- e4 D) |" P( P/ v5 C* I% PMOV 75H,79H ;+ B# V/ W# A/ L _- a
AJMP INTT1OUT ;转中断退出
, G _6 [' W; }: y# F& qFLASH2: MOV 72H,76H ;01H位为1时,"熄灭符"数据放入小时6 O# U! L. k" R" J$ O% s: p* N
MOV 73H,77H ;显示单元(74H-75H),小时数据将不显示
% C2 M4 |; }! c5 AMOV 74H,7AH ;
{$ {7 V- H% |( h4 L8 K& U# SMOV 75H,7AH ;
7 b& y6 f# q! @2 T6 e+ N- Q( a9 G% YAJMP INTT1OUT ;转中断退出6 E. e7 h5 Y5 [' ?
;8 ~2 Q1 K" P6 {2 Q
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3 P) O& W& ?: X6 I4 s: d9 \;; 加1子 程 序 ;;
% T( N! y/ g# A;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4 V, q; u4 A, z; P;( R/ D' s( A3 d
ADD1: MOV A,@R0 ;取当前计时单元数据到A
* @! Z- e- F8 jDEC R0 ;指向前一地址7 L$ C6 A8 G9 I1 I5 z
SWAP A ;A中数据高四位与低四位交换
; {- _3 O2 b x1 m5 ~( P5 vORL A,@R0 ;前一地址中数据放入A中低四位
! N; A8 z; L" F4 z4 Y) }5 IADD A,#01H ;A加1操作6 J( c1 h/ n$ Z& W u" X0 p
DA A ;十进制调整
6 l, N& l# R$ _/ G, E, u. ZMOV R3,A ;移入R3寄存器. f# W' M0 A/ W. M9 H* R" s
ANL A,#0FH ;高四位变00 x! f6 ?# p# N1 o/ W
MOV @R0,A ;放回前一地址单元$ ~( o+ h4 U( v
MOV A,R3 ;取回R3中暂存数据
. k" g& m# C; A' a$ G4 m6 AINC R0 ;指向当前地址单元
% C# X) M7 w# gSWAP A ;A中数据高四位与低四位交换
: @6 V' o- O8 _, Y KANL A,#0FH ;高四位变04 G5 V; N9 B9 }# R5 m# a& e
MOV @R0,A ;数据放入当削地址单元中$ B$ h" m% z3 ^+ o) ~& h$ z8 H
RET ;子程序返回
! U) W: n: W5 D% j; `0 P;: k6 r1 L7 b& H: w2 R% f1 V( |, a
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
) y! V; y8 H) Q% `; H+ W& }0 x;; 清零程序 ;;
& C& o) ~' p. S( q$ b# @;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;! H [* @$ N* @
;.............
5 ~, A' b* F- p+ O;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" L% J9 }9 T8 i! i ^% O
;; 时钟调整程序 ;;
, ]/ @0 @* z4 |9 }2 n; X6 h;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
$ N( ~) `: r* d$ N3 Y0 A$ C;当调时按键按下时进入此程序
E- b* W0 C. S: O CSETMM: cLR ET0 ;关定时器T0中断
* a2 ^. E( R M, H7 Y! sCLR TR0 ;封闭定时器T0" {2 N' x$ ?. U8 p+ x" v9 {, t/ f
LCALL DL1S ;调用1秒延时程序% F+ u8 C8 w; X( }( x( J
JB P3.7,CLOSEDIS ;键按下时间小于1秒,封闭显示(省电)4 J* Y. E5 i, s$ X4 ]3 R- G9 m
MOV R2,#06H ;进入调时状态,赋闪烁定时初值# N! |6 e5 ^2 W3 N; V5 ]
SETB ET1 ;答应T1中断/ ~0 G1 i8 y$ m/ q' t$ X4 `7 @
SETB TR1 ;开启定时器T1
5 Y& M6 m* Z8 y8 ?" @+ j! P% xSET2: JNB P3.7,SET1 ;P3.7口为0(键未开释),等待
: c0 y3 ? b: ~SETB 00H ;键开释,分调整闪烁标志置15 J+ _- f n% l- W z/ r
SET4: JB P3.7,SET3 ;等待键按下
/ x* M+ M% f: yLCALL DL05S ;有键按下,延时0.5秒! \/ e, {4 {+ i/ x: ?" n# c$ b
JNB P3.7,SETHH ;按下时间大于0.5秒转调小时状态; R$ A5 p! r- y! n g, K, @
MOV R0,#77H ;按下时间小于0.5秒加1分钟操作0 s) k& [& d8 e7 t$ |4 v' U3 G! r
LCALL ADD1 ;调用加1子程序
5 }2 w6 q W) c: w! Y4 F- [MOV A,R3 ;取调整单元数据% s9 w! k) X8 x2 v4 d4 M
CLR C ;清进位标志1 l/ B: s7 R! l1 D" ]
CJNE A,#60H,HHH ;调整单元数据与60比较
/ R: M2 z4 r& B: F5 ^( Z' k( Q, _HHH: JC SET4 ;调整单元数据小于60转SET4循环/ ^- d s. s+ U* j
LCALL CLR0 ;调整单元数据大于或即是60时清0
: F2 T" J$ O& I: {7 eCLR C ;清进位标志$ \& R7 O" C( B
AJMP SET4 ;跳转到SET4循环1 y6 x3 ~" J- O6 u% ^
CLOSEDIS: SETB ET0 ;省电(LED不显示)状态。开T0中断
# a; M" _3 [( GSETB TR0 ;开启T0定时器(开时钟)+ Z5 }8 W/ M" h
CLOSE: JB P3.7,CLOSE ;无按键按下,等待。
$ P& C m# R' @+ Y) WLCALL DISPLAY ;有键按下,调显示子程序延时削抖* ?3 x( f& v; U. K
JB P3.7,CLOSE ;是干扰返回CLOSE等待
7 n: y% V) [" D) d4 g, s' v3 {WAITH: JNB P3.7,WAITH ;等待键开释
# ^ |" H4 c: [7 [: }$ QLJMP START1 ;返回主程序(LED数据显示亮)" ]8 n3 ^. W( q
SETHH: CLR 00H ;分闪烁标志清除(进入调小时状态)8 I, z3 X6 t% U0 E6 e/ L& H% [" L+ X
SETHH1: JNB P3.7,SET5 ;等待键开释
0 N7 w6 `6 Q1 F3 E7 I7 d jSETB 01H ;小时调整标志置1
* m" }" B: B3 {# i8 hSET6: JB P3.7,SET7 ;等待按键按下
6 Y9 ?# ?) k1 ` G# fLCALL DL05S ;有键按下延时0.5秒
( R, T, W ^! [% l3 o. ^JNB P3.7,SETOUT ;按下时间大于0.5秒退出时间调整5 s' Y8 r7 c2 O0 T% S+ y i
MOV R0,#79H ;按下时间小于0.5秒加1小时操作
/ C6 ^2 a# [: d0 C' G0 ~LCALL ADD1 ;调加1子程序
/ {+ p& }' `/ b7 A ~) UMOV A,R3 ;
7 @0 D3 P1 N) e, }+ [0 e% FCLR C ;9 U; @; f' {% Z1 o1 X( x: \0 ~8 a
CJNE A,#24H,HOUU ;计时单元数据与24比较! e) [* V# l1 G' {' r- \
HOUU: JC SET6 ;小于24转SET6循环
* N" \3 R, X; kLCALL CLR0 ;大于或即是24时清0操作! F6 r1 n# S' e1 s- x1 n0 ]+ e
AJMP SET6 ;跳转到SET6循环/ V, S. Z3 Z" \& y
SETOUT: JNB P3.7,SETOUT1 ;调时退出程序。等待键开释) d. |5 z# R# N0 v& ]: c+ A- z
LCALL DISPLAY ;延时削抖
6 P% S! G; a9 q9 p6 lJNB P3.7,SETOUT ;是抖动,返回SETOUT再等待
- D* J! V# O L% F8 H( g) @, lCLR 01H ;清调小时标志& [! Z+ R% D7 [1 Z) J; Z- x
CLR 00H ;清调分标志- m) ~. \; W* K4 r+ C2 k! r
CLR 02H ;清闪烁标志
: @$ E1 x6 C8 GCLR TR1 ;封闭定时器T1
+ j# I& c7 B" C+ ECLR ET1 ;关定时器T1中断! E, P! ?) R+ Q6 ~, Q: F- I I. Q
SETB TR0 ;开启定时器T0+ e; M1 p& O3 N) v7 B5 s
SETB ET0 ;开定时器T0中断(计时开始)( M( `* f# F, q# [6 Q$ b0 }
LJMP START1 ;跳回主程序8 {# _5 |2 L' y$ s8 q! d7 e3 M1 h
SET1: LCALL DISPLAY ;键开释等待时调用显示程序(调分)- E. F) e2 w2 t) m5 P+ i
AJMP SET2 ;防止键按下时无时钟显示# X h9 C- t* _: f# d6 u- S
SET3: LCALL DISPLAY ;等待调分按键时时钟显示用
) l) ?6 m7 C- j- `) P2 NAJMP SET4
' [7 w* g+ x( ]) f0 D/ U: x |( N6 J$ uSET5: LCALL DISPLAY ;键开释等待时调用显示程序(调小时)
" A) |) [3 f( j# d- q# a+ A" aAJMP SETHH1 ;防止键按下时无时钟显示
# Z0 ^$ i, [: qSET7: LCALL DISPLAY ;等待调小时按键时时钟显示用
" ^: W! ?+ H/ o* J/ hAJMP SET6
1 Y* E" w' A' a. a1 P- ?7 u w/ vSETOUT1: LCALL DISPLAY ;退出时钟调整时键开释等待7 k0 Y* ^3 K. V9 B& k
AJMP SETOUT ;防止键按下时无时钟显示
& w4 x6 q) j& D;
; a+ z/ W- J1 ^) y. o7 m;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9 T/ F& r6 x+ J
;; 显示程序 ;;% F" R) ~4 w2 ]! W3 E7 t' K z
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
7 {5 P' e( G: z$$$$$$$$$$$$$$$$$$$$$$$$$$$* m+ S! A% Y+ y2 `7 k% @7 W
;1MS延时程序,LED显示程序用
' V9 |& r* H& ]8 l# M C9 sDL1MS: MOV R6,#14H% W% o! |& W9 b; ~
DL1: MOV R7,#19H
' l$ t/ n/ {- W2 z, K$ \3 jDL2: DJNZ R7,DL2
% Z: _: t1 P6 {4 }3 Z: lDJNZ R6,DL1
( o+ v3 _$ C) j4 _) H: qRET) ~* \- a4 \' X6 H# w
;20MS延时程序,采用调用显示子程序以改善LED的显示闪烁现象3 ^( k! C' Q9 h5 Z. R9 E
DS20MS: ACALL DISPLAY3 X4 z1 Z3 O( l8 T; }
ACALL DISPLAY
+ J/ C) W& J0 R) } I9 F2 }ACALL DISPLAY) E6 c" g& {) t9 L1 T
RET; ^9 T& U2 B0 Y& Z7 D3 h
;延时程序,用作按键时间的长短判定5 D s& [2 V u- m2 Y' U
DL1S: LCALL DL05S4 V# ~# m" T) n* q% I$ T% K- v9 X
LCALL DL05S
/ P9 O) e6 @- a7 d u( D2 K' BRET; I/ ?8 X8 y7 R/ p" Z% b* `
DL05S: MOV R3,#20H ;8毫秒*32=0.196秒8 Z; J* u0 u; q S, R) F
DL05S1: LCALL DISPLAY0 ]. w/ ^% [ R" `1 _+ S) N
DJNZ R3,DL05S1
* J& P/ a$ H+ H2 F# O$ b( ?) C% GRET
1 H8 |; R% U- U2 UEND ;程序结束
4 D8 p- R0 U! I# ]* Q |