单片机电子琴设计 第3页

单片机电子琴设计 第3页
 DO:     NOP
           RET
TIMOY:   PUSH    ACC
           PUSH    PSW
    MOV    TH0,   #35H
    MOV    TL0,   #36H
    CPL    P1.0
           POP     ACC
           POP     PSW
           RETI
TABLE2:   DW   64580, 64684, 64777, 64820, 64898, 64968, 65030
           END
只要将这两个程序综合起来就可以完成设计要求了,注意因为在这两个程序分开考虑的时候都是用定时器0来完成的。而综合起来是只要改变其中一个为定时器1即可。程序如下:
   ORG    0000H
   SJMP    BEGIN
          ORG     000BH
          LJMP    TIM0
          ORG     001BH
          LJMP    TIM1
BEGIN:  MOV    TMOD, #11H
          MOV    IE,    #8AH
L1:     CALL    KEY
       JB       F0,  L1  /没有键按下则继续扫描/
         MOV     A,R3
         CJNE    A,#07H, SOPP
    SJMP    REPE  
SOPP:  MOV     DPTR,#TABLE2
         MOVC    A,@A+DPTR
         MOV     35H,   A     / T值高字节放入35H中/
    MOV    TH1,    A 
    MOV    A,    R3
       RL     A
         INC    A
    MOVC   A,   @A+DPTR
         MOV    36H,   A    / T值高字节放入36H中/
         MOV    TL1,   A
         SETB    TR1
L2:     CALL   KEY
         JB       F0,   L3
      SJMP    L2
L3:    CPL     TR1
SJMP    L1
KEY: MOV   R3,   #00H      /R3中的数表示是那个键按下/
JNB     P2.0,   LOOP
INC     R3
     JNB     P2.1,   LOOP
   INC     R3
     JNB     P2.2,   LOOP
       INC     R3
       JNB     P2.3,   LOOP
       INC     R3
       JNB     P2.4,   LOOP
       INC     R3
       JNB     P2.5,   LOOP
       INC     R3
       JNB     P2.6,   LOOP
   INC     R3
       JNC     P2.7,   LOOP
       SETB   F0
       SJMP   DO
LOOP:CLR   F0
 DO:  NOP
        RET
TIM1:    PUSH    ACC
           PUSH    PSW
    MOV    TH1,   #35H
    MOV    TL1,   #36H
    CPL    P1.0
           POP     ACC
           POP     PSW
           RETI
REPE:     MOV    30H,     #00H     /取简谱码指针/
NEXT:   MOV     A,      30H      /简谱码指针存入A/
          MOV    DPTR,  #TABLE
   MOVC   A,    @A+DPTR
          MOV   R2,      A         /音符码存入R2中/
CJNE  A,#0FFH,GOOT /是否取到了规定的结束码                     “FFH”/
SJMP   END0
GOOT:  INC    30H
    MOV   A,   30H
    MOVC   A, @A+DPTR
       MOV   R5,   A    /节拍数存放在R5中/
         MOV   A,   R2   /音符码存入A中/
    CJNE   A, #24H, SING  /取到的音符码是否为“24H”/
         CLR    TR0     /是,则不发音/
       JMP    D1
SING:  MOV  31H,  A    /音符码存入31H中/
    RL    A
    MOV  DPTR,  #TABLE1
MOVC   A,@DPTR+A   /找到TABLE1中对应的T值/
MOV   32H,   A   /取到T值的高字节存入32H中/,

上一页  [1] [2] [3] [4] 下一页

Copyright © 2007-2012 www.chuibin.com 六维论文网 版权所有