|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
基于AT89c51单片机的音乐盒制作 proteus仿真加源码
6 ?) w; i, v" ~: [( {1 {% w: _0 x7 s+ r! J8 L9 R; n* _ U# q6 g
+ e# L* X% w) m1. 有时会出现程序一点错误也没有,但就是不能正常运行的现象,最后我们发行是因为程序中有的指令书写得不规范导致的,例如有的 RET 返回指令一定要按正确格式书写或在两 行指令间最好不要留空行。
9 Q. I& F$ ?9 }) a2. 程序中的跳转指令的运用很重要,为保险起见,都用 LJMP,我们就遇到过跳转指令用错 程序无法正常运行的现象。当用 JNZ 指令时,跳转范围比较少,这时要用一个标号中转。
4 ? ?4 V* {4 a) g/ R. l7 L! j3. 编程时要注意,在程序开始时,要写入各定时器中断的入口地址。 % }6 H6 u( S8 y+ L. }
4. 编程过程中要注意加注释或分割线,否则,在程序过长时容易变得很乱,不便于查找或更改。
" g) Z. v$ E5 }9 E1 a: C5. 程序的结构要设计的合理,避免上下乱调用的现象,这样会使程序更加清晰化。 : ?% G- f+ L& a, G8 m% p4 H) u! G
6. 编程前要加流程图, 这样会使思路清晰, 例如数字音乐盒的设计思路完全可以按着 MP3 的工作方式列写流程图。 2 P9 D( B# f8 W6 E
7. LCD 计时正常显示的解决办法: 4 G5 Q: Q. P+ f/ S: `1 h6 O
a. 两个定时器同时工作,存在中断时序问题,刚开始时我们把定时器 1 设定在方式 3,计 250us,由于定时中断过于频繁,使 CPU 负载过大,导致音乐不能正常播放,时间不能正常 显示。解决办法:将定时器 1设定在工作方式 1,16 位计数,计 50ms,效果有很大改观。但还有问题。
( `9 d: w- _( E1 zb. 当音乐为全 4 拍起始时,此时音乐节奏与定时器 T1 中断频率错开,LCD 显示和音乐播 放都会好一些。 - w! Y9 u8 v5 k) s u# V: Y' q5 R
c. 另外,在歌曲中,当遇到一个音符发音为 4 拍,在编曲中为*CH,托因时间较长,当定 时器 T1 此时来中断时,就会对歌曲播放产生影响,若改为发音一拍,中断对歌曲播放影响 减弱,但音乐效果变差。 1 q% ~" j* @9 L1 j. @: w! A& I
d. 改进方案:若采用可以定时时间更长的单片机,可以避免所有问题。6 c n% J) b' Z3 ^
' y7 o+ P# ]4 ~' ^1 K7 q _
: H6 x. L- q% }" A: u+ T4 E5 h: `( l$ p, r y
单片机源程序(汇编语言): | RS BIT P2.0 ;引脚定义,定义液晶显示端口标号: A& ?' o' o5 Z% \
RW BIT P2.1) P. R' U9 w3 b1 x3 s# {/ O
E BIT P2.2
, {, O1 U) G* {L50MS EQU 60H ;工作内存定义
n) E) i! B) z3 WL1MS EQU 61H
; I% ^. V8 `+ VL250MS EQU 62H7 Y9 X& [1 K; a( n" I7 N, T
SEC EQU 65H- `0 @( I( H5 o2 h" P9 ]
MIN EQU 64H$ k8 i2 y% _% T8 }
HOU EQU 63H
u% Z2 A3 M( b# Y% b ORG 0000H
( q9 ~# P5 x! l! ?# ~. ]: R6 a LJMP MAIN
4 [$ ~2 }1 f5 `# l( @6 ~ ORG 000BH ;定时器T0溢出中断入口地址
* u3 o. v# x, P: X/ K LJMP TT08 m$ w1 a6 s( e
ORG 001BH ; 定时器T1溢出中断入口地址. {% Z+ d+ R" `8 d! V5 s
LJMP T1INT
) Z: T; r2 X) R. P: O ORG 1000H
6 z0 f/ v: K; V' H5 {, a) |MAIN: ;液晶初始化: }; ~3 \- P( `( D7 J
MOV SP,#70H 1 k! w. {+ I- ^, ~, t8 d
MOV P0,#01H ;清屏4 F: V; T3 X: a8 }) c
CALL DISPLAY
/ Z, d9 p/ F( L9 j& Q) P$ c MOV P0,#38H ;8位,2行显示% l( r h2 s: O$ w3 z6 Y, o
LCALL DISPLAY( L1 t( F- j/ f
MOV P0,#0FH ;屏显on,光标on,闪烁on4 y4 q! k9 [0 I! }* N. h2 b0 U
LCALL DISPLAY
5 Y7 j2 D7 D& p/ ]0 \- K, @5 [4 [; ^ MOV P0,#06H ;计数地址加1,显示幕on) f; W. G! q* t
LCALL DISPLAY
6 K7 V7 e+ \7 [! M. ULCALL INITIL ;内存初始化
$ P: R0 }2 T9 U1 u9 ]$ S$ CWAIT: LCALL KEY ;键盘扫描,是否有键按下,否则等待
2 I1 Q+ B( }/ Q7 x8 u( `LCALL MODD - F/ n! }! x. l# O* }
LJMP WAIT
# R* ~1 L q" Y! nKEY: NOP
( l8 m: Q* P2 w( N7 {- Y) ]# s' @ NOP9 _' h8 h0 b% D( r1 X! y3 X
LCALL KS! x% S# w0 x. _9 Z
JNZ K1 ;有按键转到K11 t8 s( j0 C4 l M
LCALL KAIJI5 T- B+ x6 W, ~2 F s+ |/ \% u
LCALL SOP
9 k6 ^/ z( ^9 U- U$ Y: X4 [XN: LJMP KEY
* W# t7 }2 S2 LK1: LCALL MODD; b0 `- u4 B+ a0 ]
LCALL MODD
7 c4 N/ q4 b& Y5 O- Q LCALL KS
! ]7 ?5 j' ?# P5 L1 o JNZ K23 p/ y6 d! V! ^5 A1 h; j2 I
LJMP KEY
% f: ^6 L4 Q, n& s# vK2: MOV R2,#0FEH ;读键盘
9 j, y( K) n' U$ p6 V MOV R4,#00H
. ]3 m/ {. O' d7 k; |9 XK3: MOV A,R2
; x2 \" w& F' A6 f4 r/ S' J MOV P1,A* I8 T4 ^4 ?( k3 y2 r) t, W6 T8 X
MOV A,P1
* m- p% y' k! b& N) r7 ~) O! p: _JB ACC.4,L1 ;为1跳转,第一行无按键
- o5 w+ U) ^' e4 G4 b MOV A,#00H% S! | B; y% A4 r
LJMP LK
. s0 |' G* V% Y' YL1: JB ACC.5,L2# k. w9 h; Y$ C0 _) z& P: H9 m" S
MOV A,#04H. Z" J( d( K7 T4 u( R
LJMP LK
8 n: g- d/ p3 h2 ~4 }! a$ UL2: JB ACC.6,L3$ z6 Q$ U- [( r5 y. q) E, f" I
MOV A,#08H
; h8 e/ c8 Z1 e: w( ]- F LJMP LK
6 U( E. I$ u) s& }+ @& kL3: JB ACC.7,NEXT16 v4 _5 T/ c3 ~. D p+ E4 {
MOV A,#0CH
+ Y5 a- `& w6 \LK: ADD A,R4
/ ?5 _9 {+ `+ ]! C PUSH ACC# G% A2 j% w! M2 m2 Z
K4: LCALL DELAY1 ;若同时有其他按键,则等待; R' t8 W+ B5 o
LCALL KS
" r* U: i: I& g, @( W* Q( _ JNZ K4/ D4 {4 J" z, P; F. L; `
MOV R3,#07H
5 Q k6 o3 l- Z6 T( M CLR A
$ ?9 A: M- V" ]8 o6 N% O0 ? MOV R0,#30H/ L9 O& z' p0 l, v( w
MOV R1,#31H2 A% J: _7 }4 {5 T- W
MM1: MOV A,@R1; g, B7 W4 h/ x# \$ R$ ?! [
MOV @R0,A' q5 l% P3 }2 ]3 Z
INC R0; h- Z0 P5 u+ [" g: ?$ q$ W
INC R1
6 V+ ?5 h( Y$ q0 w DJNZ R3,MM1! P4 @5 {. g: D/ k. Y- ~, C
POP ACC m6 u. ?- `- X* Y
MOV @R0,A
' i+ i% X9 k7 S5 U* D% J RET
3 F* x8 f2 S3 i% A* aNEXT1: INC R4 ;列扫描4 Q" Y- w9 e( a/ _: C
MOV A,R26 |% `+ p/ Y; z4 f' Q2 T
JNB ACC.3,N2) f" Y# b# I& C1 f( x9 `/ {# o
LJMP N1( a0 ]7 j, r) _4 ~& b
N2: LJMP KEY) p0 T- n4 H: |6 ]
N1: RL A
% l7 }% P' j' _2 B; a& D MOV R2,A
5 ?" M( y5 d4 a7 D6 P3 r LJMP K30 c/ B9 ^" X8 i- }! o* y) l/ e+ ^
KS: MOV A,#0F0H ;判断P1口
+ S4 l& `0 Y# q; E. ~ MOV P1,A
9 K' s$ [# t7 D+ I/ g NOP! A% k" R5 G4 q: a4 u
NOP* j$ ?& w' @$ o/ g1 J
MOV A,P1) D7 n# X7 Q* C5 f1 g0 N3 W1 {
CPL A
* o" J0 n$ ?, @. g& P. [# v3 K ANL A,#0F0H
0 g5 [- ^# W0 y# N7 b RET+ z1 Z. [8 L9 i6 D
DELAY1:SETB RS0
* L5 a* {1 M* l1 MDL: MOV R5,#0AH8 o: T# M, A; r7 B' T# X# u
DL2: MOV R6,#63
% p$ ]4 g% [1 X5 |, Y$ }DL3: NOP
* W( q2 N/ g5 I8 g1 a! w NOP
+ b6 e4 ^: m6 {& E DJNZ R6,DL3! n M5 G+ Y: Z! a6 B4 a
DJNZ R5,DL2 9 w, E" c8 V' u( B1 V
CLR RS0 2 H- i; L0 n$ y; `
RET
, @2 K3 Q6 H* c3 GINITIL: ;30H-37H初值为零
( N/ S- ?2 i6 N8 |2 e MOV R3,#08H
% ]5 ]5 {0 J8 m# h% b MOV R0,#30H) [- v$ E; e& L9 {/ D+ L$ Y
M1: MOV @R0,#00H
+ h' a, X9 z0 y+ [9 D; @ INC R0
1 s% S- j9 A+ a DJNZ R3,M1
% c. k, c# O/ ?* K( X RET+ ~( s; w/ K; ] G% O( d7 \. \0 m, C6 p
MODD: ;显示
: q9 b, }' e/ i2 F, H9 _+ {8 C1 E MOV P0,#8EH! b1 z2 y: C3 u/ E
CALL DISPLAY : }0 ?2 r7 ], B' j) Q% D! s* J% c
MOV A,37H
4 E/ w; O- K z5 D8 V MOV DPTR,#TABLE3
7 b9 u) J' L/ A; L MOVC A,@A+DPTR
' K% G2 t1 r+ j5 k) L" @. Z6 T( h CALL WRITE2 7 T) U" ^! R6 o) F* H* ?
RET2 r) f3 l$ x) o, s9 X7 [
KAIJI: MOV A,37H ;开机提示字
* H) C+ q+ O; A) ?) J CJNE A,#0FH,DFF& M. ~6 P# m8 m2 x
MOV P0,#80H ;设光标地址
9 k/ K: J2 {0 l7 g1 C! i CALL DISPLAY1 ~& q5 e1 j: t; Z) ], W" `
MOV DPTR,#TABLE1;写数据
% M \ ~8 z; p! e7 b$ m* ~4 W CALL WRITE1 ! S. j( _. D9 h" j6 \7 ~
DFF: RET
/ K" c7 O1 y/ I: Z* T;按键值播放歌曲
' P7 j0 s/ m ^% E5 O1 XSOP: MOV A,37H
, X, o1 \* b, I! m% v" O CJNE A,#01H,A11
+ l9 U9 _' a5 C* T LCALL MODD' x' f, ?" t, k
MOV 52H,#HIGH TABLE109 Z# L! p( H, N: \+ O
MOV 53H,#LOW TABLE10
2 i/ C" f8 o5 S) {1 K LCALL INITILE2
/ K* x( R& p1 A LCALL MAIN0" h$ x# ]" V" }8 M+ s6 V7 c t! c
A11: CJNE A,#02H,A227 u% e- A. R* T4 P& l4 }% J
LCALL MODD
, b; l; m' ~( @! h/ S1 R MOV 52H,#HIGH TABLE200 K7 d1 v2 A" l5 a4 M
MOV 53H,#LOW TABLE20
! A/ A- O- k2 @1 j LCALL INITILE2 & X+ E: f+ ^5 [/ p8 x2 N/ q
lcall MAIN0
3 o7 n8 Q8 E: c% jA22: CJNE A,#03H,A33. w( I- z. f, z" t
LCALL MODD
6 H1 f! ]# ?5 ~+ {" r) j. n, i2 W+ N MOV 52H,#HIGH TABLE30
( e( u4 [8 E$ c/ F# X4 a MOV 53H,#LOW TABLE30
7 T9 T8 E/ v) }9 T9 P: v' z LCALL INITILE2 # A; g) E# T/ E' I$ m
lcall MAIN0 " j- z1 c: ?0 v2 m. E/ B
A33: CJNE A,#04H,A44$ o9 O2 r; p' E8 W% S
LCALL MODD
+ M5 x b1 F r MOV 52H,#HIGH TABLE402 {7 `/ [" a- w4 X; u
MOV 53H,#LOW TABLE40
6 N! Z: j$ Y# d a) r' |3 s LCALL INITILE2 0 \/ d: b2 g. N$ H* H
lcall MAIN0
/ g. P O! g& v, eA44: CJNE A,#05H,A55
/ V" Y. a- e# X N3 A1 m' i8 x LCALL MODD
9 h# T. R) T+ o MOV 52H,#HIGH TABLE50 \# Q: [2 s+ [! x5 }1 l
MOV 53H,#LOW TABLE50 / c1 w. S9 j8 y
LCALL INITILE2
& ~2 q& I5 n e+ n1 C0 R lcall MAIN03 A& z$ W0 A$ \; i* ]! L" I. b
A55: CJNE A,#06H,A66+ J+ G7 [6 G* K. |, B
LCALL MODD% R7 B; v0 P, c! O& N3 m8 e
MOV 52H,#HIGH TABLE604 L; d( w/ h" Y) e2 Z7 |
MOV 53H,#LOW TABLE60 & J1 A7 ^3 l U% k6 r; g- Y( I
LCALL INITILE2
4 s( ]- }7 H) w. T/ { lcall MAIN0 4 [9 Q/ G7 C7 F2 r9 T! K- A
A66: CJNE A,#07H,A77# r& l0 J9 V$ u8 H( ]* r( y3 G
LCALL MODD
& m" K5 i+ r6 a, ?2 } MOV 52H,#HIGH TABLE70
+ ~2 { h/ ?2 M' R9 C' O# j MOV 53H,#LOW TABLE70 ) y" u. v$ p6 X& F
LCALL INITILE2 # D8 F+ n- ]* q. `2 h! q2 e
lcall MAIN0
( x7 y4 e1 x) V: L* H0 wA77: CJNE A,#08H,A88
1 c! _) i; z! x }5 F; c# a7 p LCALL MODD/ y+ J- k! j0 E3 Y1 k/ @/ D
MOV 52H,#HIGH TABLE80
$ H' m9 p& d3 ], k' F1 u5 k MOV 53H,#LOW TABLE80
' N5 |7 z5 P/ ?) E+ Z$ ~ LCALL INITILE2 * M: u- _1 F# a$ s4 t
lcall MAIN0; k2 l7 E' }, `; l$ H
A88: CJNE A,#09H,A99
% C8 x" P; p9 i# J, p4 D1 Y, @& D LCALL MODD& j q6 Z, [. m( [+ ]% o0 ?
MOV 52H,#HIGH TABLE902 c( m) }" ?4 a# U" U
MOV 53H,#LOW TABLE90
; \: V9 f% l+ m+ ~2 R' y' p1 p7 k LCALL INITILE2
: E3 R, e9 ~* Q" h lcall MAIN0
% \; W* T" K! e/ S( B9 rA99: CJNE A,#0AH,AAA$ v$ T) B8 R V# v9 L6 Q" U% k6 A
LCALL MODD. K9 [# f c8 R* Q1 ~% A
MOV 52H,#HIGH TABLE1003 v" K! V7 l: S8 C& @
MOV 53H,#LOW TABLE100 ! E) S' }' t7 d+ B6 S g2 {% d* f
LCALL INITILE2 & H8 P- L/ d, h
lcall MAIN0
; f3 J8 c9 H4 j- SAAA: RET ( \ C2 A7 K4 T9 h
INITILE2:7 B" L. c( M' L. A
MOV L50MS,#20 k! F; _# s, k2 |& u' `
MOV L1MS,#00H
; d% ]9 ?0 }+ |% X" c& \* H MOV L250MS,#00H/ E* u4 c" {* A
MOV SEC,#00H: ]8 f6 x0 q" y ~, B
MOV MIN,#00H o6 E5 h: n L# H: a
MOV HOU,#00H
0 L* B6 x3 c/ r0 E1 z7 WMOV A,HOU* q8 _5 I. G, ]. `3 C+ q
MOV B,#10/ p2 \/ R7 D4 |1 B) W+ c
DIV AB4 C+ T9 m1 C% v0 }. ~
ADD A,#30H ;将BCD吗转化为ASIIC码
# q; @9 |) [, [/ u sMOV P0,#0C8H ;显示小时十位. Y/ C$ A4 j0 `3 |
CALL DISPLAY
& ?- a5 v" U5 @* J1 e CALL WRITE2
, v* G# ?$ q5 I1 p; Q6 ]- m' D MOV A,B4 O( q* H4 M x7 Z$ ]
ADD A,#30H) y- A' D4 Z( P; S( g& R1 ]
MOV P0,#0C9H ;显示小时个位
[9 \+ r* ?. d: {) l CALL DISPLAY
1 H; Q7 |$ |; C) [% J CALL WRITE24 i# N- u6 E+ L
MOV A,#3AH, W3 e3 R5 V/ S- i& i
MOV P0,#0DH ;显示冒号
5 a. \9 R, j3 {6 D3 z3 \ CALL DISPLAY
5 }* [3 t" H' ^ CALL WRITE21 S5 B/ Q" `5 T
MOV A,MIN
6 c$ g( ~3 h+ F- A. I MOV B,#10
3 U; [3 r5 E! _. c DIV AB
$ |$ O$ w9 S) L( b# y9 Y ADD A,#30H
' M$ \) B2 M& {* {7 ]( y MOV P0,#0CBH ;显示分十位
! k: i& }6 |# u: O; H CALL DISPLAY
3 [( ~4 }( s; T, j CALL WRITE24 S1 b. C1 e! x3 ?, g( A/ h
MOV A,B
4 P5 r- j6 i' j! g ADD A,#30H
5 D. I$ ]4 @' \3 @4 Y4 ~' H# w; B% E7 ` MOV P0,#0CCH ;显示分个位
+ q; r, Y. C7 d1 t! P$ _: h9 J CALL DISPLAY
( F7 z! l2 G, ^! u# ?8 p CALL WRITE2
( i0 z3 a0 Z, H$ U. J' J MOV A,#3AH1 q4 x* C. J! g5 A p8 d6 g
MOV P0,#0CDH ;显示冒号, C: F7 H8 H( S$ P% N- O+ H* o
CALL DISPLAY; F; S P5 B2 V
CALL WRITE2. j' n0 `9 B# r' Z+ ?
MOV A,SEC
& O- O. P0 h9 {% Z* ] MOV B,#10
! k. P( J& ~, v9 u& R: X* o DIV AB% ~5 N4 m$ h% }& B, c5 _
ADD A,#30H ( g: k; }) h& J; K. x
MOV P0,#0CEH ;显示秒十位% ^) w2 [) _7 {9 {6 }
CALL DISPLAY, M' p+ _1 x6 p/ V! {! n) X
CALL WRITE2
+ r# f/ J t3 S MOV A,B
/ c5 `' n0 `! s6 E2 _$ [* i5 V ADD A,#30H
7 O9 h$ {9 o! o6 u8 p/ b4 D+ ], f MOV P0,#0CFH ;显示秒个位( p e- n) a% ]1 ?
CALL DISPLAY
Q. g% T& A: x: M) [" @4 D CALL WRITE2) _9 h/ u& b: S0 V
MOV P0,#0C0H ;设光标地址 + H/ [( }! a; f0 W9 m% j) z
CALL DISPLAY
9 [( X# z5 {2 B) E4 Q* K( u2 G# _ MOV DPTR,#TABLE2;写数据; `7 y1 ]* l' O+ D+ z1 W% `1 U0 q6 h
CALL WRITE1 4 g+ F+ f$ o5 ?+ F7 p
RET+ o& Q/ E& ]& ]7 d5 n4 u! ^
DISPLAY: CLR RS ;写指令
) g0 b! Y; h; T. i+ Q! O6 I2 P CLR RW- ?. m, a# R$ b- B2 U
CLR E* s9 v6 \1 A: E' K! G- g
LCALL DELAY
( R$ _1 e6 z" r SETB E
4 C- B; ^( R9 M9 Z6 T6 V RET
% o! B( a& @ r, d2 A! aWRITE1: MOV R1,#00H ;写数据
7 i; b1 j2 V t% uA1: MOV A,R1
6 p7 C" e. a% q! @& H# r MOVC A,@A+DPTR# S' X5 |; @; C' \. l4 E- i
CALL WRITE25 q$ r* G( H2 z" ?
INC R1
# [3 o7 R) }) V! A% {( j CJNE A,#0FEH,A1 ;未到字符串末尾继续0 V/ A5 c2 J. a0 Z
RET O: t0 q, c% v0 S$ N
WRITE2: MOV P0,A
0 A0 I" _# k: j SETB RS
# ]5 D4 h% V. ^4 g& h) j: W CLR RW, q: G; I) g3 ?9 o4 M& {' t
CLR E v6 h; \4 ]3 w$ I
CALL DELAY# ]' h" h' F+ O; s5 b
SETB E
# Z6 x* u! b7 P2 h RET0 P Z- H+ O a; Q4 G" v1 _
DELAY: MOV R4,#05: ?' K, } Z# z
D1: MOV R5,#0FFH
@1 z, J" ~! A DJNZ R5,$' T5 } G; X% J0 J
DJNZ R4,D1! L+ Z: j3 Y9 V8 E! _) f
RET ! V! [- U. X% R0 V& F% E
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H
. F& b2 c; m+ c* ^4 E DB 80H,90H,88H,83H,0C6H,0A1H,86H,8EH, c$ C/ F9 i! b- ~9 \8 A
TAB1: DB 89H,86H,0C7H,0C7H,0C0H
9 q; R1 R3 Y/ `& R: eTAB2: DB 0C6H,88H,0C0H
: { T. ^$ v0 `/ L' C9 _TABLE1: DB 'WELCOM HERE',0FEH- @) T$ @9 H: e0 d* W# c
TABLE2: DB 'DFF WB ',0FEH4 C. l; P$ U1 U" m1 Q U4 R2 D$ N
TABLE4: DB 'CAU',0FEH
; N6 I0 d, o2 @! o" LTABLE3: DB 30H,31H,32H,33h
0 Z' E7 R/ j+ V) V r3 ?. t DB 34H,35H,36H,37H" V" g# |3 M2 ]3 w
DB 38h,39H,41H,42H
7 H6 R7 @& {0 d% n( S: R* H DB 43H,44H,45H,46H . r0 R: u% m6 u" J
MAIN0: MOV TMOD,#11H ;播放歌曲程序
' h( B! A( o3 J- q# \; A( Q MOV IE,#8aH 2 q9 b% Z; F+ H$ {4 j/ n
MOV TH1, #3cH; W1 L1 i6 T% o2 D$ ~
MOV TL1, #0b0H
" l& n# V- ]* z! A: U( A LCALL KS
+ Q( j- A. H4 v0 y JNZ TTM12
, E$ r' k) P/ P2 ~, F2 } MOV 40H,#00H" D+ d, S2 Y2 |7 |. Z
NEXT20: MOV A,40H- Y# N2 L' {0 t1 f& H" J& ^: u
MOV DPH,52H
! G5 _9 N! I5 s9 N MOV DPL,53H# {5 T. t( \. B" M, X: t* Y/ B. q. J
MOVC A,@A+DPTR8 D' a* q+ T# }
MOV R2,A
2 r+ b% A s/ T9 x# Z$ A l JZ STOP
8 Y7 B$ r4 R) S; \, Z9 Y ANL A,#0FH
& q. A+ T, T9 k8 ] MOV R1,A/ a2 e) ?8 J! M) |1 ]! _& q
MOV A,R2$ W3 W% r1 ^+ x4 N: [1 H" k1 e
SWAP A
" d, H e5 b4 M2 c3 \ ANL A,#0FH
4 A( d& B7 {8 E0 s/ T5 g0 A JNZ SING
$ M+ L2 X2 Q! [+ Q8 x0 t CLR TR0
2 Y0 s( b! i; }3 Y* A; H0 Z3 d3 ~! w; d JMP W10 }- y: L/ T( j$ V0 H
SING: DEC A* Q8 M1 ^# h( r
MOV 22H,A
" `& W- L: z4 v) z2 J; U5 E/ ~7 K RL A
3 o5 K, `, u% E1 Y$ y# s8 | MOV DPTR,#TABLE00% f) U8 Y/ g! N# `/ k/ |, H
MOVC A,@A+DPTR
. d- D, q6 z* E, x5 Q' ^ MOV TH0,A& _8 w t6 R0 N8 u u8 K
MOV 21H,A
3 t5 @: I' k; ?7 s" Q2 x MOV A,22H T2 D# g4 x! ]# i: r$ C1 j
RL A5 o; {4 `+ z! g
INC A
* R, G7 i0 F8 v5 t) \2 t MOVC A,@A+DPTR J( Z: n9 a/ S; L
MOV TL0,A
, q9 D4 n! Q* D7 i! q( h& h MOV 20H,A
1 r' r# p8 c0 D( N SETB TR0
2 v, D4 C u1 Y0 I( Z SETB TR15 v" c- H+ v* f" k
W1: LCALL DELAY30
1 o0 K. Z* W( f2 B8 ^ INC 40H }8 p) i! h: E) M9 K
LCALL KS ;有键跳出, a. l, o* F, ^7 Z
JNZ STOP* W% g x: R; R( u2 i; ~, `1 Q
LJMP NEXT20
9 U. Y* \4 M4 V9 j9 x1 nSTOP: CLR TR0
; y, X0 s/ Y3 i& X CLR TR1
1 ?; \' P3 ^: v LJMP MAIN0
; M& {) Q- y7 N( Y3 l" X/ Q* YTTM12: LCALL K2
0 O& E$ T/ I& j* p8 k" X1 d MOV A,37H
b \7 @; Z( k2 T. Z2 F CJNE A,#0EH,TTM13
! |2 S5 Z- h! C8 `8 D( X! e1 p CLR TR1
& f% z) Z# J& k0 T LCALL DELAY14 A; {* [" A& ~' y- q0 m
TTM120: LCALL KS& ^! z6 b' b4 Y* P- X6 b
LCALL DELAY1
/ x$ Y* X$ t' t4 O JZ TTM120, z* R* r" S# Q/ x/ Y! g
LCALL K2
^3 W R1 j& A MOV A,37H
+ I+ L; B1 T4 Z CJNE A,#0EH,TTM120
0 G5 x- G/ U4 K) M9 K SETB TR1
& r- _* r, u3 x# P) n LJMP NEXT20
3 k- `6 k! V) mTTM13: CJNE A,#0CH,TTM14
4 B3 W4 y4 k; e( G2 A MOV A,52H
- l% Y, M! |; e INC A/ R9 ~2 Q' @( F- w- v$ V
MOV 52H,A
9 s2 Z Z+ L& K1 i' w MOV A,53H4 S) f- d( T) E/ w+ F
INC A( S% R. i. K2 {, o: V
MOV 53H,A5 W+ B1 M9 v6 a* `; E7 a b d3 {% ]
MOV A,36H
, F7 S1 K [$ K5 c6 H/ P) j4 V) D INC A' b, \. [% |' ?* ]& ^& S* i
MOV 37H,A
# ]; Q$ r3 v6 o4 _' z$ b" J, h LJMP TTM21 [2 `4 Y k: E' n0 V0 g9 b2 l, x
TTM14: CJNE A,#0DH,TTM2
( N. R' v/ x9 ^ z MOV A,52H# @- T2 _: z, w- e; }
DEC A0 R2 `- }4 y5 n1 G
MOV 52H,A. V, k( L. U" Q# f3 F& ?" l, c
MOV A,53H
) G4 V* N+ U7 j8 R$ ^1 o- S1 ] DEC A
" \$ U5 U& l& w1 [* P MOV 53H,A! G6 x; _7 M {+ V5 M8 ]
MOV A,36H# z' E% I2 \$ E
DEC A
( W( ^. U- w4 X: C MOV 37H,A
$ M3 T, G" \: f- KTTM2: RET$ c$ k, |0 \% [1 @) y& K ?
TT0: PUSH ACC ;定时器中断子程序0
4 w- r% B0 {# E' k! g! H PUSH PSW; H1 G/ D1 p3 _" B/ y3 g/ T
MOV TL0,20H) }% P \& I. A3 R) e* c
MOV TH0,21H
; u0 Q0 x0 |" K7 C6 |8 j CPL P3.7
2 b' `, T, P+ ?, w8 j POP PSW
5 r( H/ b0 r4 v& h8 Y, `, } POP ACC/ L& n& L. z4 u/ U8 {
RETI
7 Y; W' N1 f! [3 V+ {& }2 s;定时器中断子程序1- J: o/ h. S) ^# E6 n* z& J
T1INT: MOV TH1, #3CH ;定时器中断子程序1
3 ?& u2 \8 i X MOV TL1, #0B0H8 c$ v4 p j& Q; F
DJNZ L50MS,X4/ U3 l7 Y O5 L/ W3 @2 M* x6 g
MOV L50MS,#20
) z/ u: k2 @) kSECSET: ;每秒种时钟刷新秒显示一次
0 \- B5 R) ~2 l @. ~2 A4 C) vMOV A,SEC
Q9 G" D+ L. E4 i MOV B,#101 w' P t1 n7 ~% U, G
DIV AB
6 r3 j" _8 i$ l/ s/ O8 k& C. L- u7 I! d ADD A,#30H ; j( g2 u0 F# l6 R c& ^! N! A4 j1 u
MOV P0,#0CEH ;显示秒十位
* d: B7 j: P7 d- ]2 u# [ CALL DISPLAY, X' r* @0 O9 N5 A& ~
CALL WRITE2' X1 T& x) E- M
MOV A,B1 a( I1 A$ h) x
ADD A,#30H
3 h: l# _0 m5 c8 }" K MOV P0,#0CFH ;显示秒个位! t. Y6 b- k- O+ N
CALL DISPLAY6 H8 {0 M# n+ g6 ]& L8 S0 y
CALL WRITE2$ D) t! C0 k5 \) D
MOV A,SEC! {( C/ b- E7 o: Y1 v
INC A2 |& c% o& Y7 W( c8 y* w) t
MOV SEC,A% D% }, U9 I, X9 I. s
XRL A,#60
7 \- @( `5 Z4 L5 s) H5 D% NX4: JNZ OUT
' X# x) U R) TMINSET: MOV SEC,#00H ; *每分钟刷新分显示一次8 o! V; |* Y; \
MOV A,MIN
6 \) q7 y* B* c INC A" Q* O: p: P6 {2 L
MOV MIN,A
( |0 ~) u4 c: r) ]6 i( X MOV B,#109 Q3 J8 c! A2 Q& t
DIV AB% j8 w, h7 n% u5 l
ADD A,#30H- Y+ x6 @. q' h5 f
MOV P0,#0CBH ;显示分十位3 p6 p+ I! Z9 x$ m
CALL DISPLAY& a: o2 }( S* P9 @* ^: W
CALL WRITE2$ E: z8 [4 w2 o7 {+ L6 u; K( o
MOV A,B5 r% }" X/ \# @! d6 T
ADD A,#30H, T, V0 v7 s! u
MOV P0,#0CCH ;显示分个位
6 X6 [/ U z. E0 m* P" M! u4 ` CALL DISPLAY
- L- R2 V! s" D. r- ~6 d9 b CALL WRITE2
8 o: z) h' Z$ R MOV A,MIN
! S: T0 o' N) j2 l9 ]! L MOV B,#3
9 H9 \ C0 [! x, \2 T1 N5 \9 x MUL AB
* b7 [* n3 P, _ O* ~ MOV B,#100' h" d% m" Y7 p# W0 m+ J
DIV AB: d1 @2 z8 E0 K6 a- Z6 M. `5 O
MOV R2,A
) k5 d9 h; Z) a6 C4 q! d9 X# F MOV A,#10
4 s: r' D( t M; S5 f/ Y/ J XCH A,B
& y ]+ u( j! f- L9 Q0 Y5 q DIV AB' @/ v% h# f: Q1 o7 {2 Z: t
MOV A,MIN5 j& v( l: h+ ~: W
XRL A,#60
& b! r0 C" o5 z& a. q" @, ^; ~ JNZ OUT3 W) ~! z* M7 W# ]: H" M2 F
HOUSET:
) ?4 F' |9 a) q/ c' V! ] MOV MIN,#00H ;每小时刷新小时显示一次 , G- d/ D) q2 P1 L* h
MOV A,HOU, M# a! {1 a/ y# _
MOV B,#10
/ Y1 ^# {0 K, R7 I' o; q. J+ D DIV AB3 H2 n0 ^" b- m |( G: I e
ADD A,#30H ;将BCD吗转化为ASIIC码2 @/ ~% @2 n) y$ U# f W
MOV P0,#0C8H ;显示小时十位
8 k: g# T C! A2 g. d; [ CALL DISPLAY
& U+ B, _& V# k; ~& |9 ^- o/ m A CALL WRITE2
D% p# b0 S9 F. E2 hMOV A,B
3 F7 Q. p- ~, t$ _4 X& @ ADD A,#30H$ x+ }& |! }) ?: g
MOV P0,#0C9H ;显示小时个位2 k# X0 ~% E" {9 ~! w; l
CALL DISPLAY
7 K# z* T9 I, Z CALL WRITE2" i9 m8 ~- e; T: V; M# p$ C2 i6 g
MOV A,HOU
. g }( ^6 M) l. Q) V9 m INC A6 A, {* z/ Q7 c$ |# V/ P1 _: d
MOV HOU,A7 a+ S, f2 k9 P
XRL A,#10
. e- J/ d$ u1 {- _2 G7 z JNZ OUT9 W- D: }3 m$ A2 M( C
SJMP OVERFLOW4 U# I- V, y5 v. A
OUT: RETI;溢出处理
3 I+ `; l( s" G( u$ [OVERFLOW:
) T4 Q3 `1 W4 r% f7 q4 ]8 o% q MOV L50MS,#20 u ^$ I7 S% c* A- [0 y
MOV L1MS,#00H
% H0 o5 i1 Y2 n, O. K( \ MOV L250MS,#00H
! V$ q3 f# j" p1 }* w* k8 Q7 Q MOV SEC,#00H% o! Q5 X% T, B3 ]
MOV MIN,#00H
0 k) K) \& s+ n* E4 x MOV HOU,#00H: O1 L- q- d* \) A
RETI* L; [3 G- B! Z1 `
DELAY30: ; Y" @4 X3 I, x2 V" S
MOV R7,#2" M' x# q+ q$ G/ k# t$ F7 c
W2: MOV R4,#125# I4 `% Q' f: ^2 P
W3: MOV R3,#248) X4 ]. `! f( E7 u9 }
DJNZ R3,$
' t% q8 D# n. Z" a1 T DJNZ R4,W31 A. P+ b% J) r4 S8 ]4 n" I
DJNZ R7,W2* R' S3 M: p M9 T' E
DJNZ R1,DELAY30& c$ L: [4 W4 f4 j7 q; O
RET
\9 N. x: L" Q0 {; X8 T# t) U' ?TABLE00:4 I% |9 j# A1 V. d: f; n5 B
DW 64580,64684,64777,64820
2 A$ v& s) j0 w1 \% Y DW 64898,64968,65030,64260& O f& e' n7 a$ g
DW 64400,64524,65058,63835,64021
0 X5 S- [9 Y: t' Z9 S3 eTABLE10: ;第一首《精忠报国》
5 m9 f; M I& a4 E& N/ K7 @& P; W
; p. o9 u) _ U+ S' y$ N# x+ Z…………限于本文篇幅 余下代码请从论坛下载附件…………$ W0 t6 y3 v9 X6 o! Y* p
. `2 Z2 g) ~+ ^% l4 V, V# I
0 H% d+ v9 j V! H( y# j( h1 ]! ?+ u8 t+ Y* c; f4 K
|
|