當前位置:編程學習大全網 - 編程語言 - 單片機設計音樂播放器程序和仿真圖(用匯編語言)?急求~謝謝!!!

單片機設計音樂播放器程序和仿真圖(用匯編語言)?急求~謝謝!!!

NUM?EQU?30H

UP?EQU?P3.6

DN?EQU?P3.7

ORG?0000H

AJMPSTART;Fosc=12MHz

ORG?000BH;T0?中斷入口地址

AJMPINT_T0

ORG?001BH;T1?中斷入口地址

AJMPINT_T1

START:

MOV?SP,?#60H

MOV?TMOD,?#11H

MOV?IE,?#8AH?

MOV?IP,?#08H? ;T1中斷優先於T0中斷

MOV TH1,?#3CH

MOV TL1,?#0BH ;以上為系統初始化,T=60ms

W1: MOV P2,?#01110001B;等待提示"F" ,01110001

LCALL GETKEY

CJNE?A,?#0FFH,?W1?

MOV?A,?B

CJNEA,?#0AH,?W2

LCALLKEY_A;輸入鍵是'A',轉KEY_A

SJMP W1

W2: CJNE A,?#0BH,?W3

LCALLKEY_B;輸入鍵是'B',轉KEY_B

W3: CJNE A,?#0CH,?W4

LCALLKEY_C;輸入鍵是'C',轉KEY_C

W4: CJNE A,?#0DH,?W5

LCALLKEY_D

SJMP W1;輸入鍵是'D',轉KEY_D

W5: CJNE?A,#0EH,W6 ;下壹首

INC?NUM

MOV?A,NUM

CJNE?A,#4,W51

W51:

JC?W52

MOV?NUM,#0

W52:

MOV?A,NUM

SJMP?D0

W6: CJNE?A,#0FH,W7 ;上壹首

MOV?A,NUM

JNZ?W61

MOV?NUM,#4

W61:

DEC?NUM

MOV?A,NUM

SJMP?D0

W7:

SJMP W1

KEY_A:;從1~4按順序播放

LCALL MUSIC1?;樂曲《我和妳》

LCALL MUSIC2;樂曲《萬水千山總是情》

LCALL MUSIC3;樂曲《送別》

LCALL MUSIC4;樂曲《北京歡迎您》

RET

KEY_B:?;從1~4循環播放

T11: LCALL KEY_A

SJMP T11

RET

KEY_C:;循環播放某壹樂曲

T3: LCALL GETWORD

CJNE A,?#0FFH,?T3

MOV A,?B

D0:

JNZ?D1

SJMP E0

D1: DEC?A

JNZ?D2

SJMP E1

D2: DEC?A

JNZ?E3

SJMP E2

E0: LCALL MUSIC1;樂曲《我和妳》

SJMP E0

E1: LCALL MUSIC2;樂曲《萬水千山總是情》

SJMP E1

E2: LCALL MUSIC3;樂曲《送別》

SJMP E2

E3: LCALL MUSIC4;樂曲《北京歡迎您》

SJMP E3

RET

KEY_D:?;從某壹樂曲開始播放,播放完後停止

T2: LCALL GETWORD

CJNE A,?#0FFH,?T2

MOV A,?B

CJNE A,?#00H,?B1

SJMP C0

B1: CJNE A,?#01H,?B2

SJMP C1

B2: CJNE A,?#02H,?C3

SJMP C2

C0: LCALL MUSIC1;樂曲《我和妳》

C1: LCALL MUSIC2;樂曲?《萬水千山總是情》?

C2: LCALL MUSIC3;樂曲《送別》

C3: LCALL MUSIC4;樂曲《北京歡迎您》

RET

MUSIC1:?;第壹首《我和妳》

MOV?P2,?#00000110B ?;顯示1,00000110

MOV?R5,?#11111001B

MOV?52H,?#HIGH?TABLE10

MOV?53H,?#LOW?TABLE10

MOV?NUM,#0

LCALL?music

RET

MUSIC2:? ;第二首《萬水千山總是情》

MOV P2,?#01011011B ?;顯示2,01011011

MOV R5,?#10100100B

MOV?52H,?#HIGH?TABLE20

MOV?53H,?#LOW?TABLE20?

MOV?NUM,#1

LCALL? music

RET

MUSIC3: ?;第三首《送別》

MOV P2,?#01001111B ?;顯示3,01001111

MOV R5,?#10110000B

MOV?52H,?#HIGH?TABLE30

MOV?53H,?#LOW?TABLE30?

MOV?NUM,#2

LCALL? music

RET

MUSIC4: ;第四首《北京歡迎您》

MOV P2,?#01100110B ;顯示4,01100110

MOV R5,?#10011001B

MOV?52H,?#HIGH?TABLE40

MOV?53H,?#LOW?TABLE40?

MOV?NUM,#3

LCALL? music

RET?

music: MOV?R3,#00H ?;音樂解碼器

NEXT20:

MOV?A,P3

ORL?A,#0C0H

MOV?P3,A

MOV?A,P3

CPL?A

ANL?A,#0C0H

JZ?NEXT21

POP?ACC

POP?ACC

LJMP?W1

RET

NEXT21:

MOVA,?R3

?MOV? DPH,?52H

?MOV? DPL,?53H

?MOVC A,?@A+DPTR

?MOV? R2,?A

?JZ? STOP

?ANL? A,?#0FH

?MOV? R1,?A

?MOV? A,?R2

?SWAP? A

?ANL? A,?#0FH

?JNZ? SING

?CLR? TR0

?JMP? W11

;----------------------------------------------------------

SING:

DEC? A

MOV?22H,?A

RL? ?A

MOV?DPTR,?#TABLE00

MOVC? A,?@A+DPTR

MOV? TH0,?A

MOV? 21H,?A

MOV? A,?22H

RL? A

INC? A

MOVC? A,?@A+DPTR

MOV? TL0,?A

MOV? 20H,?A

SETB? TR0

SETB? TR1

W11:?

LCALL? DELAY3

INC? R3

LJMP? NEXT20

;-----------------------------------------------------------

STOP:

CLR? TR0

CLR? TR1

RET

;***************************************************

;定時器0中斷子程序

;***************************************************

INT_T0:?

CLR ?TR0

MOV? TL0,?20H

MOV? TH0,?21H

CPL? P3.0

SETB TR0

RETI

;***************************************************

;定時器1中斷子程序

;***************************************************

INT_T1:?

CLR?TR1

CLR?TR0

LCALL KEY_E

MOV?TH1,?#3CH

MOV?TL1,?#0BH

DJNZ? 60H,?OUT

MOV? 60H,?#20

OUT:

SETB TR1

RETI?

KEY_E:

JB P3.1,?L2 ?;中斷鍵盤檢測

LCALL DELAY2 ?;消除抖動

JB ?P3.1,?L2 ?;如果是高電平就跳到L2

JNBP3.1,?$ ?;如果仍然是低電平就執行中斷程序

MOV P2,?#0111100B ;讓LED顯示E,01111001

L3: JB P3.1,?$ ?;檢測低電平,直到低電平時才跳出該指令

LCALL DELAY2

JB P3.1,?L3

JNB?P3.1,?$ ?;如果再來壹個高電平才跳出中斷

MOV P2,R5

L2: SETB?TR0

RET

GETKEY: ;讀A?B?C?D鍵盤子程序?

SA: JB P1.0,?SB ;讀A,是高電平表示沒有按鍵,跳轉到SB

LCALL DELAY2

JB P1.0,?SA

JNB ?P1.0,?$

MOV P2,?#01110111B ;顯示A,01110111

MOV R5,?#10001000B

MOV A,?#0FFH

MOV B,?#0AH

RET

SB: JB P1.1,?C11? ;讀B,是高電平表示沒有按鍵按下,跳轉到C11

LCALL DELAY2

JB P1.1,?SB

JNB P1.1,?$

MOV P2,?#01111100B ;顯示B,01111100

MOV R5,?#10000011B

MOV A,?#0FFH

MOV B,?#0BH

RET

C11:JB P1.2,?ED1 ;讀C

LCALL DELAY2

JB ?P1.2,?C11

JNB?P1.2,?$

MOV P2,?#00111001B ;顯示C,00111001

MOV R5,?#11000110B

MOV A,?#0FFH

MOV B,?#0CH

RET

ED1:

JB P1.3,?L0 ;讀D

LCALL DELAY2

JB ?P1.3,?ED1

JNBP1.3,?$

MOV P2,?#01011110B ?;顯示D,01011110

MOV R5,?#10100001B

MOV A,?#0FFH

MOV B,?#0DH

L0: JB?UP,L01

LCALL?DELAY2

JB?UP,L01

JNB?UP,$

MOV?A,#0FFH

MOV?B,#0EH

RET

L01:

JB?DN,L02

LCALL?DELAY2

JB?DN,L02

JNB?DN,$

MOV?A,#0FFH

MOV?B,#0FH

L02:

RET

GETWORD:?;讀音樂序號子程序

S1: JB P1.4,?S2 ;讀1鍵

LCALL DELAY2

JB P1.4,?S1

JNB P1.4,?$

MOV P2,?#00000110B ;顯示1

MOV R5,?#11111001B

MOV A,?#0FFH

MOV B,?#00H

RET

S2: JB P1.5,?S3 ;讀2鍵

LCALL DELAY2

JB P1.5,?S2

JNB P1.5,?$

MOV P2,?#01011011B ;顯示2

MOV R5,?#10100100B

MOV A,?#0FFH

MOV B,?#01H

RET

S3: JB P1.6,S4 ?;讀3鍵

LCALL DELAY2

JB P1.6,S3

JNB P1.6,$

MOV P2,#01001111B ;顯示3

MOV R5,#10110000B

MOV A,#0FFH

MOV B,#02H

RET

S4: JB P1.7,?L1 ?;讀4鍵

LCALL DELAY2

JB P1.7,?S1

JNB P1.7,?$

MOV P2,?#01100110B ;顯示4

MOV R5,?#10011001B

MOV A,?#0FFH

MOV B,?#03H

L1: RET

DELAY:?;延時子程序

PUSH0;保存現場

PUSH1

MOV?0,?#0H

DELAY1:?MOV?1,?#0H

DJNZ1,?$

DJNZ0,?DELAY1

POP?1;恢復現場

POP?0

RET

DELAY2: MOV 41H,?#100 ;延時子程序2

F1: MOV 42H,?#250

DJNZ 42H,?$

DJNZ 41H,?F1

RET

DELAY3: ?;延時子程序3?

MOV? R7,?#2

W22: MOV? R4,?#125

W33: MOV? R0,?248

DJNZ? R0,?$

DJNZ? R4,?W33

DJNZ? R7,?W22

DJNZ? R1,?DELAY3

RET

TABLE00: ?;頻率表

DW?64260,64400,64524,64580?;簡碼值?低音5,?低音6,?低音7,1

DW?64684,64777,64820,64898?;?簡碼值?2,3,4,5

DW?64968,65030,65058,65110?;?簡碼值?6,7,高音1,高音

DW?65157,65178,65217;簡碼值?高音3,高音4,高音5

;--------------------------------------------------------------------

;第壹首《我和妳》

;--------------------------------------------------------------------

TABLE10:?DB?64H,82H,42H,48H

DB?54H,64H,18H

DB?44H,54H,64H,84H

DB?5CH

DB?64H,84H,44H,04H,42H

DB?54H,64H,28H

DB?54H,14H,54H,64H

DB?4CH

DB?98H,88H

DB?98H,48H

DB?64H,24H,64H,84H

DB?5CH

DB?64H,82H,42H,48H

DB?54H,64H,?28H

DB?54H,14H,54H,34H

DB?4CH

DB?00H

;--------------------------------------------------------------------

;第二首《萬水千山總是情》

;--------------------------------------------------------------------

TABLE20: DB?64H,74H,84H,04H,82H,94H,84H,6CH

DB?54H,44H,04H,62H,54H,44H,2CH

DB?24H,18H,?44H,54H,64H,84H,94H,64H,5CH

DB?64H,74H,84H,04H,82H,94H,84H,6CH

DB?54H,44H,04H,62H,54H,44H,2CH

DB?24H,18H,?44H,64H,54H,04H,42H,24H,44H,4CH

DB?64H,84H,9CH,0A4H,94H,74H,84H,04H,92H,8CH,64H,88H

DB?64H,84H,9CH,0A4H,0A4H,94H,84H,64H,5CH

DB?64H,74H,?84H,04H,82H,94H,84H,6CH

DB?54H,44H,04H,62H,54H,44H,2CH

DB?24H,18H,44H,64H,54H,42H,24,44H,4CH

DB?00H

;--------------------------------------------------------------------

;第三首《送別》

;--------------------------------------------------------------------

TABLE30:DB?84H,62H,82H,0B8H

DB?94H,0B2H,92H,88H

DB?84H,42H,52H,64H,52H,44H

DB?5CH

DB?84H,62H,82H,0B4H,04H,82H

DB?94H,0B4H,?88H

DB?84H,52H,62H,74H,04H,32H

DB?4CH

DB?94H,0B4H,0B8H

DB?0A4H,92H,0A2H,0B8H

DB?92H,0A2H,0B2H,92H,92H,82H,62H,42H

DB?5CH

DB?84H,62H,82H,0B4H,04H,0A2H

DB?94H,0B4H,88H

DB?84H,52H,62H,74H,04H,32H

DB?4CH

DB?00H

;--------------------------------------------------------------------

;第四首《北京歡迎您》

;--------------------------------------------------------------------

TABLE40:DB?62H,82H,62H,52H,12H

DB?62H,52H,12H,64H

DB?62H,52H,22H,42H?

DB?62H,54H

DB?52H,42H,22H,42H

DB?52H,62H,82H,52H

DB?62H,92H,82H,12H

DB?52H,44H

DB?52H,42H,22H,42H

DB?52H,62H,82H,52H

DB?62H,92H,82H,82H

DB?68H

DB?52H,62H,52H,42H

DB?82H,92H,64H

DB?22H,62H,64H

DB?54H,64H

DB?64H,84H

DB?0B2H,82H,94H

DB?02H,92H,82H,62H

DB?62H,?82H,88H

DB?00H

END

  • 上一篇:急求翻譯
  • 下一篇:我該怎麽做?我要怎麽做?悶.!
  • copyright 2024編程學習大全網