找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6406|回复: 3
打印 上一主题 下一主题
收起左侧

51单片机八音盒源程序(汇编语言)

[复制链接]
跳转到指定楼层
楼主
ID:254677 发表于 2017-11-28 15:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
八种声音:友谊天长地久、梁祝、兰花草、小草、千里之外、救护车、叮咚门铃、嘀嘀声。

单片机源程序如下:
  1. ;//*****************************************************
  2. ;文件名:  八音盒.asm
  3. ;描  述:  八音盒,P1选择音乐,低电平有效,P3.0音乐输出口。
  4. ;         本程序使用的寄存器有R1至R7,40H,41H,42H单元。
  5. ;         标号TAB1处为T0的定时常数数据表。         
  6. ;//*****************************************************

  7.         Speaker     BIT   P3.4
  8.         FLAG1       BIT   20H
  9.         FLAG2       BIT   21H

  10.         ORG        0000H
  11.         LJMP        Start
  12.         
  13.         ORG        0003H
  14.         LJMP    EXINT0

  15.         ORG        000BH
  16.         LJMP    INT_T0
  17.         ORG        0013H
  18.         LJMP    EXINT1

  19.         ORG        001BH
  20.         DJNZ        R4,GOON                ;中断次数不够,继续。
  21.         CLR     ET1                ;持续时间到,该音符停止。
  22.         CLR     ET0  
  23.         SJMP        RE01
  24. GOON:        MOV        TL1,40H
  25.         MOV        TH1,41H
  26. RE01:        RETI

  27. INT_T0: MOV     C,FLAG1
  28.         JC      TORET  
  29.         DJNZ    R0,TORET
  30.         MOV     R0,#6
  31.         MOV     C,FLAG2
  32.         JC      TOADD  
  33.         SJMP    TOSUB
  34. TOADD:  MOV     A,R3        
  35.         CJNE    A,#0FEH,ADD1
  36.         CLR     FLAG2
  37.         SJMP    TORET
  38. ADD1:  MOV     A,R2
  39.         ADD     A,#1
  40.         MOV     R2,A
  41.         MOV     A,R3
  42.         ADDC    A,#0
  43.         MOV     R3,A
  44.         SJMP    TORET
  45. TOSUB:  MOV     A,R3      
  46.         CJNE    A,#0FBH,SUB1
  47.         SETB    FLAG2      
  48.         SJMP    TORET   
  49. SUB1:  MOV     A,R2
  50.         SUBB    A,#1
  51.         MOV     R2,A
  52.         MOV     A,R3
  53.         SUBB    A,#0
  54.         MOV     R3,A
  55. TORET:        MOV        TL0,R2
  56.         MOV        TH0,R3       
  57.         CPL        Speaker         ;音乐输出口.
  58.         RETI



  59.         ORG        0080H
  60. EXINT0:
  61.         CLR     ET0
  62.         CLR     ET1
  63.         CLR     A
  64.         PUSH    ACC
  65.         PUSH    ACC
  66.         RETI
  67. EXINT1:
  68.         CLR     ET0
  69.         CLR     ET1
  70.         CLR     A
  71.         PUSH    ACC
  72.         PUSH    ACC
  73.         RETI
  74. Start:       
  75.         mov     TCON, #05h      ; 外部中断0下降沿触发
  76.         SETB    EX0             ; 打开外部中断允许位(EX0)及总中断允许位(EA)
  77.         SETB    EX1
  78.         SETB    EA
  79.   
  80.         MOV     A,P1
  81.         JNB     ACC.0,Voice0
  82.         JNB     ACC.1,Voice1
  83.         JNB     ACC.2,Voice2
  84.         JNB     ACC.3,Voice3
  85.         JNB     ACC.4,Voice4
  86.         JNB     ACC.5,Voice5
  87.         JNB     ACC.6,Voice6
  88.         JNB     ACC.7,Voice7
  89.         Sjmp    Start

  90. Voice0: MOV        DPTR,#tab_0       ;乐曲数据表的表头
  91.         Sjmp    Main
  92. Voice1: MOV        DPTR,#tab_1       ;乐曲数据表的表头
  93.         Sjmp    Main  
  94. Voice2: MOV        DPTR,#tab_2       ;乐曲数据表的表头
  95.         Sjmp    Main      
  96. Voice3: MOV        DPTR,#tab_3       ;乐曲数据表的表头
  97.         Sjmp    Main
  98. Voice4: LJMP    Main2
  99.         ;MOV        DPTR,#tab_4       ;乐曲数据表的表头
  100.         ;Sjmp    Main     
  101. Voice5: MOV        DPTR,#tab_5       ;乐曲数据表的表头
  102.         Sjmp    Main  
  103. Voice6: MOV        DPTR,#tab_6       ;乐曲数据表的表头
  104.         Sjmp    Main      
  105. Voice7: MOV        DPTR,#tab_7       ;乐曲数据表的表头

  106. Main:        MOV        TMOD,#11H
  107.         MOV        IP,#02H
  108.         MOV        41H,#4CH        ;T1初值放在41H,40H单元
  109.         MOV        40H,#0B0H        ;值越大,演奏越快
  110.         SETB        EA
  111.         SETB    FLAG1
  112.         CLR        A
  113.         MOV        R1,A                ;R1作为音符指针
  114. L1:        MOVC        A,@A+DPTR
  115.         INC        R1                ;指向音符的拍数字节
  116.         MOV        R6,A                ;音级字节暂存入R6
  117.         JZ        L3
  118.         ACALL        TONE               
  119.         MOV        TH0,R3
  120.         MOV        TL0,R2
  121.         SETB        TR0
  122.         SETB        ET0
  123.         MOV        A,R1
  124.         MOVC        A,@A+DPTR
  125.         INC        R1
  126.         CJNE        R1,#00H,L2
  127.         MOV        DPTR,#0400H     ;表指针溢出,更改表头
  128. L2:        ACALL        LONG                ;
  129.         MOV        A,R1
  130.         AJMP        L1                ;
  131. L3:        MOV        A,R1
  132.         MOVC        A,@A+DPTR
  133.         MOV        R7,A
  134.         INC        R1
  135.         CJNE        R1,#00H,L4
  136.         MOV        DPTR,#0400H
  137. L4:        ACALL        LONG                ;
  138.         MOV        A,R1
  139.         CJNE        R7,#0FH,L1
  140.         LJMP        Main            ;重复播放


  141.         ORG        0200H
  142. TONE:        MOV        A,R6                ;取出音级字节
  143.         RL        A                ;乘2,定时常数为双字节
  144.         MOV        42H,A                ;暂存入42H单元
  145.         ADD        A,#05H                ;距离数表有7个字节,使查表正确
  146.         MOVC        A,@A+PC                ;取出TH0
  147.         MOV        R3,A
  148.         MOV        A,42H               
  149.         INC        A
  150.         MOVC        A,@A+PC                ;取出TL0
  151.         MOV        R2,A                ;
  152.         RET
  153.        
  154. TAB1:        DB        0F8H,8EH,0F8H,0F9H,0F9H,5EH       
  155.         DB        0F9H,0BEH,0FAH,18H,0FAH,6DH       
  156.         DB        0FAH,0BEH,0FBH,09H,0FBH,51H       
  157.         DB        0FBH,95H,0FBH,0D4H,0FCH,11H       
  158.         DB        0FCH,49H,0FCH,7FH,0FCH,0B2H       
  159.         DB        0FCH,0E1H,0FDH,0FH,0FDH,39H
  160.         DB        0FDH,61H,0FDH,87H,0FDH,0ABH
  161.         DB        0FDH,0CDH,0FDH,0EDH,0FEH,0BH
  162.         DB        0FEH,27H,0FEH,42H,0FEH,5BH
  163.         DB        0FEH,73H,0FEH,8AH,0FEH,9FH
  164.         DB        0FEH,0B3H,0FEH,0C6H,0FEH,0D8H
  165.         DB        0FEH,0E9H,0FEH,0F9H,0FFH,08H
  166.         DB        0FFH,16H,0FFH,24H,0FFH,30H
  167.         DB        0FFH,3CH,0FFH,47H,0FFH,52H
  168.         DB        0FFH,5CH,0FFH,66H,0FFH,6FH
  169.         DB        0FFH,77H,0FFH,7FH,0FFH,86H

  170.         ORG        0300H                ;音长子程序
  171. LONG:        ADD        A,#0FH                ;使查表正确
  172.         MOVC        A,@A+PC                ;取出定时器T1应中断的次数
  173.         MOV        R4,A                ;T1应中断的次数存入R4中
  174.         MOV        TH1,41H
  175.         MOV        TL1,40H
  176.         SETB        TR1
  177.         SETB        ET1
  178.         CJNE        R4,#00H,$       
  179.         RET
  180.                                    ;音长子程序结束
  181. TAB2:        DB        01,02,04,06                ;应中断的次数
  182.         DB        08,10,12,14
  183.         DB        16,20,24,28
  184.         DB        32,40,48,64

  185. Main2:  CLR     FLAG1
  186.           MOV        TMOD,#01H
  187.         MOV        R3,#0FCH        ; T1初值放在41H,40H单元
  188.         MOV        R2,#000H        ;值越大,演奏越快
  189.         MOV        TL0,R2
  190.         MOV        TH0,R3       
  191.         SETB    FLAG2
  192.         SETB        ET0
  193.         SETB        EA       
  194.         SETB        TR0
  195.         MOV     R0,#6
  196.         sjmp    $

  197. TAB_0:       ;《友谊天长地久》     
  198.         DB        00H,04H,00H,04H,08H,04H,0DH,08H,0DH,04H
  199.         DB        0DH,08H,11H,04H,0FH,08H,0DH,04H
  200.         DB        0FH,08H,11H,02H,0FH,02H,0DH,08H,0DH,04H
  201.         DB        11H,08H,14H,04H,16H,0DH,16H,04H
  202.        

  203. TAB_4:    ;《千里之外》
  204. ……………………

  205. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
八音盒.zip (2.46 KB, 下载次数: 66)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:273535 发表于 2018-1-9 09:59 | 只看该作者
有Proteus仿真图吗
回复

使用道具 举报

板凳
ID:1069211 发表于 2023-3-31 11:08 | 只看该作者
有仿真图卡
回复

使用道具 举报

地板
ID:1064915 发表于 2023-3-31 19:28 | 只看该作者
有keil c的吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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