找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1702|回复: 0
收起左侧

基于单片机AT89C51的简易电子琴系统设计文档下载

[复制链接]
ID:451237 发表于 2018-12-21 00:24 | 显示全部楼层 |阅读模式
乐曲声音算法
一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号
4.1音乐频率的实现:
1.要产生音频脉冲,只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间,然后利用计时器计时此半周期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O反相,如此就可在I/O脚上得到此频率的脉冲.
2.利用8051的内部计时器让其工作在计数模式MODE1下,改变计数值TH0及TL0以产生不同的频率.
3.例如以6MHZ晶振为例:要产生频率为523HZ,其周期T=1/523=1912us,其半周期为1912/2=956us,因此只要令计数器计时956us/1us=956.所以在每计数956次时将I/O反相,就可得到中音DO(523HZ).
计数脉冲值与频率的关系公式如下:
N=Fi+2+Fr N:计数值
Fi:内部计时一次2us,以6MHZ晶振为例,故其频率为500000HZ
Fr:要产生的频率
4.其计数值的求法如下:
T=65536-N=65536-Fi/2/Fr
例如:求低音DO(261HZ),中音DO(523HZ),高音DO(1046HZ) 的计数值?
设K=65536 F=500000=Fi=0.5MHZ
T=65536-N=65536-Fi/2/Fr=65536-500000/2/Fr=65536-250000/Fr
低音DO的 T=65536-250000/262=64582
中音DO的 T=65536-250000/523=65058
高音DO的 T=65536-250000/1047=65297
5. C调各音符频率与计数值T的对照表:
音符 频率HZ 6MHZ 十六进制值 音符 频率HZ 6MHZ 十六进制值
低1DO 262 64582 FC46 #4FA# 740 65198 FEAE
#1DO# 277 64634 FC7A 中5SO 784 65217 FEC1
低2RE 294 64686 FCAE #5SO# 831 65235 FED3
#2RE# 311 64732 FCDC 中6LA 880 65252 FEE4
低3M 330 64779 FD0B #6LA# 932 65268 FEF4
低4FA 349 64820 FD34 中7SI 988 65283 FF03
#4FA# 370 64860 FD5C 高1DO 1046 65297 FF11
低5SO 392 64898 FD82 #DO# 1109 65311 FF1F
#5SO# 415 64934 FDA6 高2RE 1175 65323 FF2B
低6LA 440 64968 FDC8 #2RE# 1245 65335 FF37
#6LA# 466 65000 FDE8 高3M 1318 65346 FF42
低7SI 494 65030 FE06 高4FA 1397 65357 FF4D
中1DO 523 65058 FE22 #4FA# 1480 65367 FF57
#1DO# 554 65085 FE3D 高5SO 1568 65377 FF61
中2RE 578 65103 FE4F #5S0# 1661 65385 FF69
#2RE# 622 65134 FE6E 高6LA 1760 65394 FF72
中3M 659 65157 FE85 #6LA# 1865 65402 FF7A
中4FA 698 65178 FE9A 高7SI 1976 65409 FF81
"#"表示半音,用于上升或下降半个音

4.2音乐节拍的实现:
每个音符使用1个字节,字节的高4位代表音符的高低,低4位代表音符的节拍,如果1拍节为0.4秒则1/4拍是0.1秒,只要设定延迟时间就可求得节拍的时间,再来我们假设1/4拍为1 DELY单位,则1拍应为4个DELY,以此类推,只要求得1/4拍的DELY单位时间,其余的节拍就是它的倍数.
1/4拍的延迟时间=0.187秒
DELAY:MOV R7,#02H
D2:MOV R4,#31H
D3:MOV R3,#0F1H
DJNZ R3,$
DJNZ R4,D3
DJNZ R7,D2
DJNZ R5,DELAY ;R5存节拍数
RET

各调值1/4节拍的时间设定 各调值1/8节拍的时间设定
曲调值 DELAY 6MHZ(H) 曲调值 DELAY 6MHZ(H)
调4/4 125亳秒 3E 调4/4 62亳秒 1F
3/4 187 5D 3/4 94 2F
2/4 250 7D 2/4 125 3E
建立音乐的步骤: 1.先找出乐曲的最低音,最高音范围,然后确定音符表首地址.

2.如把音符表建在 0151H,适用简谱范围为 低音1 到 高音1. 3.简谱码(音符)为高4位,节拍码(节拍数)为低4位,音符节拍码放在程序的0300H处.本程序有关约定:根据不同曲调,可以建立不同简谱音符表0151H- 为一简谱音符表首地址适用简谱范围 低音1 到 高音10159H- 为一简谱音符表首地址适用简谱范围 低音5 到 高音5 0300H- 为第一首歌曲首地址,字节高位为音符代码,低位为节拍代码组成简谱曲码. 003EH 为歌曲DPH高位首地址,0041H为歌曲DPL低位首地址002FH 为节拍速度代码; 0073H 为音符表低位地址 ,高位地址为01H,不可改动0047H 内容为该首放音二次,01为放音1次. 008DH 改为00H,则反复放该首曲(调试时用).乐曲存放约定:曲码中00H表示上首曲结束标记;接著为下首曲节拍速度值,再接著为该首曲音符表首地址,然后才是乐曲曲码,全部乐曲结束标记为连续两个单元是00H 00H各调值节拍时间代码表(6MHZ晶振时)曲调值 节拍速度值4/4 3EH 3/4 5DH
因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。现在以单片机12MHZ晶振为例,例出高中低音符与单片机计数T0相关的计数值如下表所示
0.png

完整的Word格式文档51黑下载地址:
基于单片机AT89C51的简易电子琴系统毕业设计(论文).doc (413.5 KB, 下载次数: 43)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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