51单片机作的电子钟程序在很多地方已经有了介绍, 对于单片机学习者而言这个程序基本上是一道门槛,掌握了电子钟程序, 基本上可以说51单片机就掌握了80%。常见的电子钟程序由显示部分, 计算部分, 时钟调整部分构成。
) e h$ }4 R' q8 s2 a6 M* }$ F 时钟的基本显示原理:时钟开始显示为0时0分0秒,也就是数码管显示000000,然后每秒秒位加1 ,到9后,10秒位加1,秒位回0。10秒位到5后,即59秒 ,分钟加1,10秒位回0。依次类推,时钟最大的显示值为23小时59分59秒。这里只要确定了1秒的定时时间, 其他位均以此为基准往上累加。 % ~& g4 X7 [8 k0 p$ Y
开始程序定义了秒, 十秒, 分, 十分,小时, 十小时,共6位的寄存器, 分别存在30h,31h,32h,33h,34h,35h单元,便于程序以后调用和理解。 / P' F' H8 N: A( |, y- Z9 O
6个数码管分别显示时、分、秒,一个功能键,可以切换调整时分秒、增加数值、熄灭节电等功能全部集一键。 $ Q/ I3 m$ e9 p4 N- y
( S( B) ^, o9 _! \% X
. t6 D1 H: r' _6 ^1 B* _+ R+ {% `/ X4 @; M @) O
以下是部分汇编源程序,购买我们产品后我们用光盘将完整的单片机汇编源程序和烧写文件送给客户。" v. `& A+ m) r: _ Z% k9 N7 ?
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;( W' _3 q4 ]8 {2 ^8 M
;; 中断入口程序 ;; (仅供参考)4 h$ `, R6 j. h2 N" o) z* N
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;- r( s: z0 r( E+ ~
;, O6 ^' { P h( l- m
ORG 0000H ;程序执行开始地址
, ^- Q' X: F: v: o X" q9 ~: u' BLJMP START ;跳到标号START执行
8 S- o3 B; K4 o6 p" w# C" \ORG 0003H ;外中断0中断程序入口5 {. W- e$ o1 E
RETI ;外中断0中断返回7 j/ r' R( q0 l, J& i
ORG 000BH ;定时器T0中断程序入口
* U3 @; _$ B7 {* ]; t3 pLJMP INTT0 ;跳至INTTO执行) A6 K' t; p' E0 C$ @3 V, P
ORG 0013H ;外中断1中断程序入口
9 O. K4 o: X+ @( w7 a+ m: ]) xRETI ;外中断1中断返回
. g+ I) E" I' t9 }5 fORG 001BH ;定时器T1中断程序入口) e( }; _( |$ ]% s
LJMP INTT1 ;跳至INTT1执行0 x# b2 Y+ [0 M
ORG 0023H ;串行中断程序入口地址) N( E0 J0 N& `, y6 r
RETI ;串行中断程序返回
0 r( i' ?; c; N2 b/ f& [;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2 e2 J7 @( S- u4 a
;; 主 程 序 ;;- P+ G( H& x/ z; p# T' A
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7 D9 W8 V1 c/ T& n
;: r! `) [6 M) S* s6 d% t7 M' `8 R
START: MOV R0,#70H ;清70H-7AH共11个内存单元 \ u5 t. ]! n8 _1 E$ Z; n' R
MOV R7,#0BH 6 `) m6 T$ O, F9 Z
;clr P3.7 ;! \$ H: C0 z7 F4 U7 {9 c$ Q- b
CLEARDISP: MOV @R0,#00H ;" |2 f' }! }8 c: m" w1 F+ S0 l
INC R0 ;2 a+ M8 I, z. ~5 k' J. m# |
DJNZ R7,CLEARDISP ;$ x7 F0 e. n1 [
MOV 20H,#00H ;清20H(标志用)
) p- m: w- Z3 U7 w9 \9 k: OMOV 7AH,#0AH ;放入"熄灭符"数据6 ?. E0 F v7 j( W$ D
MOV TMOD,#11H ;设T0、T1为16位定时器
, b! G. x8 @3 z$ Q& V z: Y2 r" aMOV TL0,#0B0H ;50MS定时初值(T0计时用)
& d0 m& Z5 C0 @MOV TH0,#3CH ;50MS定时初值2 ]& v- X0 N6 q7 h" x
MOV TL1,#0B0H ;50MS定时初值(T1闪烁定时用)
6 {' J6 \1 [" d# W9 qMOV TH1,#3CH ;50MS定时初值8 d0 h5 N2 Q( F/ r+ M8 v0 @2 |
SETB EA ;总中断开放, d! ?$ x$ F0 s% m1 g- O
SETB ET0 ;答应T0中断
# ?3 e" V9 Q4 H- ^3 |0 y) TSETB TR0 ;开启T0定时器# r- m" ?, O. [/ A
MOV R4,#14H ;1秒定时用初值(50MS×20)
! v* s9 w+ I# i; [START1: LCALL DISPLAY ;调用显示子程序0 S8 V2 @1 @" u+ L( \9 u+ S
JNB P3.7,SETMM1 ;P3.7口为0时转时间调整程序
$ r% c: m% W5 k* R* hSJMP START1 ;P3.7口为1时跳回START1$ D% w% m/ z$ k! d) z
SETMM1: LJMP SETMM ;转到时间调整程序SETMM
( w+ @6 D) C+ n;" G, q" o5 a" n6 v0 Z
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
/ X6 s' h7 V' g;; 1秒计时程序 ;;
8 e& A1 s T& j+ q;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9 p$ L0 |# F2 O9 P, X- w B7 @
;T0中断服务程序
; t0 d# l" N8 [7 V. q" ]0 M+ SINTT0: PUSH ACC ;累加器入栈保护
9 g8 Y, }' d: C2 X5 RPUSH PSW ;状态字入栈保护
& S' a- U) q0 S- n* J% |) v2 x$ a, sCLR ET0 ;关T0中断答应5 C4 E: ?9 Q3 q6 O5 {
CLR TR0 ;封闭定时器T0, D/ D% W; g" m& Z' u' I5 e" p
MOV A,#0B7H ;中断响应时间同步修正2 e7 E$ E' D5 d" N0 P J
ADD A,TL0 ;低8位初值修正
8 X# R# Q6 @' i8 X- h5 CMOV TL0,A ;重装初值(低8位修正值); Z# j% x M. f, z0 T3 v1 g- Z
MOV A,#3CH ;高8位初值修正
: B2 Q2 L( P2 I. bADDC A,TH0 ;
* ^& m/ R5 b9 D0 p* j/ M# PMOV TH0,A ;重装初值(高8位修正值)
4 k* a+ ~; L+ Y/ D9 }SETB TR0 ;开启定时器T05 L, N) b* Q+ B" O3 B) `
DJNZ R4, OUTT0 ;20次中断未到中断退出. t* q# z2 ], S! X9 Y3 s0 h5 b
ADDSS: MOV R4,#14H ;20次中断到(1秒)重赋初值
& l- X7 p% D1 z8 P0 Y- DMOV R0,#71H ;指向秒计时单元(71H-72H)
" o/ E# O: F* b: LACALL ADD1 ;调用加1程序(加1秒操作)
$ X5 j% |4 u" { w9 s }# XMOV A,R3 ;秒数据放入A(R3为2位十进制数组合)% V" M4 f5 u* M" m; A
CLR C ;清进位标志( Y' \6 F- Z+ n( ?' G
CJNE A,#60H,ADDMM ;
; Z& B" E0 M* DADDMM: JC OUTT0 ;小于60秒时中断退出
) |. n1 b; n5 Q1 \3 SACALL CLR0 ;大于或即是60秒时对秒计时单元清0
3 x# O& i, T* H* B; S* S, xMOV R0,#77H ;指向分计时单元(76H-77H)
3 l. i. Z( |+ ~9 `, X) I- x$ a' k$ nACALL ADD1 ;分计时单元加1分钟2 F$ ?+ ]1 k4 ]% J8 f: a( W
MOV A,R3 ;分数据放入A8 j5 F; |' K8 P
CLR C ;清进位标志
8 u4 `7 N+ h8 r3 |$ g8 U* {CJNE A,#60H,ADDHH ;
( L1 o6 W3 ^+ P7 ~* ~& dADDHH: JC OUTT0 ;小于60分时中断退出0 w4 ` Y: H6 m( H) L0 ]$ C9 I
ACALL CLR0 ;大于或即是60分时分计时单元清0( j, q( f0 }) M+ c# i% B6 z
MOV R0,#79H ;指向小时计时单(78H-79H)
+ i3 h+ _1 k/ X7 m8 h) d3 ZACALL ADD1 ;小时计时单元加1小时+ U9 X) e$ I7 ^) s* n7 S
MOV A,R3 ;时数据放入A$ y- T) N* \- j: N6 k/ u/ F& f
CLR C ;清进位标志6 u& ^+ [/ h, F% z* S: Q5 L
CJNE A,#24H,HOUR ;% {5 [; \1 `1 C- x t( j
HOUR: JC OUTT0 ;小于24小时中断退出
" Q" ?% V: P _* e0 gACALL CLR0 ;大于或即是24小时小时计时单元清0
( W: B% l: _6 x9 {8 ^OUTT0: MOV 72H,76H ;中断退出时将分、时计时单元数据移5 U5 ]& K6 k! o! F* u. B* f, \
MOV 73H,77H ;入对应显示单元
5 }" t& o3 ?5 T3 u0 @ `MOV 74H,78H ;
0 G% P5 }4 L4 y W, oMOV 75H,79H ;
+ C0 j7 @( g3 g- | SPOP PSW ;恢复状态字(出栈)
- }; m' J) B4 c6 A4 sPOP ACC ;恢复累加器
: \" t: x9 A% }, bSETB ET0 ;开放T0中断
* D% S# g' l7 Q" B1 ], pRETI ;中断返回% b7 ^! x( m5 U9 Q1 R
;
4 J% w7 R. H$ @: `6 r6 M- \;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
( z, V+ T8 E+ v( V8 s+ a;; 闪动调时 程 序 ;;( p; X6 v' y4 u8 z* ~# @0 ~ u
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
8 V6 z: z: M# d" u6 c; ];T1中断服务程序,用作时间调整时调整单元闪烁指示5 A: r8 b$ R x" j( S
INTT1: PUSH ACC ;中断现场保护 |% m7 Y- h/ r7 t ^5 s
PUSH PSW ;2 }" h+ ]. v6 p6 r* x P
MOV TL1, #0B0H ;装定时器T1定时初值6 e1 W5 P/ s5 |' r" w
MOV TH1, #3CH ;* p) v. }5 R5 G
DJNZ R2,INTT1OUT ;0.3秒未到退出中断(50MS中断6次). ?- r" w* d$ J" D
MOV R2,#06H ;重装0.3秒定时用初值4 Q- k8 ^" V" V
CPL 02H ;0.3秒定时到对闪烁标志取反. P5 j0 f- B: J# I* N* x
JB 02H,FLASH1 ;02H位为1时显示单元"熄灭"3 u2 ^3 i) @5 s+ Y' O) N: }
MOV 72H,76H ;02H位为0时正常显示1 y9 R0 Q3 Y% T5 d2 I5 Q! ]
MOV 73H,77H ;4 X% `4 U0 B/ f( e9 `
MOV 74H,78H ;
- x4 M* Y# m) v& u1 [MOV 75H,79H ;* q, b& g+ P" T1 Q: ^% U" H) q
INTT1OUT: POP PSW ;恢复现场
4 Z# e0 J$ Z, R5 _4 hPOP ACC ;
@7 V8 S s: g+ O! [RETI ;中断退出" C9 X+ j( w/ p3 O" R6 q
FLASH1: JB 01H,FLASH2 ;01H位为1时,转小时熄灭控制
: P6 I! b3 K4 G4 @. L5 l4 F: tMOV 72H,7AH ;01H位为0时,"熄灭符"数据放入分+ ~; e; h$ f0 j! B# z1 W( R6 ^6 ~
MOV 73H,7AH ;显示单元(72H-73H),将不显示分数据+ ? D' h. j* N; S
MOV 74H,78H ;8 t; X( N4 P" o6 R/ E
MOV 75H,79H ;
3 W3 n" d7 w9 v9 Z3 gAJMP INTT1OUT ;转中断退出
" S2 Y( W' e6 O$ B. cFLASH2: MOV 72H,76H ;01H位为1时,"熄灭符"数据放入小时8 d4 O% S/ C) h& I) s
MOV 73H,77H ;显示单元(74H-75H),小时数据将不显示
/ d/ r1 `+ Y S# Q/ U4 H7 _MOV 74H,7AH ;
9 O8 {) B6 [: n' ^) DMOV 75H,7AH ;
3 e2 B: U+ s4 H! y5 m" nAJMP INTT1OUT ;转中断退出
. v/ V5 e2 D& x* M3 q- p;
2 k, W" H6 n6 ?2 T( S4 j6 D. k% g# u3 R9 j;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;( ~9 f( \, U( C5 I
;; 加1子 程 序 ;; }' T6 T, C* U' I+ B- `0 Z
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
& M0 y ]- V/ L E* r$ n3 V;
- `7 q4 b4 o' R+ GADD1: MOV A,@R0 ;取当前计时单元数据到A0 O$ E. \/ \( D8 e7 u
DEC R0 ;指向前一地址, s6 O/ {, u2 h) |& [' r
SWAP A ;A中数据高四位与低四位交换! E& L& O$ c; i3 B w& ^
ORL A,@R0 ;前一地址中数据放入A中低四位" d8 h0 t2 B7 J* O* ?0 U) v8 i. s
ADD A,#01H ;A加1操作0 F( K8 V6 x1 |* I7 K7 z- T7 D7 b
DA A ;十进制调整
' B- Y: A( U* F* `. g! CMOV R3,A ;移入R3寄存器0 B M2 M. H% H0 V: g
ANL A,#0FH ;高四位变0
; i9 ?$ u1 g0 `, K' v; ZMOV @R0,A ;放回前一地址单元& x( t0 d; Z' u @. {( Y
MOV A,R3 ;取回R3中暂存数据
( O% w/ D1 T3 M1 C2 LINC R0 ;指向当前地址单元
c E% w9 j9 H0 C) B- QSWAP A ;A中数据高四位与低四位交换# W; R- s$ j4 W2 m6 _
ANL A,#0FH ;高四位变0
7 s3 w, g7 a$ [* A+ R. uMOV @R0,A ;数据放入当削地址单元中$ S$ U5 l; S8 Y% f* w) I
RET ;子程序返回
0 a: `- ~8 L/ ?7 l;, ?' o" D* V2 n& e2 _
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
) g0 v( J) o2 \) l+ z5 O" W* i' O+ R;; 清零程序 ;;0 @4 H% H! E, @. `2 K4 Q" y$ X
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;/ E* u: P0 s- t) h4 D7 v
;.............0 r4 V6 _4 Y5 w, w1 C' r
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+ M% y9 D. Q3 @+ R& B* y! j, f
;; 时钟调整程序 ;;4 f# ^) G% B) F
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;& i) {& b0 r# K
;当调时按键按下时进入此程序- b" S$ [* Y0 B: f) I& }
SETMM: cLR ET0 ;关定时器T0中断
6 o% C5 I& F. v6 aCLR TR0 ;封闭定时器T0
: n. m8 z* p$ h) M- h, ^$ c# BLCALL DL1S ;调用1秒延时程序
6 v0 e. O4 d) l4 }5 NJB P3.7,CLOSEDIS ;键按下时间小于1秒,封闭显示(省电)
3 L# n9 j9 i3 F8 ?8 KMOV R2,#06H ;进入调时状态,赋闪烁定时初值
& h( Z% {# m: {0 K& u. VSETB ET1 ;答应T1中断
( { B0 H% v% t! l' T+ p1 u$ {. WSETB TR1 ;开启定时器T1$ S+ ^- |7 }# s
SET2: JNB P3.7,SET1 ;P3.7口为0(键未开释),等待
2 I/ O( r8 J- H) T/ BSETB 00H ;键开释,分调整闪烁标志置1
9 w6 z3 T3 k0 p) X- o. z) ]/ d4 \SET4: JB P3.7,SET3 ;等待键按下
8 }- e# |7 Y8 u& e) sLCALL DL05S ;有键按下,延时0.5秒( t$ F" b% N# W2 {
JNB P3.7,SETHH ;按下时间大于0.5秒转调小时状态3 @ k9 H9 M6 q$ K9 t
MOV R0,#77H ;按下时间小于0.5秒加1分钟操作: h& u' @# N% F( @8 c E1 ^
LCALL ADD1 ;调用加1子程序
( P& i7 M( p7 x& `2 QMOV A,R3 ;取调整单元数据' n2 y1 b% \8 F. i
CLR C ;清进位标志
4 x2 F3 ~5 ]9 C; d/ @CJNE A,#60H,HHH ;调整单元数据与60比较4 J) q$ i4 t/ ]: O
HHH: JC SET4 ;调整单元数据小于60转SET4循环
/ i4 x$ r6 ^; E8 N* J0 @LCALL CLR0 ;调整单元数据大于或即是60时清04 t4 C. ^9 K1 T/ ~; _( [$ k9 n3 v
CLR C ;清进位标志4 J# E- ^! I' g- [+ \. N
AJMP SET4 ;跳转到SET4循环, x% ?" D" \! ^1 ^2 O
CLOSEDIS: SETB ET0 ;省电(LED不显示)状态。开T0中断! p& {8 _$ b2 F9 C# d
SETB TR0 ;开启T0定时器(开时钟)
0 I9 w* H$ h) zCLOSE: JB P3.7,CLOSE ;无按键按下,等待。6 N1 ~- d, P1 k4 u+ l3 M2 Q. n: V8 I
LCALL DISPLAY ;有键按下,调显示子程序延时削抖
' |2 G5 }3 F4 v- M+ Z# ^JB P3.7,CLOSE ;是干扰返回CLOSE等待. `3 V3 j* L1 B
WAITH: JNB P3.7,WAITH ;等待键开释
1 j% I. i& F1 k- z2 Y% NLJMP START1 ;返回主程序(LED数据显示亮)" o, [" B# P. S+ a1 h, P+ G+ I9 T
SETHH: CLR 00H ;分闪烁标志清除(进入调小时状态)
$ K i, ?' Z; }- T5 w& lSETHH1: JNB P3.7,SET5 ;等待键开释$ c7 R$ E F0 Q0 a' C5 D
SETB 01H ;小时调整标志置1: _* x, _, B7 ?/ t5 X! U/ ~4 i) {
SET6: JB P3.7,SET7 ;等待按键按下/ \6 {! x: g0 a( n1 s, c
LCALL DL05S ;有键按下延时0.5秒
% N, V8 ~ `# j) J+ {JNB P3.7,SETOUT ;按下时间大于0.5秒退出时间调整
1 f2 a* i: p4 ?9 O1 ?& ^. UMOV R0,#79H ;按下时间小于0.5秒加1小时操作% G* U$ B( O! K ?! t# E ?& N
LCALL ADD1 ;调加1子程序
! ` @; x4 K3 c1 K z8 a$ {% s1 M. @MOV A,R3 ;
5 O7 }' [, E2 a( I9 @CLR C ;2 v6 Y, j- v! d8 o. J9 p
CJNE A,#24H,HOUU ;计时单元数据与24比较8 e% o9 Q, x& i( ^! b4 G
HOUU: JC SET6 ;小于24转SET6循环
6 K0 ] }) `- @8 }) `4 tLCALL CLR0 ;大于或即是24时清0操作4 g0 K) d1 R3 l. W7 b# n
AJMP SET6 ;跳转到SET6循环5 Y, N! K2 D; d* N
SETOUT: JNB P3.7,SETOUT1 ;调时退出程序。等待键开释' m/ o- X {$ E8 G
LCALL DISPLAY ;延时削抖
: X, `3 |% c r9 |JNB P3.7,SETOUT ;是抖动,返回SETOUT再等待
* }1 X5 r/ A: r+ x( q- HCLR 01H ;清调小时标志
) r, g" w) R$ \' fCLR 00H ;清调分标志
5 p' j; E- a! M3 o% p/ uCLR 02H ;清闪烁标志# Z0 A3 o/ F9 l; v
CLR TR1 ;封闭定时器T1/ r( ^. |" c! Q; d
CLR ET1 ;关定时器T1中断
+ v$ W, O& }- \6 \0 A( x; VSETB TR0 ;开启定时器T0. O' B/ u# y6 E/ ~( n7 `0 G/ T
SETB ET0 ;开定时器T0中断(计时开始)
4 b, d" N# s% H2 s+ WLJMP START1 ;跳回主程序5 y; r/ e8 h9 L/ x0 d
SET1: LCALL DISPLAY ;键开释等待时调用显示程序(调分)
' d1 p( c: c; J+ t: Q+ H- vAJMP SET2 ;防止键按下时无时钟显示
2 V3 Z7 U! V5 b' i! iSET3: LCALL DISPLAY ;等待调分按键时时钟显示用
$ ]( W1 I! ~, `! dAJMP SET4
8 ]6 \- N* I' S, f, bSET5: LCALL DISPLAY ;键开释等待时调用显示程序(调小时)/ k+ ^2 w G) K D- G! d
AJMP SETHH1 ;防止键按下时无时钟显示
! W2 F/ x1 Y4 e6 ]) DSET7: LCALL DISPLAY ;等待调小时按键时时钟显示用
: u: L0 V. R# J5 G0 ]& |8 YAJMP SET6
9 V4 ^0 K5 Q3 k0 p3 I2 G2 QSETOUT1: LCALL DISPLAY ;退出时钟调整时键开释等待
" `- q- ^8 ^9 t, m# qAJMP SETOUT ;防止键按下时无时钟显示6 a+ M' z1 ?8 L* {
;. E6 t6 R- o+ U5 ]: \7 O5 G- g+ \
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
7 y' }6 G. h. {; T;; 显示程序 ;;( R. v7 `7 |$ V( r Y' B
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
6 B, f- {3 n1 R( j$$$$$$$$$$$$$$$$$$$$$$$$$$$) l& R# Y& E& {& r. b) d0 U
;1MS延时程序,LED显示程序用
: e7 T+ b9 B) Q5 q; v+ FDL1MS: MOV R6,#14H
4 R7 D2 m0 e3 o( ~9 v$ DDL1: MOV R7,#19H
! T3 L+ |2 t2 A* G! B DDL2: DJNZ R7,DL2, q! k' Y/ n4 K9 E
DJNZ R6,DL1
# a+ d3 s! ^- m% \8 T, m5 GRET4 n" n8 P+ `% e8 r! B! ?
;20MS延时程序,采用调用显示子程序以改善LED的显示闪烁现象
8 |" N- y4 }% b- G! {' vDS20MS: ACALL DISPLAY. x: ^6 J" f! W' R$ N( ~3 V$ W
ACALL DISPLAY' m4 x, k. ~2 ^3 `. H; d7 p3 A
ACALL DISPLAY2 S( ^/ y. Z) ?
RET1 q1 b& R6 d/ [% W( X
;延时程序,用作按键时间的长短判定
: c5 M& s* H; VDL1S: LCALL DL05S. ^& B- z9 I7 ^' w
LCALL DL05S
' _; |+ r: ~* _" g" f$ ]RET' R6 Y/ E& H) g) j( r
DL05S: MOV R3,#20H ;8毫秒*32=0.196秒+ m0 ?2 Z% D" _8 l1 Y
DL05S1: LCALL DISPLAY
% s) B* T' I; M4 u: d6 D5 r" V9 oDJNZ R3,DL05S1
' F2 x% ~$ @6 _4 `- wRET
4 P+ [4 i% F$ n3 T- m5 s# o6 E# IEND ;程序结束1 j5 E; n3 l# o, ?( m. e- |
|