新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 邊顯示滾動漢字邊播放音樂的匯編程序

        邊顯示滾動漢字邊播放音樂的匯編程序

        作者: 時間:2012-08-18 來源:網絡 收藏
        //------------------------------------------
        //51hei-5開發板測試程序.ASM
        // 音樂播放器>>
        //硬件說明:12M晶振/MCU:89C51
        //編寫人:李春起
        //編定日期:2009.11.24
        //修改日志:2010.01.05
        // 2010.01.11 加暫停功能
        // 2010.01.16 加第三首歌曲
        // 2010.01.17 加第四首歌曲
        // 2010.01.18 加第五首歌曲
        // 2010.02.19 去除休止時雜聲
        // 2010.03.02 定時器T1中斷顯示
        //------------------------------------------
        //已用寄存器:
        //R0 R1 R2 R4 R5 R6 R7
        //-------------------------------------------
        YY EQU P3.1 ;音樂輸出口
        ORG 0000H
        LJMP MAIN ;跳到主函數
        ORG 000BH ;定時器入口
        LJMP T00 ;跳到定時器中斷服務子程序
        ORG 001BH
        LJMP T11
        ORG 0020H ;程序存放起始
        MAIN:
        MOV TMOD,#11H
        MOV IP,#08H
        // MOV IE,#08AH
        MOV TH0,R0
        MOV TL0,R1
        MOV TH1,#15H
        MOV TL1,#0A0H
        SETB ET0
        CLR TR0
        CLR TR1
        SETB ET1
        SETB EA
        SETB YY
        MOV R7,#00H ;歌曲選擇
        MOV 30H,#00H
        MOV 31H,#24
        MOV 32H,#00H ;顯示掃描數
        MOV 40H,#40
        MOV R3,#00H

        //========笑臉====================
        MAKK: ACALL DELAY1
        MAIN0:
        MOV A,R7
        CJNE A,#00H,LMA1
        CLR TR0
        XIAN00:
        MOV A,30H
        MOV DPTR,#TAB10
        MOVC A,@A+DPTR
        MOV P0,A
        MOV A,30H
        MOV DPTR,#TAB11
        MOVC A,@A+DPTR
        MOV P1,A
        MOV A,30H
        MOV DPTR,#TAB12
        MOVC A,@A+DPTR
        MOV P2,A
        MA0D:MOV 54H,#20
        JB P3.2,MA0D1
        ACALL WDELAY
        INC R7
        CJNE R7,#04H,LMA0
        MOV R7,#00H
        LJMP LMA0
        MA0D1:DJNZ 54H,MA0D1
        MOV P0,#0FFH
        MOV P1,#0FH
        MOV P2,#00H
        DJNZ 31H,XIAN00
        MOV 31H,#24
        INC 30H
        MOV A,30H
        CJNE A,#13,XIAN01
        DJNZ 41H,XIA01
        MOV 41H,#20
        LJMP XIAN01
        XIA01:MOV 30H,#0
        LJMP XIAN00
        XIAN01:
        CJNE A,#25, ENDD0
        MOV 41H,#40
        MOV 30H,#0
        ENDD0:LJMP XIAN00
        LMA1:LJMP MAIN1
        LMA0:LJMP MAIN0

        //========第一首===========================
        MAIN1:SETB TR1
        MOV P0,#0FFH
        MOV P1,#0FH
        MOV P2,#00H
        MOV 30H,#00H //奏第一首循環
        MOV A,R7
        CJNE A,#01H,MAIN2;下一首
        LOOP:SETB TR0
        MOV A,30H
        MOV DPTR,#TAB1
        MOVC A,@A+DPTR ;取定時器高八位數據
        JZ RERT
        LOO1: MOV R0,A
        MOV A,30H
        MOV DPTR,#TAB2
        MOVC A,@A+DPTR ;取定時器低八位數據
        MOV R1,A
        MOV TH0,R0
        MOV TL0,R1
        ANL A,R0
        CJNE A,#0FFH,NCA ;遇0FFH歌曲結束
        LJMP ENDD
        NCA: MOV A,30H
        MOV DPTR,#TAB3
        MOVC A,@A+DPTR ;取節拍時值
        MOV R2,A
        DELA:ACALL DELAY100
        DEL1:DJNZ R2,DELA
        INC 30H
        LJMP LOOP

        RERT:CLR TR0 ;休止
        SETB YY
        LJMP LOO1

        ENDD:CLR TR0
        ACALL DELAY1000
        LJMP MAIN1 ;奏完返回

        //========第二首===========================
        MAIN2:
        MOV P0,#0FFH
        MOV P1,#0FH
        MOV P2,#00H
        MOV 30H,#00H //奏第二首循環
        MOV A,R7
        CJNE A,#02H,LMAIN0
        LOOOP:SETB TR0
        MOV A,30H
        MOV DPTR,#TAB4
        MOVC A,@A+DPTR ;取定時器高八位數據
        JZ RERT1
        LOOO1: MOV R0,A
        MOV A,30H
        MOV DPTR,#TAB5
        MOVC A,@A+DPTR ;取定時器低八位數據
        MOV R1,A
        MOV TH0,R0
        MOV TL0,R1
        ANL A,R0
        CJNE A,#0FFH,NCA1 ;遇0FFH歌曲結束
        LJMP ENDD1
        NCA1: MOV A,30H
        MOV DPTR,#TAB6
        MOVC A,@A+DPTR ;取節拍時值
        MOV R2,A
        DELA1:ACALL DELAY100
        DEL11:DJNZ R2,DELA1
        INC 30H
        LJMP LOOOP

        RERT1:CLR TR0 ;休止
        SETB YY
        LJMP LOOO1

        ENDD1:CLR TR0
        ACALL DELAY1000
        LJMP MAIN1 ;奏完返回
        LMAIN0:LJMP MAIN4

        //=======第三首==================================
        MAIN4:MOV P0,#0FFH
        MOV P1,#0FH
        MOV P2,#00H
        MOV 30H,#00H //奏第三首循環
        MOV A,R7
        CJNE A,#03H,LMAIN4
        LOO1P:SETB TR0
        MOV A,30H
        MOV DPTR,#TAB13
        MOVC A,@A+DPTR ;取定時器高八位數據
        JZ RERT2
        LOO11: MOV R0,A
        MOV A,30H
        MOV DPTR,#TAB14
        MOVC A,@A+DPTR ;取定時器低八位數據
        MOV R1,A
        MOV TH0,R0
        MOV TL0,R1
        ANL A,R0
        CJNE A,#0FFH,NCA4 ;遇0FFH歌曲結束
        LJMP ENDD4
        NCA4: MOV A,30H
        MOV DPTR,#TAB15
        MOVC A,@A+DPTR ;取節拍時值
        MOV R2,A
        DELA31:ACALL DELAY100
        DEL31:DJNZ R2,DELA31
        INC 30H
        LJMP LOO1P

        RERT2:CLR TR0 ;休止
        SETB YY
        LJMP LOO11

        ENDD4:CLR TR0
        ACALL DELAY1000
        LJMP MAIN4 ;奏完返回
        LMAIN4:LJMP MAIN5

        上一頁 1 2 3 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 黄陵县| 噶尔县| 虎林市| 广宁县| 开江县| 靖宇县| 淅川县| 云和县| 晋城| 马龙县| 湟中县| 黄梅县| 博白县| 张掖市| 六安市| 福州市| 杭州市| 卓资县| 芮城县| 承德市| 土默特右旗| 满城县| 延川县| 濮阳县| 镇赉县| 巴塘县| 泰和县| 宜川县| 临沭县| 曲松县| 鄂伦春自治旗| 苏尼特右旗| 西畴县| 福清市| 廉江市| 曲松县| 桦川县| 宁乡县| 巩留县| 宽甸| 壶关县|