找回密码
 注册
关于网站域名变更的通知
查看: 489|回复: 2
打印 上一主题 下一主题

基于AT89c51单片机的音乐盒制作 proteus仿真加源码

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2018-12-29 10:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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) m
1. 有时会出现程序一点错误也没有,但就是不能正常运行的现象,最后我们发行是因为程序中有的指令书写得不规范导致的,例如有的 RET 返回指令一定要按正确格式书写或在两 行指令间最好不要留空行。

9 Q. I& F$ ?9 }) a
2. 程序中的跳转指令的运用很重要,为保险起见,都用 LJMP,我们就遇到过跳转指令用错 程序无法正常运行的现象。当用 JNZ 指令时,跳转范围比较少,这时要用一个标号中转。

4 ?  ?4 V* {4 a) g/ R. l7 L! j
3. 编程时要注意,在程序开始时,要写入各定时器中断的入口地址。
% }6 H6 u( S8 y+ L. }
4. 编程过程中要注意加注释或分割线,否则,在程序过长时容易变得很乱,不便于查找或更改。

" g) Z. v$ E5 }9 E1 a: C
5. 程序的结构要设计的合理,避免上下乱调用的现象,这样会使程序更加清晰化。
: ?% 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设定在工作方式 116 位计数,计 50ms,效果有很大改观。但还有问题。

( `9 d: w- _( E1 z
b. 当音乐为全 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

该用户从未签到

3#
发表于 2019-1-30 16:22 | 只看该作者
看看楼主的代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-6 22:46 , Processed in 0.203125 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表