音樂盒:通過蜂鳴器可以唱出一首簡易的歌曲,并且每個音符用相應(yīng)的數(shù)字在數(shù)碼管上顯示出來,比如“do”用“1”來表示。
本人基礎(chǔ)略差,只能弄出歌曲的匯編,還不懂?dāng)?shù)碼管的顯示,應(yīng)如何修改才能顯示第二個條件?
小弟感激不盡。!
OUT BIT P2.3 //該引腳接蜂鳴器 ORG 0000H LJMP START ORG 000BH INC 20H ;中斷服務(wù),中斷計數(shù)器加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 ;中斷計數(shù)器清0 MOV B,#00H ;表序號清0 MUSIC1: NOP CLR A MOVC A,@A+DPTR ;查表取代碼 JZ END0 ;是00H,則結(jié)束 CJNE A,#0FFH,MUSIC5 LJMP MUSIC3 MUSIC5: NOP MOV R6,A INC DPTR MOV A,B MOVC A,@A+DPTR ;取節(jié)拍代碼送R7 MOV R7,A SETB TR0 ;啟動計數(shù) MUSIC2: NOP CPL OUT MOV A,R6 MOV R3,A LCALL DEL MOV A,R7 CJNE A,20H,MUSIC2 ;中斷計數(shù)器(20H)=R7否? ;不等,則繼續(xù)循環(huán) 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 ;歌曲結(jié)束,延時1秒后繼續(xù) 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
|