找回密码
 立即注册

QQ登录

只需一步,快速开始

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

音乐播放器单片机汇编程序

[复制链接]
跳转到指定楼层
楼主
ID:127937 发表于 2016-6-24 16:39 来自手机 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
软件系统程序:
        ORG 0000H
        AJMP LOOOOP
        ORG 000BH
        AJMP TIM0
        ORG 001BH
        RETI
        ORG 0023H
LOOOOP:        MOV        A,#01H
LOOOP:  MOV P1,#3FH
                MOV P2,A
                RL  A
                MOV R2,#0FFH
DELAY0:        MOV R3,#0FFH
                DJNZ R3,$
                MOV R4,#0FFH
                DJNZ R4,$
                DJNZ R2,DELAY0
        JNB        P3.3,START
                LJMP LOOOP
START:  MOV P1,#06H
        MOV R5,#00H                  ;初始化
        MOV TMOD,#00010001B
        MOV IE,#10101010B
        MOV DPTR,#TAB2               ;装第一首歌
        MOV 30H,DPL                  ;DPTR低8位送30H暂存
        MOV 31H,DPH                  ;DPTR高8位送31H暂存
START1: INC R4                       ;产生8位随机数
        MOV A,#01010101B
                MOV B,R4
        MUL AB                       ;8位随机数由P2口输出
        MOV P2,A
        MOV DPL,30H
        MOV DPH,31H
        MOV A,#00H
        MOVC A,@A+DPTR               ;查表
        MOV R0,A                     ;音符数据送R0崭存
        MOV A,#00H
        INC DPTR
        MOVC A,@A+DPTR               ;查表
        MOV R1,A                     ;节拍数据送R1崭存
        INC DPTR
        MOV 30H,DPL
        MOV 31H,DPH
        CJNE A,#01H,ELECT            ;一首歌没结束转ELECT
        INC R5
        LJMP KEYWORK                      ;结束歌曲计数器加1
ELECT: JZ START                     ;所有歌曲结束转START循环
        MOV A,R0
        JNZ SING
        CLR TR0
         SETB P3.7
  LOOP1: ACALL DELAY                  ;调用延时子程序
         DJNZ R1,LOOP1
         SJMP START1
   SING: MOV DPTR,#TAB1               ;音符表首址送DPTR
         DEC R0                       ;计算音符
         MOV A,R0
         MOV B,#02H
         MUL AB
         MOV R0,A
         MOVC A,@A+DPTR               ;查表
         MOV 21H,A
         INC DPTR
         MOV A,R0
         MOVC A,@A+DPTR
         MOV 20H,A
         MOV TL0,20H
         MOV TH0,21H
         SETB TR0                     ;开T0定时器
  LOOP2: ACALL DELAY
         DJNZ R1,LOOP2
         AJMP START1
   TIM0: MOV TL0,20H
         MOV TH0,21H
         CPL P3.7
         RETI                         ;中断返回
  DELAY: MOV R2,#70
DELAY1: MOV R3,#252
         DJNZ R3,$
                 JNB P3.3,AGAIN                                  ;重复正播放的曲子
         JNB P3.4,FORM                ;上一曲开关按下转FORM
         JNB P3.5,NEXT                ;下一曲开关按下转NEXT
         DJNZ R2,DELAY1
         RET
AGAIN:  JNB  P3.3,$                                           ;等待键释放
         LJMP KEYWORK
   FORM: CLR EA                        ;关中断
         JNB P3.4,$                    ;等待键释放
         CJNE R5,#00H,ZERO             ;不是第一首歌曲转ZER0
         MOV R5,#04H                   ;是第一首将最后一首歌曲装入歌曲计数器
         SJMP KEYWORK
   ZERO: DEC R5                        ;歌曲向上进一首
         SJMP KEYWORK
   NEXT: CLR EA
         JNB P3.5,$
                 CJNE R5,#04H,LAST
                 MOV  R5,#00H
                 LJMP KEYWORK
   LAST: INC R5                                                   ;歌曲下翻一首
         LJMP KEYWORK
KEYWORK: MOV DPTR,#TAB                 ;将歌曲排列表装入DPTR
         MOV A,R5                      ;将R5的内容送A
         RL A
         SETB EA                       ;开中断
         JMP @A+DPTR                   ;根据A的内容转向不同歌曲
    TAB: AJMP MUSIC2
         AJMP MUSIC3
         AJMP MUSIC4
         AJMP MUSIC5
MUSIC2: MOV DPTR,#TAB2                ;第2首歌曲首址送DPTR
                 MOV P1,#06H
   GONG: MOV 30H,DPL
         MOV 31H,DPH
         AJMP START1
MUSIC3: MOV DPTR,#TAB3
                 MOV P1,#5BH
         SJMP GONG
MUSIC4: MOV DPTR,#TAB4
                 MOV P1,#4FH
         SJMP GONG
MUSIC5: MOV DPTR,#TAB5
                 MOV P1,#66H
         SJMP GONG
;********************(音符表)**********************;
TAB1: DW 64021,64185,64331,64400,64524,64632,64732
       DW 64777,64860,64934,64968,65030,65085,65134
       DW 65157,65198,65235,65252,65283,65310,65335

;**********************(因为爱情)*************************;
TAB2:  DW 0910H,0A08H,0C08H,0C08H,0A18H,0010H,0C08H,0A08H
       DW 0908H,0C08H,0C20H,0D08H,0E08H,0F08H,0F08H,0F08H
       DW 0E08H,0F18H,0E04H,0E08H,0E08H,0C08H,0A08H,0A20H
       DW 0C08H,0A08H,0C08H,0D08H,0D18H,0C08H,0D08H,0C08H
       DW 0C08H,0808H,0820H,0608H,0808H,0A08H,0908H,0608H
       DW 0A08H,0908H,0608H,0A08H,0908H,0608H,0D10H,0C20H
       DW 0001H
;*********************(兰花草)***********************;
TAB3:  DW 0608H,0A08H,0A08H,0A08H,0A18H,0908H,0808H,0908H
       DW 0808H,0708H,0620H,0D08H,0D08H,0D08H,0D08H,0D18H
       DW 0C08H,0A08H,0C08H,0C08H,0B08H,0A20H,0A08H,0D08H
       DW 0D08H,0C08H,0A18H,0908H,0808H,0908H,0808H,0708H
       DW 0610H,0310H,0308H,0808H,0808H,0708H,0618H,0A08H
       DW 0908H,0808H,0708H,0508H,0620H,0908H,0808H,0708H
       DW 0508H,0640H,0001H
;*********************(我只在乎你)*****************************;
TAB4:  DW 0A08H,0A08H,0A08H,0908H,0A10H,0C08H,0C08H,0C20H
       DW 0D08H,0D08H,0D08H,0C08H,0A10H,0D08H,0C08H,0C20H
       DW 0F08H,0F08H,0F08H,0D08H,1010H,0F08H,0C08H,0C20H
       DW 0D08H,0D08H,0D08H,0F08H,0D08H,0C10H,0A10H,0920H
       DW 0A08H,0A08H,0A08H,0908H,0A10H,0C08H,0C08H,0C20H
       DW 0D08H,0D08H,0D08H,0C08H,0A10H,0C08H,0C08H,0C20H
       DW 0F08H,0F10H,0D08H,1010H,1010H,0F08H,0C08H,0C20H
       DW 1010H,0C10H,0F10H,1010H,1110H,1010H,0F10H,0E10H
       DW 0F10H,0E10H,0D10H,0C10H,0D40H,0020H,0004H,0F08H
       DW 1008H,1110H,1010H,0F10H,0E10H,0F10H,0E10H,0A10H
       DW 0C10H,0D20H,0008H,0D08H,0C08H,0D10H,0F10H,0F20H
       DW 0010H,0F20H,1010H,1110H,0F10H,1010H,0F10H,0D08H
       DW 0D08H,1210H,1110H,1010H,0F08H,1208H,1210H,1110H
       DW 1010H,0F10H,1030H,1110H,1008H,0F08H,0F20H,0F10H
       DW 1010H,1120H,0F10H,1410H,1310H,1108H,1008H,0F10H
       DW 0D30H,0010H,0C10H,0F10H,1110H,1310H,1408H,1108H
       DW 1008H,0F10H,0D10H,0F10H,0F08H,1010H,0F08H,0F40H
       DW 0001H

;*********************(童年)****************************;
TAB5:  DW 0A08H,0C08H,0C10H,0C08H,0A08H,0D08H,0D08H,0E08H
       DW 0D08H,0D08H,0D08H,0D08H,0C08H,0F10H,0F08H,0F08H
       DW 0F08H,0D08H,0F08H,0D08H,0C40H,0A08H,0C08H,0C10H
       DW 0C08H,0A08H,0D08H,0D08H,0E08H,0D08H,0D08H,0D08H
       DW 0D08H,0C08H,0F10H,0F08H,0F08H,0F08H,0D08H,0D08H
       DW 0F08H,1040H,1308H,1308H,1310H,1310H,1108H,1008H
       DW 0F08H,0F10H,0D08H,0D08H,0F08H,0D08H,0F08H,1008H
       DW 1008H,1008H,1008H,1008H,0F08H,1108H,1008H,1040H
       DW 1108H,1110H,1108H,1108H,1008H,1010H,0F08H,0F10H
       DW 0F08H,1008H,0F08H,0D08H,0C08H,0C08H,0C10H,0C08H
       DW 0D08H,0C08H,1008H,1108H,0F40H,0001H,0000H
       END
总原理图及元器件清单
总原理图

2.元器件清单
AT89C52,晶振,电容,电阻,排阻,按键,数码管,二极管,蜂鸣器,三极管

评分

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

查看全部评分

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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