求51单片机 数字音乐盒 汇编语言代码

作者&投稿:点易 (若有异议请与网页底部的电邮联系)
跪求51单片机音乐盒汇编语言程序,急用!!!!谢谢@@~

HUAN BIT 20H
ORG 0000H
JMP MAIN
ORG 000BH
MOV TL0,R2
MOV TH0,R3
CPL P2.0
ORG 001BH
DJNZ R4,GOON
MOV IE,#80H
JMP T1END
GOON: MOV TL1,#0B0H
MOV TH1,#3CH
T1END: RETI
ORG 0100H
MAIN: MOV R5,#99H
LOOP: MOV TMOD,#11H
MOV IP,#02H
MOV TL0,#0B0H
SETB EA
NEXT: MOV DPTR,#TAB
MOV R1,#00H
L1: MOV A,R1
MOVC A,@A+DPTR
MOV R3,A
JZ L3
INC R1
MOV A,R1
MOVC A,@A+DPTR
MOV R2,A
XRL A,#0FFH
JNZ L4
MOV A,R3
XRL A,#0FFH
JZ L5
L4: INC R1
MOV A,R1
L3: MOVC A,@A+DPTR
MOV R4,A
MOV TH0,R3
MOV TL0,R2
SETB ET0
SETB TR0
SETB ET1
SETB TR1
SETB HUAN
JB HUAN,$
INC R1
CJNE R1,#00H,L2
INC DPH
L2: JMP L1
L5: DJNZ R5,LOOP
JMP $
;《两只老虎》播放数据
TAB: DB 0FBH,0F9H,08H,0FCH,066H,08H,0FCH,0C7H,08H,0FBH,0F9H,08H
DB 0FBH,0F9H,08H,0FCH,066H,08H,0FCH,0C7H,08H,0FBH,0F9H,08H
DB 0FCH,0C7H,08H,0FCH,0F3H,08H,0FDH,0A4H,10H,0FCH,0C7H,08H
DB 0FCH,0F3H,08H,0FDH,04AH,08H,0FDH,04AH,04H,0FDH,095H,04H
DB 0FDH,04AH,04H,0FCH,0F3H,04H,0FCH,0C7H,08H,0FBH,0F9H,08H
DB 0FDH,04AH,04H,0FDH,095H,04H,0FDH,4AH,08H,04H,0FCH,0FCH,04H
DB 0FCH,0C7H,08H,0FBH,0F9H,08H,0FCH,066H,08H,0FAH,093H,08H
DB 0FBH,0F9H,08H,00H,08H,0FCH,66H,04H,0FAH,093H,08H
DB 0FBH,0F9H,08H,00H,10H,0FFH,0FFH
END
要播放其余的歌则用相应的播放数据

OUT BIT P2.3 //该引脚接蜂鸣器
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 OUT
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

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

;这是我实验通过的,但愿对你有帮助

********************************************************************************
;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


吴中区17577849358: 跪求51单片机音乐盒汇编语言程序,急用!!!!谢谢@@ -
雷连格利: HUAN BIT 20H ORG 0000H JMP MAIN ORG 000BH MOV TL0,R2 MOV TH0,R3 CPL P2.0ORG 001BH DJNZ R4,GOON MOV IE,#80H JMP T1END GOON: MOV TL1,#0B0H MOV TH1,#3CH T1END: RETI ORG 0100H MAIN: MOV R5,#99H ...

吴中区17577849358: 跪求基于51单片机的汇编语言音乐盒程序
雷连格利: OUT BIT P2.3 //该引脚接蜂鸣器 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 ...

吴中区17577849358: 求单片机播放音乐汇编程序 -
雷连格利: ;标题 '八月桂花香'发声程序 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 ...

吴中区17577849358: 求一份单片机msc - 51的音乐程序 -
雷连格利: /*****************************************/ /*我这有一个程序,你参考一下 */ /* function:唱生日快乐 */ / */ /*****************************************/ #include #include #include #define uint unsigned int #define uchar unsigned char #define led RD #define key...

吴中区17577849358: 求AT89C51单片机汇编语言程序,有关蜂鸣器控制,晶振8MHz(与前一问不同) -
雷连格利: 输出频率,要求是 2.5KHz,必须定时 200us.上次,用的是 12MHz 的晶振,采用定时方式2,初值就是 56.现在,采用了 8MHz 的晶振,初值,就应该是:123.把上次的程序中,有 56 的地方,改成 123,即可.其它的,都不用改动.

吴中区17577849358: 单片机 数字音乐盒 -
雷连格利: 延时,这个东东我原来做过,最早的程序模拟时播了一段音乐,发出扑扑扑的声音,就是延时部分没有做好,在发送声音频率时其实要维持一个短暂的时间,才能让音箱发出正确的声音 nop是空,即什么也不做,占芯片计算的时间而已

吴中区17577849358: 求单片机总汇编语言指令表、 - --- -
雷连格利: 编号 指令名称 指令助记符 指令说明 数据传送类指令 1 一般传送 MOV A, #data 将立即数#data送累加器A 2 MOV direct, #data 将立即数#data送片内RAM direct地址单元内 3 Mov Rn, #data 将立即数#data送寄存器Rn 4 Mov @Ri, #data 寄存器Ri内...

吴中区17577849358: 求解51单片机汇编语言编程1,2,3…,n之和,n<256. -
雷连格利: 和超过256,要保存为16位数.start:mov r2,#1 mov r6,#0;和低8位 mov r7,#0;和高8位 loop: mov a,r2 add a,r6;低8位求和 mov r6,a;保存和低8位 mov a,r7 addc a,#0;高8位进位求和 mov r7,a ;保存和高8位 inc r2 cjne r2,#0,loop end

吴中区17577849358: 89C51单片机汇编程序题 -
雷连格利: MOV 20H,R0 ;R0、R1要作为指针,所以内容直接转存到20H、21H MOV 21H,R1MOV A,PSW ;RS1,RS0的值代表了当前寄存器组中R0的绝对地址 ANL A,#18H ;取当前寄存器组的绝对地址 ADD A,#2H ;指针指向R2,R0、R1已经处理过了 ...

吴中区17577849358: 怎样将汇编语言写入51单片机 -
雷连格利: 首先要用编译器,编译成可以下载的文件,像51单片机,一般最后生成一个.hex文件. 然后用一个下载工具,网上有卖,或者学校实验室等.将单片机放入烧录座上,用电脑上的上位机软件将得到的hex文件下载进去即可.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网