close

標題:

8051計時計數器 音樂

發問:

可幫忙把TABLE內容音 改成 少女的祈禱或蘭花草嗎??感謝!!!;聲音產生程式LOEQU20HHIEQU21H ORG0H;執行主程式JMPSTARTORG0BH;T0_INT 中斷向量JMPT0_INT;執行 T0_INT 中斷副程式START:MOVSP,#5FH;把堆疊 SP 移到 RAM 位址 5FH MOV IE,#10000010B;打開總開關、Timer 0 中斷開關MOVTMOD,#00000001B;設定Timer 0 為 Mode 1REPEAT: MOV ... 顯示更多 可幫忙把TABLE內容音 改成 少女的祈禱或蘭花草嗎?? 感謝!!! ;聲音產生程式 LOEQU20H HIEQU21H ORG0H;執行主程式 JMPSTART ORG0BH;T0_INT 中斷向量 JMPT0_INT;執行 T0_INT 中斷副程式 START:MOVSP,#5FH;把堆疊 SP 移到 RAM 位址 5FH MOV IE,#10000010B;打開總開關、Timer 0 中斷開關 MOVTMOD,#00000001B;設定Timer 0 為 Mode 1 REPEAT: MOV DPTR,#TABLE MOVR7,#0;資料庫偏移值 MOVR3,#7;共 7 個音 LOOP:MOV A,R7 MOVCA,@A+DPTR MOVHI,A MOVTH0,A; TH0載入 INCR7 MOV A,R7 MOVCA,@A+DPTR MOVLO,A MOVTL0,A; TL0載入 SETBTR0;啟動 Timer 0 INCR7 MOVA,R7 MOVCA,@A+DPTR MOVR2,A;節拍 CALLDELAY INCR7 CLRTR0;關閉 Timer 0 DJNZR3,LOOP JMPREPEAT ;======================================================= DELAY:; 延遲 R2*50*125*2us =R2*0.0125 秒 D1:MOVR1,#50 D2:MOVR0,#125 DJNZR0,$ DJNZR1,D2 DJNZR2,D1 RET ;======================================================= T0_INT:; 中斷副程式 CLRTR0;關閉 Timer 0 PUSHPSW; PSW 存入堆疊 PUSHACC; A 存入堆疊 MOVTL0,LO;TL0重新載入 MOVTH0,HI;TH0重新載入 CPLP1.0;反相 P1.0 POPACC;自堆疊取回 A POPPSW;自堆疊取回 PSW SETBTR0;啟動 Timer 0 RETI;中斷副程式結束 ;====================================================== TABLE: DW64580; Do,65536 – 956 = 64580, – 956 DB40; 1 拍 DW64684; Re DB40; 1 拍 DW64777; Mi DB40; 1 拍 DW64820; Fa DB40; 1 拍 DW64898; So DB40; 1 拍 DW64968; La DB40; 1 拍 DW65030; Si DB40; 1 拍 ;======================================================END

最佳解答:

改你的程式比較麻煩,不嫌棄的話,我寫過的蘭花草,請服用 硬體線路,只要在8051第四腳用電晶體推喇叭輸出即可 BUZZ REG P0.3 ;buzzer output TEMPO_LO EQU 7FH TEMPO_HI EQU 7EH ORG 0000H JMP START ORG 000BH JMP T0INT ORG 040H START: MOV SP, #2FH SETB BUZZ MOV TMOD,#00000001B MOV IE,#10000010B MOV DPTR,#T_TABLE BEGIN: MOV R4,#0 LOOP: MOV A,R4 CALL SONG JZ SONG_END MOV R2,A ANL A,#0FH MOV R3,A MOV A,R2 ANL A,#F0H SWAP A JZ SKIP DEC A RL A MOV R2,A MOVC A,@A+DPTR MOV TH0,A MOV TEMPO_HI,A MOV A,R2 INC A MOVC A,@A+DPTR MOV TL0,A MOV TEMPO_LO,A SETB TR0 SKIP: CALL TEMPO_DELAY CLR TR0 INC R4 JMP LOOP SONG_END: SETB BUZZ CALL WAIT_1SEC JMP BEGIN WAIT_1SEC: MOV R5, #200 WAIT1 LCALL DELAY_5MS DJNZ R5, WAIT1 RET TEMPO_DELAY: MOV R5, #37 $1 LCALL DELAY_5MS DJNZ R5, $1 DJNZ R3,TEMPO_DELAY RET DELAY_5MS: MOV R6, #0AH DELAY1 MOV R7, #FAH $2 DJNZ R7, $2 DJNZ R6, DELAY1 RET ; value,note,tempo,Freq, timer T_TABLE: DW 65536-1000000/2/330 ; 1 = 3_ 1/4 330Hz DW 65536-1000000/2/349 ; 2 = 4_ 1/2 349Hz DW 65536-1000000/2/392 ; 3 = 5_ 3/4 392Hz DW 65536-1000000/2/440 ; 4 = 6_ 1 440Hz DW 65536-1000000/2/494 ; 5 = 7_ 1 1/4 494Hz DW 65536-1000000/2/523 ; 6 = 1 Do 1 1/2 523Hz DW 65536-1000000/2/587 ; 7 = 2 Re 1 3/4 587Hz DW 65536-1000000/2/659 ; 8 = 3 Mi 2 659Hz DW 65536-1000000/2/698 ; 9 = 4 Fa 2 1/4 698Hz DW 65536-1000000/2/784 ; A = 5 So 2 1/2 784Hz DW 65536-1000000/2/880 ; B = 6 La 2 3/4 880Hz DW 65536-1000000/2/988 ; C = 7 Ti 3 988Hz DW 65536-1000000/2/1046; D = 1^ 3 1/4 1046Hz DW 65536-1000000/2/1175; E = 2^ 3 1/2 1175Hz DW 65536-1000000/2/1318; F = 3^ 3 3/4 1318Hz ; 0 = dumb 4 0Hz SONG: ;Lan Hau Chau 蘭花草 DB 42H,82H,82H,82H,86H,72H,62H,72H,62H,52H,48H,B2H,B2H,B2H,B2H,B6H DB A2H,82H,A2H,A2H,92H,88H,82H,B2H,B2H,A2H,86H,72H,62H,72H,62H,52H DB 46H,12H,12H,62H,62H,52H,46H,82H,72H,62H,52H,32H,48H,00H T0INT: MOV TH0,TEMPO_HI MOV TL0,TEMPO_LO CPL BUZZ RETI

其他解答:

這因該要找音樂系的把.

aa.jpg

 

此文章來自奇摩知識+如有不便請留言告知

D4CDE60C03A2F1BC

arrow
arrow
    創作者介紹
    創作者 pxrnjl7 的頭像
    pxrnjl7

    百科全書

    pxrnjl7 發表在 痞客邦 留言(0) 人氣()