![]() |
按你電路看,BZ和單片機之間應該接個3級管,不然帶不動,然后BZ的那個電阻應該去掉,不知道你單片機型號,你要用NPN管的話,沒有推挽輸出功能的單片機需要上拉電阻。用PNP管的話,要接VCC那頭,并且驅動蜂鳴器需要 CLR P1.5 |
P1.5總給高電平是不會響的,要不斷改變狀態,可以把SETB P1.5改為CPL P1.5 |
播放 祝你平安 ORG 0000H LJMP START ORG 000BH INC 20H ;中斷服務,中斷計數器加1 MOV TH0,#0D8H MOV TL0,#0EFH ;12M晶振,形成10毫秒中斷 RETI START: MOV SP,#50H MOV TH0,#0D8H MOV TL0,#0EFH MOV TMOD,#01H MOV IE,#82H MUSIC0: NOP MOV DPTR,#DAT ;表頭地址送DPTR MOV 20H,#00H ;中斷計數器清0 MOV B,#00H ;表序號清0 MUSIC1: NOP CLR A MOVC A,@A+DPTR ;查表取代碼 JZ END0 ;是00H,則結束 CJNE A,#0FFH,MUSIC5 LJMP MUSIC3 MUSIC5: NOP MOV R6,A INC DPTR MOV A,B MOVC A,@A+DPTR ;取節拍代碼送R7 MOV R7,A SETB TR0 ;啟動計數 MUSIC2: NOP CPL P3.3 MOV A,R6 MOV R3,A LCALL DEL MOV A,R7 CJNE A,20H,MUSIC2 ;中斷計數器(20H)=R7否? ;不等,則繼續循環 MOV 20H,#00H ;等于,則取下一代碼 INC DPTR ; INC B LJMP MUSIC1 MUSIC3: NOP CLR TR0 ;休止100毫秒 MOV R2,#0DH MUSIC4: NOP MOV R3,#0FFH LCALL DEL DJNZ R2,MUSIC4 INC DPTR LJMP MUSIC1 END0: NOP MOV R2,#64H ;歌曲結束,延時1秒后繼續 MUSIC6: MOV R3,#00H LCALL DEL DJNZ R2,MUSIC6 LJMP MUSIC0 DEL: NOP DEL3: MOV R4,#02H DEL4: NOP DJNZ R4,DEL4 NOP DJNZ R3,DEL3 RET NOP DAT: db 26h,20h,20h,20h,20h,20h,26h,10h,20h,10h,20h,80h,26h,20h,30h,20h db 30h,20h,39h,10h,30h,10h,30h,80h,26h,20h,20h,20h,20h,20h,1ch,20h db 20h,80h,2bh,20h,26h,20h,20h,20h,2bh,10h,26h,10h,2bh,80h,26h,20h db 30h,20h,30h,20h,39h,10h,26h,10h,26h,60h,40h,10h,39h,10h,26h,20h db 30h,20h,30h,20h,39h,10h,26h,10h,26h,80h,26h,20h,2bh,10h,2bh,10h db 2bh,20h,30h,10h,39h,10h,26h,10h,2bh,10h,2bh,20h,2bh,40h,40h,20h db 20h,10h,20h,10h,2bh,10h,26h,30h,30h,80h,18h,20h,18h,20h,26h,20h db 20h,20h,20h,40h,26h,20h,2bh,20h,30h,20h,30h,20h,1ch,20h,20h,20h db 20h,80h,1ch,20h,1ch,20h,1ch,20h,30h,20h,30h,60h,39h,10h,30h,10h db 20h,20h,2bh,10h,26h,10h,2bh,10h,26h,10h,26h,10h,2bh,10h,2bh,80h db 18h,20h,18h,20h,26h,20h,20h,20h,20h,60h,26h,10h,2bh,20h,30h,20h db 30h,20h,1ch,20h,20h,20h,20h,80h,26h,20h,30h,10h,30h,10h,30h,20h db 39h,20h,26h,10h,2bh,10h,2bh,20h,2bh,40h,40h,10h,40h,10h,20h,10h db 20h,10h,2bh,10h,26h,30h,30h,80h,00H END |
BUZZER BIT P1.5 |