求51单片机 数字音乐盒 汇编语言代码
求51单片机数字音乐盒汇编语言代码及电路图要用开关控制,播放两首以上的音乐。因为是上机实验,需要能编译实现,给老师看的。不是写报告。...
求51单片机 数字音乐盒 汇编语言代码及电路图
要用开关控制,播放两首以上的音乐。
因为是上机实验,需要能编译实现,给老师看的。不是写报告。 展开
要用开关控制,播放两首以上的音乐。
因为是上机实验,需要能编译实现,给老师看的。不是写报告。 展开
2个回答
展开全部
Z8279 EQU 8701H
D8279 EQU 8700H
LO EQU 30H
HI EQU 31H
ORG 0000H
AJMP START
ORG 000BH
LJMP T0_INT
START:
MOV SP,#60H
MOV P3,#0FFH
MOV TMOD,#00000000B
MOV IE,#10000010B
LCALL F8279 ;;8279的初始化
LCALL LO_KEY ;;判断是否有下压键
PAN1:
MOV DPTR,Z8279
MOVX A,@DPTR
ANL A,#3FH
MOV R2,A ; ;保存键值
ANL A,#01H ;;键值1
JNZ S_1
JZ P_1
S_1:
LCALL SONG_1
P_1:
MOV A,R2
ANL A,#02H ;;键值2
JNZ S_2
JZ P_2
S_2:
LCALL SONG_2
P_2
MOV A,R2
ANL A,#03H ;;键值3
JNZ S_3
JZ P_3
S_3:
LCALL SONG_3
P_3
MOV A,R2
ANL A,#04H ;;键值4
JNZ S_4
JZ P_4
S_4
LCALL SONG_4
P_4
MOV A,R2
ANL A,#05H ;;键值5
JNZ S_5
JZ PAN1
S_5:
LCALL SONG_5
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
SONG_1: ;//歌曲1
MOV R4,#15
LOOP1:
LCALL VALUE1
SETB TR0
MOV R5,#20
LCALL DELAY
CLR TR0
MOV R5,#20
LCALL DELAY
LCALL P_KEY
DJNZ R4,LOOP1
LCALL SONG_2
RET
SONG_2: ;//歌曲2
MOV R4,#15
LOOP2:
LCALL VALUE1
SETB TR0
MOV R5,#20
LCALL DELAY
CLR TR0
MOV R5,#20
LCALL DELAY
LCALL P_KEY
DJNZ R4,LOOP2
LCALL SONG_3
RET
SONG_3: ;//歌曲3
MOV R4,#15
LOOP3:
LCALL VALUE1
SETB TR0
MOV R5,#20
LCALL DELAY
CLR TR0
MOV R5,#20
LCALL DELAY
LCALL P_KEY
DJNZ R4,LOOP3
LCALL SONG_4
RET
SONG_4: ;//歌曲4
MOV R4,#15
LOOP4:
LCALL VALUE1
SETB TR0
MOV R5,#20
LCALL DELAY
CLR TR0
MOV R5,#20
LCALL DELAY
LCALL P_KEY
DJNZ R4,LOOP4
LCALL SONG_5
RET
SONG_5: ;//歌曲5
MOV R4,#15
LOOP5:
LCALL VALUE1
SETB TR0
MOV R5,#20
LCALL DELAY
CLR TR0
MOV R5,#20
LCALL DELAY
LCALL P_KEY
DJNZ R4,LOOP5
LCALL SONG_1
RET
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
VALUE1: ;//歌曲1的频率设置
MOV DPTR,#FREH1
MOV A,R4
MOVC A,@A+DPTR
MOV HI,A
MOV DPTR,#FREL1
MOV A,R4
MOVC A,@A+DPTR
MOV LO,A
MOV R4,#1*****************************************
RET
VALUE2: ;/;/歌曲2的频率设置
MOV DPTR,#FREH2
MOV A,R4
MOVC A,@A+DPTR
MOV HI,A
MOV DPTR,#FREL2
MOV A,R4
MOVC A,@A+DPTR
MOV LO,A
MOV R4,#1
RET
VALUE3: ;//歌曲3的频率设置
MOV DPTR,#FREH3
MOV A,R4
MOVC A,@A+DPTR
MOV HI,A
MOV DPTR,#FREL3
MOV A,R4
MOVC A,@A+DPTR
MOV LO,A
MOV R4,#1
RET
VALUE4: ;//歌曲4的频率设置
MOV DPTR,#FREH4
MOV A,R4
MOVC A,@A+DPTR
MOV HI,A
MOV DPTR,#FREL4
MOV A,R4
MOVC A,@A+DPTR
MOV LO,A
MOV R4,#1
RET
VALUE5: ;//歌曲5的频率设置
MOV DPTR,#FREH5
MOV A,R4
MOVC A,@A+DPTR
MOV HI,A
MOV DPTR,#FREL5
MOV A,R4
MOVC A,@A+DPTR
MOV LO,A
MOV R4,#1
RET
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
T0_INT:
MOV TL0,LO
MOV TH0,HI
CPL P3.4
RETI
DELAY:
MOV R6,#50
D1:
MOV R7,#100
DJNZ R7,$
DJNZ R6,D1
DJNZ R5,DELAY
RET
F8279:
MOV DPTR,Z8279
MOV A,#10H
MOVX @DPTR,A
MOV A,#34H
MOVX @DPTR,A
MOV A,#0D1H
MOVX @DPTR,A
LCALL DELAY
MOV A,#80H
MOVX @DPTR,A
MOV A,#40H
MOVX @DPTR,A
RET
LO_KEY:
MOV DPTR,Z8279
MOVX A,@DPTR
ANL A,#0FH
JZ LO_KEY
RET
P_KEY:
MOV DPTR,Z8279
MOVX A,@DPTR
ANL A,#0FH
JNZ SIGN1
JZ SIGN2
SIGN1:
LJMP PAN1
SIGN2:
RET
FREH1 DB 0,226,229,232,233,236,238,240,241,242,244,244,246,247,248
FREL1 DB 0,4,13,10,20,3,8,6,2,23,5,26,1,4,3
FREH2 DB 0,236,229,232,233,226,230,240,231,246,244,234,236,247,248
FREL2 DB 0,4,13,10,20,3,8,6,2,23,5,26,1,4,3
FREH3 DB 0,226,229,232,233,236,238,240,241,242,244,244,246,247,248
FREL3 DB 0,4,13,10,20,3,8,6,2,23,5,26,1,4,3
FREH4 DB 0,226,229,232,233,236,238,240,241,242,244,244,246,247,248
FREL4 DB 0,4,13,10,20,3,8,6,2,23,5,26,1,4,3
FREH5 DB 0,226,229,232,233,236,238,240,241,242,244,244,246,247,248
FREL5 DB 0,4,13,10,20,3,8,6,2,23,5,26,1,4,3
END
D8279 EQU 8700H
LO EQU 30H
HI EQU 31H
ORG 0000H
AJMP START
ORG 000BH
LJMP T0_INT
START:
MOV SP,#60H
MOV P3,#0FFH
MOV TMOD,#00000000B
MOV IE,#10000010B
LCALL F8279 ;;8279的初始化
LCALL LO_KEY ;;判断是否有下压键
PAN1:
MOV DPTR,Z8279
MOVX A,@DPTR
ANL A,#3FH
MOV R2,A ; ;保存键值
ANL A,#01H ;;键值1
JNZ S_1
JZ P_1
S_1:
LCALL SONG_1
P_1:
MOV A,R2
ANL A,#02H ;;键值2
JNZ S_2
JZ P_2
S_2:
LCALL SONG_2
P_2
MOV A,R2
ANL A,#03H ;;键值3
JNZ S_3
JZ P_3
S_3:
LCALL SONG_3
P_3
MOV A,R2
ANL A,#04H ;;键值4
JNZ S_4
JZ P_4
S_4
LCALL SONG_4
P_4
MOV A,R2
ANL A,#05H ;;键值5
JNZ S_5
JZ PAN1
S_5:
LCALL SONG_5
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
SONG_1: ;//歌曲1
MOV R4,#15
LOOP1:
LCALL VALUE1
SETB TR0
MOV R5,#20
LCALL DELAY
CLR TR0
MOV R5,#20
LCALL DELAY
LCALL P_KEY
DJNZ R4,LOOP1
LCALL SONG_2
RET
SONG_2: ;//歌曲2
MOV R4,#15
LOOP2:
LCALL VALUE1
SETB TR0
MOV R5,#20
LCALL DELAY
CLR TR0
MOV R5,#20
LCALL DELAY
LCALL P_KEY
DJNZ R4,LOOP2
LCALL SONG_3
RET
SONG_3: ;//歌曲3
MOV R4,#15
LOOP3:
LCALL VALUE1
SETB TR0
MOV R5,#20
LCALL DELAY
CLR TR0
MOV R5,#20
LCALL DELAY
LCALL P_KEY
DJNZ R4,LOOP3
LCALL SONG_4
RET
SONG_4: ;//歌曲4
MOV R4,#15
LOOP4:
LCALL VALUE1
SETB TR0
MOV R5,#20
LCALL DELAY
CLR TR0
MOV R5,#20
LCALL DELAY
LCALL P_KEY
DJNZ R4,LOOP4
LCALL SONG_5
RET
SONG_5: ;//歌曲5
MOV R4,#15
LOOP5:
LCALL VALUE1
SETB TR0
MOV R5,#20
LCALL DELAY
CLR TR0
MOV R5,#20
LCALL DELAY
LCALL P_KEY
DJNZ R4,LOOP5
LCALL SONG_1
RET
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
VALUE1: ;//歌曲1的频率设置
MOV DPTR,#FREH1
MOV A,R4
MOVC A,@A+DPTR
MOV HI,A
MOV DPTR,#FREL1
MOV A,R4
MOVC A,@A+DPTR
MOV LO,A
MOV R4,#1*****************************************
RET
VALUE2: ;/;/歌曲2的频率设置
MOV DPTR,#FREH2
MOV A,R4
MOVC A,@A+DPTR
MOV HI,A
MOV DPTR,#FREL2
MOV A,R4
MOVC A,@A+DPTR
MOV LO,A
MOV R4,#1
RET
VALUE3: ;//歌曲3的频率设置
MOV DPTR,#FREH3
MOV A,R4
MOVC A,@A+DPTR
MOV HI,A
MOV DPTR,#FREL3
MOV A,R4
MOVC A,@A+DPTR
MOV LO,A
MOV R4,#1
RET
VALUE4: ;//歌曲4的频率设置
MOV DPTR,#FREH4
MOV A,R4
MOVC A,@A+DPTR
MOV HI,A
MOV DPTR,#FREL4
MOV A,R4
MOVC A,@A+DPTR
MOV LO,A
MOV R4,#1
RET
VALUE5: ;//歌曲5的频率设置
MOV DPTR,#FREH5
MOV A,R4
MOVC A,@A+DPTR
MOV HI,A
MOV DPTR,#FREL5
MOV A,R4
MOVC A,@A+DPTR
MOV LO,A
MOV R4,#1
RET
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
T0_INT:
MOV TL0,LO
MOV TH0,HI
CPL P3.4
RETI
DELAY:
MOV R6,#50
D1:
MOV R7,#100
DJNZ R7,$
DJNZ R6,D1
DJNZ R5,DELAY
RET
F8279:
MOV DPTR,Z8279
MOV A,#10H
MOVX @DPTR,A
MOV A,#34H
MOVX @DPTR,A
MOV A,#0D1H
MOVX @DPTR,A
LCALL DELAY
MOV A,#80H
MOVX @DPTR,A
MOV A,#40H
MOVX @DPTR,A
RET
LO_KEY:
MOV DPTR,Z8279
MOVX A,@DPTR
ANL A,#0FH
JZ LO_KEY
RET
P_KEY:
MOV DPTR,Z8279
MOVX A,@DPTR
ANL A,#0FH
JNZ SIGN1
JZ SIGN2
SIGN1:
LJMP PAN1
SIGN2:
RET
FREH1 DB 0,226,229,232,233,236,238,240,241,242,244,244,246,247,248
FREL1 DB 0,4,13,10,20,3,8,6,2,23,5,26,1,4,3
FREH2 DB 0,236,229,232,233,226,230,240,231,246,244,234,236,247,248
FREL2 DB 0,4,13,10,20,3,8,6,2,23,5,26,1,4,3
FREH3 DB 0,226,229,232,233,236,238,240,241,242,244,244,246,247,248
FREL3 DB 0,4,13,10,20,3,8,6,2,23,5,26,1,4,3
FREH4 DB 0,226,229,232,233,236,238,240,241,242,244,244,246,247,248
FREL4 DB 0,4,13,10,20,3,8,6,2,23,5,26,1,4,3
FREH5 DB 0,226,229,232,233,236,238,240,241,242,244,244,246,247,248
FREL5 DB 0,4,13,10,20,3,8,6,2,23,5,26,1,4,3
END
展开全部
;这是我实验通过的,但愿对你有帮助
********************************************************************************
;P3.3---生日快乐音乐盒。 p3.3口接小喇叭 *
;********************************************************************************
;* 日期: 2010-3-25 *
;* 版本: 3.0 *
;* 作者: 黄庭剑 *
;********************************************************************************
;* 硬件:此程序在自己开发版上运行通过 *
;********************************************************************************
【声明】 此程序仅用于学习与参考,引用请注明版权和作者信息! *
;********************************************************************************
org 0000h
ajmp main
org 000bh
jmp tim0
org 0080h
main: ;主程序
mov tmod,#01h ;设定时方式
mov ie,#82h ;开中断
start0:
mov 30h,#00h ;
next: mov a,30h
mov dptr,#table
movc a,@a+dptr ;查表取音调和节拍
mov r2,a
jz end0 ;为零,不进行处理.
anl a,#0fh
mov r5,a ;将节拍存入R5
mov a,r2
swap a
anl a,#0fh
jnz sing ;根据音调决定是否演奏.
clr tr0
jmp d1
sing: dec a
mov 22h,a ;将音调存入22H.
rl a
mov dptr,#table1
movc a,@a+dptr ;根据音调决定定时器初值.
mov th0,a ;放入TH0
mov 21h,a
mov a,22h
rl a
inc a
movc a,@a+dptr
mov tl0,a ;放入TL0
mov 20h,a
setb tr0 ;启动定时
d1: call delay
inc 30h
jmp next
end0: clr tr0
jmp start0
tim0: ;定时器中断服务程序
push acc
push psw
mov tl0,20h ;重赋初值.
mov th0,21h
cpl p3.3
pop psw
pop acc
reti
delay: mov r7,#02h ;延时子程序
d2: mov r4,#187
d3: mov r3,#248
djnz r3,$
djnz r4,d3
djnz r7,d2
djnz r5,delay
ret
table1: ;决定音调的定时初值.
dw 64260,64400,64524,64580
dw 64684,64777,64820,64898
dw 64968,65030,65058,65110
dw 65157,65178,65217
table: ;决定音调和节拍的表格,不同的歌曲只是此表不同
;1
db 82h,01h,81h,94h,84h,0b4h,0a4h,04h,82h,01h,81h,94h,84h,0c4h,0b4h,04h
;2
db 82h,01h,81h,0f4h,0d4h,0b4h,0a4h,94h,0e2h,01h,0e1h,0d4h,0b4h,0c4h,0b4h,04h
;3
db 82h,01h,81h,94h,84h,0b4h,0a4h,04h,82h,01h,81h,94h,84h,0c4h,0b4h,04h
;4
db 82h,01h,81h,0f4h,0d4h,0b4h,0a4h,94h,0e2h,01h,0e1h,0d4h,0b4h,0c4h,0b4h,04h,00
end
********************************************************************************
;P3.3---生日快乐音乐盒。 p3.3口接小喇叭 *
;********************************************************************************
;* 日期: 2010-3-25 *
;* 版本: 3.0 *
;* 作者: 黄庭剑 *
;********************************************************************************
;* 硬件:此程序在自己开发版上运行通过 *
;********************************************************************************
【声明】 此程序仅用于学习与参考,引用请注明版权和作者信息! *
;********************************************************************************
org 0000h
ajmp main
org 000bh
jmp tim0
org 0080h
main: ;主程序
mov tmod,#01h ;设定时方式
mov ie,#82h ;开中断
start0:
mov 30h,#00h ;
next: mov a,30h
mov dptr,#table
movc a,@a+dptr ;查表取音调和节拍
mov r2,a
jz end0 ;为零,不进行处理.
anl a,#0fh
mov r5,a ;将节拍存入R5
mov a,r2
swap a
anl a,#0fh
jnz sing ;根据音调决定是否演奏.
clr tr0
jmp d1
sing: dec a
mov 22h,a ;将音调存入22H.
rl a
mov dptr,#table1
movc a,@a+dptr ;根据音调决定定时器初值.
mov th0,a ;放入TH0
mov 21h,a
mov a,22h
rl a
inc a
movc a,@a+dptr
mov tl0,a ;放入TL0
mov 20h,a
setb tr0 ;启动定时
d1: call delay
inc 30h
jmp next
end0: clr tr0
jmp start0
tim0: ;定时器中断服务程序
push acc
push psw
mov tl0,20h ;重赋初值.
mov th0,21h
cpl p3.3
pop psw
pop acc
reti
delay: mov r7,#02h ;延时子程序
d2: mov r4,#187
d3: mov r3,#248
djnz r3,$
djnz r4,d3
djnz r7,d2
djnz r5,delay
ret
table1: ;决定音调的定时初值.
dw 64260,64400,64524,64580
dw 64684,64777,64820,64898
dw 64968,65030,65058,65110
dw 65157,65178,65217
table: ;决定音调和节拍的表格,不同的歌曲只是此表不同
;1
db 82h,01h,81h,94h,84h,0b4h,0a4h,04h,82h,01h,81h,94h,84h,0c4h,0b4h,04h
;2
db 82h,01h,81h,0f4h,0d4h,0b4h,0a4h,94h,0e2h,01h,0e1h,0d4h,0b4h,0c4h,0b4h,04h
;3
db 82h,01h,81h,94h,84h,0b4h,0a4h,04h,82h,01h,81h,94h,84h,0c4h,0b4h,04h
;4
db 82h,01h,81h,0f4h,0d4h,0b4h,0a4h,94h,0e2h,01h,0e1h,0d4h,0b4h,0c4h,0b4h,04h,00
end
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |