找回密码
 注册会员
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

单片机播放音乐的问题

[复制链接]
admin 发表于 2012-9-2 05:53:07 | 显示全部楼层 |阅读模式

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有账号?注册会员

×
单片机播放音乐 ,用汇编语言来写,歌曲调用表格见下,我在网上搜到了“八月桂花香”的程序例子,但是我要换成其他的音乐,程序里面的“乐谱”不知道要怎么写,
不知道有没有人有现成的写好的歌曲表TAB,或者有什么转换器,或者表格,可以让我把音符对应转换成程序里面的数
下面是网上找的例子
ORG 0000H

LJMP START

ORG 000BH

INC 20H ;中断服务,中断计数器加1

MOV TH0, #0DBH

MOV TL0, #0FFH ;11.0592M晶振,形成10毫秒中断

RETI

START: MOV SP, #50H

MOV TH0, #0DBH

MOV TL0, #0FFH

MOV TMOD, #01H

MOV IE, #82H

MUSIC0: NOP ;---------------------------------------------------------------------------------------------------------------

MOV DPTR, #DAT ;表头地址送DPTR ;========================暂停:表头地址=======================

MOV 20H, #00H ;中断计数器清0
;---------------------------------开始循环读音调\音长-----------------------------------------------------------------------

MUSIC1: NOP ;---------------------------------------------------------------------------------------------------------------

CLR A ;A清零

MOVC A, @A+DPTR ;查表取代码

JZ END0 ;是00H,则结束

CJNE A, #0FFH, MUSIC5 ;如果不是休止符,往下执行, 遇到休止付跳MUSIC3,无休止 则跳MUSIC5

;以R6作为音符频率控制,唱R7节拍那么久。

LJMP MUSIC3

MUSIC5: NOP ;---------------------------------------------------------------------------------------------------------------

MOV R6, A ;R6=18H音符的频率

INC DPTR ;DPTR加1

MOV A, #0

MOVC A, @A+DPTR ;取节拍代码送R7

MOV R7,A ;R7=30H音符发音的时间

SETB TR0 ;启动计数

MUSIC2: NOP ;----------------------------------------------------------------------------------------------------------------

CPL P3.2 ;P3.2是音乐输出引脚

MOV A, R6

MOV R3, A ;R3=R6=18H

LCALL DEL

MOV A, R7

CJNE A, 20H, MUSIC2 ;中断计数器(20H)=R7否?;不等,则继续循环 ;------------------R6音调延长的时间-------------------------------

MOV 20H, #00H ;等于,则取下一代码

INC DPTR

LJMP MUSIC1 ;------------------------------------循环读取音调音长程序结束处--------------------------------------------------

MUSIC3: NOP ;休止100毫秒

CLR TR0

MOV R2, #0DH ;R2=13

MUSIC4: NOP

MOV R3, #0FFH ;R3=255

LCALL DEL

DJNZ R2, MUSIC4 ;------------R2-1不为0跳到R4,实质是延时-------------------------------------------------------------------

INC DPTR

LJMP MUSIC1

END0: NOP

MOV R2, #0FFH ;歌曲结束,延时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 18H, 30H, 1CH, 10H, 20H, 40H, 1CH, 10H

DB 18H, 10H, 20H, 10H, 1CH, 10H, 18H, 40H

DB 1CH, 20H, 20H, 20H, 1CH, 20H, 18H, 20H

DB 20H, 80H, 0FFH, 20H,30H, 1CH, 10H, 18H

DB 20H, 15H, 20H, 1CH, 20H, 20H, 20H, 26H

DB 40H, 20H, 20H, 2BH, 20H, 26H, 20H, 20H

DB 20H, 30H, 80H, 0FFH,20H, 20H, 1CH, 10H

DB 18H, 10H, 20H, 20H, 26H, 20H, 2BH, 20H

DB 30H, 20H, 2BH, 40H, 20H, 20H, 1CH, 10H

DB 18H, 10H, 20H, 20H, 26H, 20H, 2BH, 20H

DB 30H, 20H, 2BH, 40H, 20H, 30H, 1CH, 10H

DB 18H, 20H, 15H, 20H, 1CH, 20H, 20H, 20H

DB 26H, 40H, 20H, 20H, 2BH, 20H, 26H, 20H

DB 20H, 20H, 30H, 80H, 20H, 30H, 1CH, 10H

DB 20H, 10H, 1CH, 10H, 20H, 20H, 26H, 20H

DB 2BH, 20H, 30H, 20H, 2BH, 40H, 20H, 15H

DB 1FH, 05H, 20H, 10H, 1CH, 10H, 20H, 20H

DB 26H, 20H, 2BH, 20H, 30H, 20H, 2BH, 40H

DB 20H, 30H, 1CH, 10H, 18H, 20H, 15H, 20H

DB 1CH, 20H, 20H, 20H, 26H, 40H, 20H, 20H

DB 2BH, 20H, 26H, 20H, 20H, 20H, 30H, 30H

DB 20H, 30H, 1CH, 10H, 18H, 40H, 1CH, 20H

DB 20H, 20H, 26H, 40H, 13H, 60H, 18H, 20H

DB 15H, 40H, 13H, 40H, 18H, 80H, 00H

END
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2024-11-24 01:42 , Processed in 0.058027 second(s), 12 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表