使用单片机编写的音乐程序

使用单片机编写的音乐程序
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
这是本人一个产品中的音乐单元,很完整,供爱好者参考。
org 0000h
ajmp csh 主程序进入点
org 000bh
ljmp tim0 定时中断t0入口
;
;**********
;* 初始化 *
;**********
;
org 0020h
csh: mov r0,#7fh 内部ram(00h~7fh)清零
csh1: mov @r0,#00h
djnz r0,csh1
mov sp,#60h 堆栈60h~7fh,【使用89c51】
mov tmod,#01h tmod=11h,t0作16位计数器(4m晶振)
clr tcon.4 t0禁止动作
setb ie.1 t0允许中断
setb pt0 t0中断优先
setb ie.7 系统允许中断
;
;**********
;* 主程序 *
;**********
;
main: mov 5ch,#00 取简码谱指针
lcall music
mov 5ch,#49 取简码谱指针
lcall music
mov 5ch,#66 取简码谱指针
lcall music
mov 5ch,#100 取简码谱指针
lcall music
mov 5ch,#108 取简码谱指针
lcall music
mov 5ch,#136 取简码谱指针
lcall music
mov 5ch,#174 取简码谱指针
lcall music
ajmp main
;
;*************************
;* 音乐子程序 music *
;* 入口: 5ch←简码谱指针 *
;*************************
;
music: mov a,5ch 简码谱指针装入a
mov dptr,#table 至table取简码
movc a,@a+dptr
mov r2,a 取到的简码暂存于r2
jz end1 是否取到00(结束码)?
anl a,#0fh 不是,则取低四位(节拍码)
mov r6,a 将节拍码存入r6
mov a,r2 将取到的简码再装入r2
swap a 高低四位交换
anl a,#0fh 取低四位(音符码)
jnz sing 取到的音符码是否为0?
clr tr0 是,则不发音
ajmp d1 跳到d1
;
sing: dec a 取到的音符码减1
mov 4bh,a 存入(4bh)
rl a 乘2
mov dptr,#table1 至table1取相对的高字节计数值
movc a,@a+dptr
mov th0,a 取到的高字节存入th0
mov 4ah,a 取到的高字节存入(4ah)
mov a,4bh 再装入取到的音符码
rl a 乘2
inc a 加1
movc a,@a+dptr 至table1取相对的低位
mov tl0,a 取到的低字节存入tl0
mov 49h,a 取到的低字节存入(49h)
setb tr0 启动timer0
d1: call delay 基本单位时间1/4拍187毫秒
inc 5ch 取简码谱指针加1
ajmp music 取下一个码
dd1: ret
;
stop: nop
; jb p3.7,stop1 在软件延时中掺插做其他动作
; setb p2.7 p2.7←“1”
nop
nop
stop0: nop
ret
stop1: nop
; jb p3.6,stop0 在软件延时中掺插做其他动作
; setb p2.6 p2.6←“1”
ret
;
end1: clr tr0 停止timer0
ret
;
tim0: push a 将a的值暂存于堆栈区
push psw 将psw的值暂存于堆栈区
mov tl0,49h 重设计数值
mov th0,4ah
cpl p1.7 将输出端p1.1取反(p1.7接至无源蜂鸣器)
pop psw 至堆栈区取回psw的值
pop a 至堆栈区取回a的值
reti 返回主程序
;
delay: mov r7,#02 187毫秒
d2: mov r4,#24
d3: mov r3,#48
djnz r3,$
acall stop 在软件延时中掺插做其他动作
djnz r4,d3
djnz r7,d2
djnz r6,delay 决定节拍
ret
; .5 .6 .7 1
table1: dw 65111,65150,65199,65217 4m晶振时的定时中断时间常数
; 2 3 4 5 若采用其它频率,则要根据乐音的
dw 65252,65283,65297,65323 频率计算,例中央c的a音为440hz,
; 6 7 1` 2` 440hz=2.273ms,把t0设置为2.273ms
dw 65347,65367,65377,65394 中断即可发出a音。
; 3` 4` #6
dw 65410,65417,65357
;
;***************************************************************
;* 音符代码 1 2 3 4 5 6 7 8 9 a b c d e f 0 *
;* 音高 .5 .6 .7 1 2 3 4 5 6 7 1` 2` 3` 4` 5` 休止 *
;*-------------------------------------------------------------*
;* 节拍代码 1 2 3 4 5 6 8 a c f *
;* 节拍 1/4 2/4 3/4 1 1(1/4) 1(1/2) 2 2(1/2) 3 3(3/4) *
;*-------------------------------------------------------------*
;* 结束代码 00h *
;*-------------------------------------------------------------*
;* 乐谱格式 每字节的高字节为音符代码,低字节为节拍代码 *
;*-------------------------------------------------------------*
;* 例子: ⑴ ⑵ ⑶ ⑷ ⑸ ⑹ ⑺ ⑻ ⑼ ⑽ ⑾ *
;* db a4h,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】
db 98h,02h,b4h,01h,94h,01h,68h,02h,94h,01h
db 64h,01h,48h,02h,64h,01h,44h,01h,28h,02h
db 64h,01h,94h,01h,b4h,01h,94h,01h,b4h,01h
db 94h,01h,b4h,01h,d4h,01h,94h,01h,64h,01h
db 44h,01h,64h,01h,98h,02h,01h,01h,00h
;【49】
db a4h,02h,84h,02h,a4h,02h,84h,02h,d8h,04h
db c8h,01h,01h,01h,01h,01h,00h
;【66】
db 42h,52h,62h,72h,82h,92h,a2h,b2h,42h,52h
db 62h,72h,82h,92h,a2h,b2h,00h
;【100】
db 61h,81h,b1h,d1h,b1h,81h,61h,00h
;【108】
db 11h,41h,61h,81h,61h,41h,11h,00h
;【136】
db 24h,04h,34h,04h,44h,04h,54h,04h,64h,04h,44h,04h,64h,04h,94h,04h
db 83h,01h,93h,01h,83h,01h,63h,01h,46h,02h,66h,02h
db 91h,21h,91h,21h,91h,21h,91h,21h,94h,00h
;【174】
db 94h,04h,a4h,04h,b4h,04h,c4h,04h,d4h,04h
db b4h,04h,d8h,08h,c4h,04h,f4h,04h,cch,00h
;
end


低压线路的接线方式主要有
ADI的iCOUPLER助力远程监管医疗设备
高级观赏鱼养殖中紫外线杀菌灯可有效改善水质
武汉市拟重点发展8大重点产业 预计到2022年主营收入1.7万亿元
滨化集团电子级氢氟酸已经拿到部分韩国半导体厂商的批量订单
使用单片机编写的音乐程序
1GHz双核高配三防机索尼ST27i使用评测
Opensignal发布部分国家5G速率排名:韩国第一、美国垫底
网格系统与仪表盘设计实践分享
泛半导体装备供应商合肥欣奕华开启上市辅导
DTU助力气象行业数字化转型,让数据更智能
百度,谷歌和微软等科技公司组建机密计算联盟
如何选择合适的开关电源芯片?
嵌入式MultiBus-CPU模块设计可满足工业现场的测控需要
未来以及将推动未来业务和技术变革的IoT趋势
虚拟现实是医疗保健教育的处方
理性评估后的选择—充电器芯片U62143介绍
网线质量好坏怎么看
便携式FRC交直流高压表的使用说明
互调、频谱发射模板(SEM)和邻道泄露抑制比(ACLR)的区别在哪?