軟件系統程序:
ORG 0000H
AJMP LOOOOP
ORG 000BH
AJMP TIM0
ORG 001BH
RETI
ORG 0023H
LOOOOP: MOV A,#01H
LOOOP: MOV P1,#3FH
MOV P2,A
RL A
MOV R2,#0FFH
DELAY0: MOV R3,#0FFH
DJNZ R3,$
MOV R4,#0FFH
DJNZ R4,$
DJNZ R2,DELAY0
JNB P3.3,START
LJMP LOOOP
START: MOV P1,#06H
MOV R5,#00H ;初始化
MOV TMOD,#00010001B
MOV IE,#10101010B
MOV DPTR,#TAB2 ;裝第一首歌
MOV 30H,DPL ;DPTR低8位送30H暫存
MOV 31H,DPH ;DPTR高8位送31H暫存
START1: INC R4 ;產生8位隨機數
MOV A,#01010101B
MOV B,R4
MUL AB ;8位隨機數由P2口輸出
MOV P2,A
MOV DPL,30H
MOV DPH,31H
MOV A,#00H
MOVC A,@A+DPTR ;查表
MOV R0,A ;音符數據送R0嶄存
MOV A,#00H
INC DPTR
MOVC A,@A+DPTR ;查表
MOV R1,A ;節拍數據送R1嶄存
INC DPTR
MOV 30H,DPL
MOV 31H,DPH
CJNE A,#01H,ELECT ;一首歌沒結束轉ELECT
INC R5
LJMP KEYWORK ;結束歌曲計數器加1
ELECT: JZ START ;所有歌曲結束轉START循環
MOV A,R0
JNZ SING
CLR TR0
SETB P3.7
LOOP1: ACALL DELAY ;調用延時子程序
DJNZ R1,LOOP1
SJMP START1
SING: MOV DPTR,#TAB1 ;音符表首址送DPTR
DEC R0 ;計算音符
MOV A,R0
MOV B,#02H
MUL AB
MOV R0,A
MOVC A,@A+DPTR ;查表
MOV 21H,A
INC DPTR
MOV A,R0
MOVC A,@A+DPTR
MOV 20H,A
MOV TL0,20H
MOV TH0,21H
SETB TR0 ;開T0定時器
LOOP2: ACALL DELAY
DJNZ R1,LOOP2
AJMP START1
TIM0: MOV TL0,20H
MOV TH0,21H
CPL P3.7
RETI ;中斷返回
DELAY: MOV R2,#70
DELAY1: MOV R3,#252
DJNZ R3,$
JNB P3.3,AGAIN ;重復正播放的曲子
JNB P3.4,FORM ;上一曲開關按下轉FORM
JNB P3.5,NEXT ;下一曲開關按下轉NEXT
DJNZ R2,DELAY1
RET
AGAIN: JNB P3.3,$ ;等待鍵釋放
LJMP KEYWORK
FORM: CLR EA ;關中斷
JNB P3.4,$ ;等待鍵釋放
CJNE R5,#00H,ZERO ;不是第一首歌曲轉ZER0
MOV R5,#04H ;是第一首將最后一首歌曲裝入歌曲計數器
SJMP KEYWORK
ZERO: DEC R5 ;歌曲向上進一首
SJMP KEYWORK
NEXT: CLR EA
JNB P3.5,$
CJNE R5,#04H,LAST
MOV R5,#00H
LJMP KEYWORK
LAST: INC R5 ;歌曲下翻一首
LJMP KEYWORK
KEYWORK: MOV DPTR,#TAB ;將歌曲排列表裝入DPTR
MOV A,R5 ;將R5的內容送A
RL A
SETB EA ;開中斷
JMP @A+DPTR ;根據A的內容轉向不同歌曲
TAB: AJMP MUSIC2
AJMP MUSIC3
AJMP MUSIC4
AJMP MUSIC5
MUSIC2: MOV DPTR,#TAB2 ;第2首歌曲首址送DPTR
MOV P1,#06H
GONG: MOV 30H,DPL
MOV 31H,DPH
AJMP START1
MUSIC3: MOV DPTR,#TAB3
MOV P1,#5BH
SJMP GONG
MUSIC4: MOV DPTR,#TAB4
MOV P1,#4FH
SJMP GONG
MUSIC5: MOV DPTR,#TAB5
MOV P1,#66H
SJMP GONG
;********************(音符表)**********************;
TAB1: DW 64021,64185,64331,64400,64524,64632,64732
DW 64777,64860,64934,64968,65030,65085,65134
DW 65157,65198,65235,65252,65283,65310,65335
;**********************(因為愛情)*************************;
TAB2: DW 0910H,0A08H,0C08H,0C08H,0A18H,0010H,0C08H,0A08H
DW 0908H,0C08H,0C20H,0D08H,0E08H,0F08H,0F08H,0F08H
DW 0E08H,0F18H,0E04H,0E08H,0E08H,0C08H,0A08H,0A20H
DW 0C08H,0A08H,0C08H,0D08H,0D18H,0C08H,0D08H,0C08H
DW 0C08H,0808H,0820H,0608H,0808H,0A08H,0908H,0608H
DW 0A08H,0908H,0608H,0A08H,0908H,0608H,0D10H,0C20H
DW 0001H
;*********************(蘭花草)***********************;
TAB3: DW 0608H,0A08H,0A08H,0A08H,0A18H,0908H,0808H,0908H
DW 0808H,0708H,0620H,0D08H,0D08H,0D08H,0D08H,0D18H
DW 0C08H,0A08H,0C08H,0C08H,0B08H,0A20H,0A08H,0D08H
DW 0D08H,0C08H,0A18H,0908H,0808H,0908H,0808H,0708H
DW 0610H,0310H,0308H,0808H,0808H,0708H,0618H,0A08H
DW 0908H,0808H,0708H,0508H,0620H,0908H,0808H,0708H
DW 0508H,0640H,0001H
;*********************(我只在乎你)*****************************;
TAB4: DW 0A08H,0A08H,0A08H,0908H,0A10H,0C08H,0C08H,0C20H
DW 0D08H,0D08H,0D08H,0C08H,0A10H,0D08H,0C08H,0C20H
DW 0F08H,0F08H,0F08H,0D08H,1010H,0F08H,0C08H,0C20H
DW 0D08H,0D08H,0D08H,0F08H,0D08H,0C10H,0A10H,0920H
DW 0A08H,0A08H,0A08H,0908H,0A10H,0C08H,0C08H,0C20H
DW 0D08H,0D08H,0D08H,0C08H,0A10H,0C08H,0C08H,0C20H
DW 0F08H,0F10H,0D08H,1010H,1010H,0F08H,0C08H,0C20H
DW 1010H,0C10H,0F10H,1010H,1110H,1010H,0F10H,0E10H
DW 0F10H,0E10H,0D10H,0C10H,0D40H,0020H,0004H,0F08H
DW 1008H,1110H,1010H,0F10H,0E10H,0F10H,0E10H,0A10H
DW 0C10H,0D20H,0008H,0D08H,0C08H,0D10H,0F10H,0F20H
DW 0010H,0F20H,1010H,1110H,0F10H,1010H,0F10H,0D08H
DW 0D08H,1210H,1110H,1010H,0F08H,1208H,1210H,1110H
DW 1010H,0F10H,1030H,1110H,1008H,0F08H,0F20H,0F10H
DW 1010H,1120H,0F10H,1410H,1310H,1108H,1008H,0F10H
DW 0D30H,0010H,0C10H,0F10H,1110H,1310H,1408H,1108H
DW 1008H,0F10H,0D10H,0F10H,0F08H,1010H,0F08H,0F40H
DW 0001H
;*********************(童年)****************************;
TAB5: DW 0A08H,0C08H,0C10H,0C08H,0A08H,0D08H,0D08H,0E08H
DW 0D08H,0D08H,0D08H,0D08H,0C08H,0F10H,0F08H,0F08H
DW 0F08H,0D08H,0F08H,0D08H,0C40H,0A08H,0C08H,0C10H
DW 0C08H,0A08H,0D08H,0D08H,0E08H,0D08H,0D08H,0D08H
DW 0D08H,0C08H,0F10H,0F08H,0F08H,0F08H,0D08H,0D08H
DW 0F08H,1040H,1308H,1308H,1310H,1310H,1108H,1008H
DW 0F08H,0F10H,0D08H,0D08H,0F08H,0D08H,0F08H,1008H
DW 1008H,1008H,1008H,1008H,0F08H,1108H,1008H,1040H
DW 1108H,1110H,1108H,1108H,1008H,1010H,0F08H,0F10H
DW 0F08H,1008H,0F08H,0D08H,0C08H,0C08H,0C10H,0C08H
DW 0D08H,0C08H,1008H,1108H,0F40H,0001H,0000H
END
總原理圖及元器件清單
總原理圖
2.元器件清單
AT89C52,晶振,電容,電阻,排阻,按鍵,數碼管,二極管,蜂鳴器,三極管
|