当前位置:首页 > 郑通强—单片机课程设计报告
电气与电子工程学院 《计算机原理及应用》课程设计
简易电子琴的设计
姓名郑通强
学号—————————— 班级电气1407 指导教师张红 成绩
时间2016年12月
目录
设计原理--------------------------------------------------------------------------------------------------------------1
方案设计及框图-----------------------------------------------------------------------------------------------------4
调试过程与结果-----------------------------------------------------------------------------------------------------6
附录(程序代码)-------------------------------------------------------------------------------------------------- 9
简易电子琴的设计
PART ONE设计原理
一、 实验任务
要求能通过按键来模拟音符,一个按键对应一种音符,并能通过蜂鸣器或喇叭产生相应音符的声音,最后要求能完整放出一首歌,并模拟播放器音调的高低,将音调的高低通过点阵显示出来。 二、 原理
乐曲的音程取决于声音信号的频率,不同的频率信号产生不同的音程。声音信号,可以直接通过方波输出产生。在单片机上,通过给定时器赋不同的初值,利用中断可以很容易地产生不同频率的方波信号,再用方波信号驱动蜂鸣器,即可发出不同音程的声音。播放音乐只需将不同的音符按照一定的顺序和对应的时长播放出来即可。要用点阵显示音调,在发出不同频率声音的时候,控制点阵显示不同的图案即可。
以下具体介绍各小模块的原理: 1、 不同音调声音的产生
假设某音符的频率为f,则周期为T=1/f,要发出此音,需要定时器的定时时间为T/2,实验箱上蜂鸣器由P3.2端口控制,即需要每隔T/2时间将P3.2取反,单片机主频为12MHz,机器周期为1μs,则定时器工作在方式1,时,其初值为X,有(65536-X)*1μs=T/2=1/2f,即: X=65536-(10^6)/(1/2f)
查资料得各音调的频率并计算出相应的定时初值如下表: 音符音调 低音1 低音2 低音3 低音4 低音5 低音6 低音7 1 2 3 4 频率/Hz 262 294 330 349 392 440 494 523 587 659 698 定时初值 63628 63835 64021 64103 64260 64400 64524 64580 64684 64777 64820 音符音调 5 6 7 高音1 高音2 高音3 高音4 高音5 高音6 高音7 频率/Hz 786 880 987 1045 1174 1318 1396 1568 1760 1975 定时初值 64900 64968 65029 65058 65110 65157 65178 65217 65252 65283 2、 按键控制音符的原理
要求一个按键对应一个音符,可以通过实验箱上的矩阵键盘实现。按下按键时,计算出按键的键值,通过键值将相应的定时初值赋给定时器,在按键按下时打开定时器,在按键释放后关闭定时器,就可以实现按键按下时发声,松开后停止发声。要判断按键的按下和释放,可通过与键
- 1 -
盘电路所连端口的电压状态进行判断,例如:键盘通过P2口与单片机相连,其中P2.0-P2.3控制行,P2.4-P2.7控制列,将0FH赋给P2,按键按下时,P2的值就会发生变化,按键释放后P2又变为0FH。
键值对应的定时初值存放在表中,便于查询:
DW 64021,64103,64260,64400;低3、低4、低5、低6 DW 64524,64580,64684,64777;低7、1、2、3 DW 64820,64898,64968,65030;4、5、6、7 DW 65058,65110,65157,65178;高1、高2、高3、高4
3、 播放音乐的原理
单片机演奏音乐基本是单音频率,它不包含相应幅度的谐波频率,也就是说不能象电子琴那样能奏出多种音色的声音,但一定要弄清楚两个概念即可,也就是“音调”和“节拍” 。 ·音调 表示一个音符唱多高的频率。上面已有讲解如何控制音调。 ·节拍 表示一个音符唱多长的时间。
通过控制每一个音符的音调和节拍,按照一定的顺序播放每一个音符,即可播放音乐。下面介绍节拍的相关原理:
在一张乐谱中,我们经常会看到这样的表达式,如1=C 4/4、1=G4/3......等等,这里1=C,1=G表示乐谱的曲调,和我们前面所谈的音调有很大的关联,4/4、3/4就是用来表示节拍的。以3/4为例加以说明,它表示乐谱中以四分音符为节拍,每一小结有三拍。比如:
其中1 、2 为一拍,3、4、5为一拍,6为一拍,共三拍。1 、2的时长为四分音符的一半,即为八分音符长,3、4的时长为八分音符的一半,即为十六分音符长,5的时长为四分音符的一半,即为八分音符长,6的时长为四分音符长。那么一拍到底该唱多长呢?一般说来,如果乐曲没有特殊说明,一拍的时长大约为400—500ms 。我们以一拍的时长为400ms为例,则当以四分音符为节拍时,四分音符的时长就为400ms,八分音符的时长就为200ms,十六分音符的时长就为100ms。若乐谱有特别说明则另行对待。如有乐谱中注明每分钟86拍,则一拍时间为60/86s=698ms。可见,在单片机上控制一个音符唱多长可采用循环延时的方法来实现。
以一个十六分音符的时长100ms为延时的基本单位,则四分音符需要调用4次延时。将每一个音符的节拍(即需要调用延时的次数)作为节拍码,音符的音调作为简谱码,分别存到一个字节的低四位和高四位,即可用一个字节表示出一个音符的信息。简谱码和节拍码制作成表格如下: 简谱码 0 1 2 3 4 5 6 7 音符音调 休止符 低音4 低音5 低音6 低音7 1 2 3 定时初值 关闭T0 64103 64260 64400 64524 64580 64684 64777 节拍码 1 2 3 4 5 6 7 8 - 2 -
节拍 1/4拍 2/4拍 3/4拍 1拍 5/4拍 6/4拍 7/4拍 2拍 音符长短 十六分音符 四分音符 二分音符
共分享92篇相关文档