单片机编音乐程序

6=440hz,#6=440*1.059463=466.2hz,7=440*1.059463*1.059463=493.9hz
#5=440÷1.059463=415.3hz
5=440÷1.059463÷1.059463=392hz
相邻半音阶的关系为1.059463倍,只要知道a=440hz,即可算出其余半音阶的频率,比a高的用*,比a低的用÷
1.059463=12√2(即2开12次根)
440hz为钢琴中央c组的a(即6音)
ok
这是本人一个产品中的音乐单元,很完整,供爱好者参考.
org0000h
ajmpcsh主程序进入点
org000bh
ljmptim0定时中断t0入口
;
;**********
;*初始化*
;**********
;
org0020h
csh:movr0,#7fh内部ram(00h~7fh)清零
csh1:mov@r0,#00h
djnzr0,csh1
movsp,#60h堆栈60h~7fh,【使用89c51】
movtmod,#01htmod=11h,t0作16位计数器(4m晶振)
clrtcon.4t0禁止动作
setbie.1t0允许中断
setbpt0t0中断优先
setbie.7系统允许中断
;
;**********
;*主程序*
;**********
;
main:mov5ch,#00取简码谱指针
lcallmusic
mov5ch,#49取简码谱指针
lcallmusic
mov5ch,#66取简码谱指针
lcallmusic
mov5ch,#100取简码谱指针
lcallmusic
mov5ch,#108取简码谱指针
lcallmusic
mov5ch,#136取简码谱指针
lcallmusic
mov5ch,#174取简码谱指针
lcallmusic
ajmpmain
;
;*************************
;*音乐子程序music*
;*入口:5ch←简码谱指针*
;*************************
;
music:mova,5ch简码谱指针装入a
movdptr,#table至table取简码
movca,@a+dptr
movr2,a取到的简码暂存于r2
jzend1是否取到00(结束码)?
anla,#0fh不是,则取低四位(节拍码)
movr6,a将节拍码存入r6
mova,r2将取到的简码再装入r2
swapa高低四位交换
anla,#0fh取低四位(音符码)
jnzsing取到的音符码是否为0?
clrtr0是,则不发音
ajmpd1跳到d1
;
sing:deca取到的音符码减1
mov4bh,a存入(4bh)
rla乘2
movdptr,#table1至table1取相对的高字节计数值
movca,@a+dptr
movth0,a取到的高字节存入th0
mov4ah,a取到的高字节存入(4ah)
mova,4bh再装入取到的音符码
rla乘2
inca加1
movca,@a+dptr至table1取相对的低位
movtl0,a取到的低字节存入tl0
mov49h,a取到的低字节存入(49h)
setbtr0启动timer0
d1:calldelay基本单位时间1/4拍187毫秒
inc5ch取简码谱指针加1
ajmpmusic取下一个码
dd1:ret
;
stop:nop
;jbp3.7,stop1在软件延时中掺插做其他动作
;setbp2.7p2.7←1
nop
nop
stop0:nop
ret
stop1:nop
;jbp3.6,stop0在软件延时中掺插做其他动作
;setbp2.6p2.6←1
ret
;
end1:clrtr0停止timer0
ret
;
tim0:pusha将a的值暂存于堆栈区
pushpsw将psw的值暂存于堆栈区
movtl0,49h重设计数值
movth0,4ah
cplp1.7将输出端p1.1取反(p1.7接至无源蜂鸣器)
poppsw至堆栈区取回psw的值
popa至堆栈区取回a的值
reti返回主程序
;
delay:movr7,#02187毫秒
d2:movr4,#24
d3:movr3,#48
djnzr3,$
acallstop在软件延时中掺插做其他动作
djnzr4,d3
djnzr7,d2
djnzr6,delay决定节拍
ret
;.5.6.71
table1:dw65111,65150,65199,652174m晶振时的定时中断时间常数
;2345若采用其它频率,则要根据乐音的
dw65252,65283,65297,65323频率计算,例中央c的a音为440hz,
;671`2`440hz=2.273ms,把t0设置为2.273ms
dw65347,65367,65377,65394中断即可发出a音.
;3`4`#6
dw65410,65417,65357
;
;***************************************************************
;*音符代码123456789abcdef0*
;*音高.5.6.712345671`2`3`4`5`休止*
;*-------------------------------------------------------------*
;*节拍代码1234568acf*
;*节拍1/42/43/411(1/4)1(1/2)22(1/2)33(3/4)*
;*-------------------------------------------------------------*
;*结束代码00h*
;*-------------------------------------------------------------*
;*乐谱格式每字节的高字节为音符代码,低字节为节拍代码*
;*-------------------------------------------------------------*
;*例子:⑴⑵⑶⑷⑸⑹⑺⑻⑼⑽⑾*
;*dba4h,02h,84h,02h,a4h,02h,84h,02h,d8h,04h,00h*
;*⑴a→唱7,4→1拍*
;*⑵0→休止,2→2/4拍*
;*⑶8→唱5,4→1拍*
;*⑷0→休止,2→2/4拍*
;*⑸a→唱7,4→1拍*
;*⑹0→休止,2→2/4拍*
;*⑺8→唱5,4→1拍*
;*⑻0→休止,2→2/4拍*
;*⑼d→唱3`,8→2拍*
;*⑽0→休止,4→1拍*
;*⑾00h→乐曲结束*
;***************************************************************
;
table:
;【00】
db98h,02h,b4h,01h,94h,01h,68h,02h,94h,01h
db64h,01h,48h,02h,64h,01h,44h,01h,28h,02h
db64h,01h,94h,01h,b4h,01h,94h,01h,b4h,01h
db94h,01h,b4h,01h,d4h,01h,94h,01h,64h,01h
db44h,01h,64h,01h,98h,02h,01h,01h,00h
;【49】
dba4h,02h,84h,02h,a4h,02h,84h,02h,d8h,04h
dbc8h,01h,01h,01h,01h,01h,00h
;【66】
db42h,52h,62h,72h,82h,92h,a2h,b2h,42h,52h
db62h,72h,82h,92h,a2h,b2h,00h
;【100】
db61h,81h,b1h,d1h,b1h,81h,61h,00h
;【108】
db11h,41h,61h,81h,61h,41h,11h,00h
;【136】
db24h,04h,34h,04h,44h,04h,54h,04h,64h,04h,44h,04h,64h,04h,94h,04h
db83h,01h,93h,01h,83h,01h,63h,01h,46h,02h,66h,02h
db91h,21h,91h,21h,91h,21h,91h,21h,94h,00h
;【174】
db94h,04h,a4h,04h,b4h,04h,c4h,04h,d4h,04h
dbb4h,04h,d8h,08h,c4h,04h,f4h,04h,cch,00h
;
end

中国工程机械企业2020年经营计划及业务布局解析
英飞凌:核心知识产权都是在德国、澳大利亚等国家地区注册的
一文解析车路协同发展难点
中科院专家研制出新型抗电磁干扰材料
Google将它的大部分现有的360度导览功能发挥到其艺术和文化的平台
单片机编音乐程序
粤芯半导体设备进厂 将成为国内本土首条量产的12英寸特色工艺产线
自动气象站是什么,浅析它的作用都有哪些
连接储能技术的未来
视觉系统方案的有效整合 可使自动化生产线效率极大提高
乌云下种因时:细看vivo的平凡之路
基于物联网技术的智能快递柜生鲜配送柜方案
园区工厂能源管理系统平台搭建公司
浅析无人机的“视神经”图传系统
5G无人机灭火威力大,探索5G无人机新应用
特斯拉全自动驾驶测试版更新正式推出
石墨烯发热膜的发热原理是怎样的呢
iPhone8刚发售就遇冷,意味着苹果手机时代是要凋谢了吗?
EMC测试:传导骚扰实验原理
凌力尔特推出降压型微型模块稳压器LTM4641