毕业论文论文范文课程设计实践报告法律论文英语论文教学论文医学论文农学论文艺术论文行政论文管理论文计算机安全
您现在的位置: 毕业论文 >> 论文 >> 正文

单片机电子琴设计 第2页

更新时间:2010-2-14:  来源:毕业论文
单片机电子琴设计 第2页
3 软件设计
1.延时程序的编写
1/4拍的延时时间=187毫秒,这个时间由歌曲本身来决定,歌曲不同这个1/4拍的时间也不同,这里1/4拍的时间就取为187毫秒。
DELAY: MOV   R7,#02
  D2: MOV   R4,#187
  D3: MOV   R3,#248
   DJNZ   R3,$
     DJNZ   R4, D3
   DJNZ   R7, D2
   DJNZ   R5, DELAY
   RET
R5表示为1/4拍的倍数。
2.T值表的建立
T值表建立在TABLE1中:
TABLE1:DW   63628,63731,63835,63928,64021,64103
         DW   64185,64260,64331,64400,64463,64524
    DW   64580,64633,64684,64732,64777,64820
         DW   64860,64898,64934,64968,64994,65030
         DW   65058,65085,65110,65134,65157,65178
         DW   65198,65217,65235,65252,65268,65283
3.键盘扫描程序的编写
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         /没有键按下则F0=0/
       SJMP   DO
LOOP:CLR   F0         /有键按下则F0=1/
 DO: NOP
       RET
此程序可以判断是那个键按下,如果有键按下则F0=0,没有键按下则F0=1。按键数存放在R3中。这样就可以根据按键来发音了。如果是按键8按下则表示是要唱一首完整的歌曲。可以通过设定中断来实现它。当按键 8按下时产生中断,系统马上响应中断进入中断服务程序,进行查表TABLE可以得到歌曲的简谱码和节拍数然后按照歌曲的规律进行下去,这样就可以唱出一首完整的歌曲了。TABLE表格的建立,,每个音符先编音符码然后编节拍数,音符码和节拍数各占一个字节。程序如下:
ORG    0000H
SJMP    BEGIN
ORG    000BH
SJMP    TIM0
BEGIN:  MOV    TMOD,   #01H     /设TIMER在MODE1/
    MOV    IE,      #82H      /中断使能/
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中/
MOV  TH0, A
MOV   A,31H
RL     A
INC    A
MOVC   A,@DPTR+A        
MOV   33H,   A   /取到T值的高字节存入33H中/
MOV  TL0, A
SETB  TR0    /启动TIMER0/
D1:    CALL   DELAY
    INC   30H
         SJMP   NEXT
END0:  CLR    TR0
    SJMP   REPE
TIM0:  PUSH   ACC
      PUSH   PSW
         MOV   TH0,32H
         MOV    TL0,33H
         CPL      P1.0
    POP      ACC
       POP      PSW
         RETI 
DELAY: MOV   R7,#02
  D2: MOV   R4,#187
  D3: MOV   R3,#248
   DJNZ   R3,$
     DJNZ   R4, D3
   DJNZ   R7, D2
   DJNZ   R5, DELAY
   RET
TABLE1:DW   63628,63731,63835,63928,64021,64103
         DW   64185,64260,64331,64400,64463,64524
     DW   64580,64633,64684,64732,64777,64820
         DW   64860,64898,64934,64968,64994,65030
         DW   65058,65085,65110,65134,65157,65178
         DW   65198,65217,65235,65252,65268,65283
TABLE:  13H,   02H,   24H,   01H,   13H,   01H,   15H,  04H    13H,    04H,    18H,    04H,   17H,    04H
         24H,   04H,   13H,   02H,   24H,   01H,   13H,   01H,   15H,    04H,    13H,    04H,    1AH,   04H
         18H,    04H,    24H,    04H,   13H,   02H,   24H,   01H,    13H,    01H,    1FH,   04H,   1CH,    04H
         0FFH
         END
对于不同的歌曲只要根据歌曲来建立TABLE即可。上TABLE表是根据生日快乐歌曲建立的。按键发音的过程,首先进行键盘扫描,判断是那个键按下,记下键数,存入R3中,然后查表得到相应的T值,并载入到定时器0中同时启动定时器,继续进行键盘扫描,判断是否有键按下,有则表示键一直是按下的,继续发音(因为扫描的时间很短最多也只有几十微秒,所以可以认为是同一个键按下的)。没有则进行循环扫描。

 

ORG   0000H
         SJMP   COOM
         ORG   000BH
         SJMP   TIMOY
COOM: MOV    TMOD,#01H
         MOV     IE,#82H
L1:     CALL    KEY
       JB       F0,  L1  /没有键按下则继续扫描/
         MOV     A,R3
         CJNE    A,#07H, SOPP
    SJMP    #####   /这里是为下面两个程序综合准备/
SOPP:  MOV     DPTR,#TABLE2
         MOVC    A,@A+DPTR
         MOV     35H,   A     / T值高字节放入35H中/
    MOV    TH0,    A 
    MOV    A,    R3
       RL     A
         INC    A
    MOVC   A,   @A+DPTR
         MOV    36H,   A    / T值高字节放入36H中/
         MOV    TL0,   A
         SETB    TR0
L2:     CALL   KEY
         JB       F0,   L3
      SJMP    L2
L3:    CPL     TR0
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

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

单片机电子琴设计 第2页下载如图片无法显示或论文不完整,请联系qq752018766
设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©youerw.com 优文论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。