基于stc89c52的简易电子琴课程设计报告内容摘要:

性,用一个固定的永久磁铁与通电导体产生磁力推动固定在线圈上的鼓膜。 由于 2种蜂鸣器发音原理不同,压电式结构简单耐用但音调单一音色差,适用于报警器等设备。 而电磁式由于音色好,所以多用于语音、音乐等设备。 蜂鸣器的电路图形符号 蜂鸣器在电路中用字母“ H”或“ HA”(旧标准用“ FM”、“ LB”、“ JD”等)表示。 有源蜂鸣器与无源蜂鸣器 这里的“源”不是指电源。 而是指震荡源。 也就是说,有源蜂鸣器内部带震荡源,所以只要一通电就会叫。 而无源内部不带震荡源,所以如果用直 流信号无法令其鸣叫。 必须用 2K~5K 的方波去驱动它。 有源蜂鸣器往往比无源的贵,就是因为里面多个震荡电路。 无源蜂鸣器的优点是:便宜;声音频率可控,可以做出“多来米发索拉西”的效果;在一些特例中,可以和 LED 复用一个控制口。 有源蜂鸣器的优点是:程序控制方便。 软件部分 1 音乐产生原理 一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时 /计数器 T0 来产生这样 方波频率信号,因此,只需将一首歌的音阶和频率相对应即可。 8 2 音阶产生方法 若要产生音频脉冲,只要算出某一音频的周期( 1/频率),再将此周期除以 2,即为半周期的时间。 利用定时器计时半周期时间,每当计时终止后就将 反相,然后重复计时再反相。 就可在 引脚上得到此频率的脉冲。 利用 STC89C52 的内部定时器使其工作计数器模式( MODE1)下,改变计数值 TH0 及TL0 以产生不同频率的方法产生不同音阶,例如,频率为 523Hz,其周期 T= 1/523= 1912μ s,因此只要令计数器计时 956μ s/1μ s= 956,每计数 956次时将 I/O 反相,就可得到中音 DO( 523Hz)。 计数脉冲值与频率的关系式 (如式 21 所示 )是: N= fi247。 2247。 fr 式中, N 是计数值; fi 是机器频率(晶体振荡器为 12MHz 时,其频率为 1MHz); fr 是想要产生的频率。 其计数初值 T 的求法如下: T= 65536- N= 65536- fi247。 2247。 fr 表 1 音符频率与计数初值的对应关系表 音符 频率( HZ) 简谱码( T值) 音符 频率( HZ) 简谱码( T值) 低 1 DO 262 63628 4 FA 740 64860 1 DO 277 63731 中 5 SO 784 64898 低 2 RE 294 63835 5 SO 831 64934 2 RE 311 63928 中 6 LA 880 64968 低 3 M 330 64021 6 932 64994 低 4 FA 349 64103 中 7 SI 988 65030 4 FA 370 64185 高 1 DO 1046 65058 低 5 SO 392 64260 1 DO 1109 65085 5 SO 415 64331 高 2 RE 1175 65110 低 6 LA 440 64400 2 RE 1245 65134 6 466 64463 高 3 M 1318 65157 低 7 SI 494 64524 高 4 FA 1397 65178 中 1 DO 523 64580 4 FA 1480 65198 1 DO 554 64633 高 5 SO 1568 65217 中 2 RE 587 64684 5 SO 1661 65235 2 RE 622 64732 高 6 LA 1760 65252 中 3 M 659 64777 6 1865 65268 中 4 FA 698 64820 高 7 SI 1967 65283 9 3 音乐的节拍 在弹奏状态下节拍由操作者控制,而在播放示例音乐时需要程序控制其节拍。 音乐的音拍即单位 时间,对于不同的曲调可以用单片机的另外一个定时 /计数器来完成。 而在此处采用的方法是利用延时函数确定每个音的长短(即节拍),编程时在设置音阶时还要对其设置节拍。 4 矩阵键盘识别 琴键处理程序,根据检测到得按键值,查询音律表,给计时器赋值,发出相应频率的声音。 对音调的控制:根据不同的按键,对定时器 T0 送入不同的初值,调节 T0的溢出时间,这样就可以输出不同音调频率的方波。 不同音调下各个音阶的定时器。 去抖动 : 每个按键在按下或松开时,都会产生短 时间的抖动。 抖动的持续时间与键的质量相关,一般为 5— 20mm。 所谓抖动是指在识别被按键是必须避开抖动状态,只有处在稳定接通或稳定断开状态才能保证识别正确无误。 在程序中通过设置空循环来实现。 被按键识别 采用行扫描法,该方法在微机系统中被广泛使用。 由程序对键盘逐行扫描,通过检测到的列输出状态来确定闭合键,为此,需要设置输出口为 —— ,输入口为 ——。 键码产生 为了从键的行列坐标编码得到反映键功能的键码,一般在内存区中建立一个键盘编码表,通过查表获得被按键的键 码。 T0 中断入口 重装 TH0, TL0初值 取反 中断返回 10 图 6 产生音阶的定时器中断子程序流程图 图 7 按键识别程序流程图 程序调试与仿真 1 使用 Keil 软件对程序进行调试,并生成 hex文件。 弄懂参考程序后,自己编了一段樱花音乐。 经 Keil 编译连接,程序调试无误。 2 使用 proteus 进行仿真 将 Keil 生成的 文件加到单片机上,启动仿真。 可以很好地实现播放与弹奏 功能。 需要说明的是,仿真只是在原理方面的验证,因而本仿真中蜂鸣器直接接到 ,在实际中还要有音频放大器件。 开 始 矩阵 键盘按键按下成功否。 识别按键功能 根据按键功能,装入音符 T值到 T0 中 启动 T0 工作 行列式键盘按键释放成功否。 停止 T0 工作 T0 初始化并开中断允放 T0中断 11 图 8 proteus仿真原理图 电路板的制作与调试 图 9 简易电子琴电路原理图 12 图 10 电子琴 PCB 电路 实际电路调试 第一次上电后蜂鸣器不响。 后来发现当把隔直电容 220uF 短路后,蜂鸣器响了,虽然能听出音乐和按键音,但一直有一个很大的声响。 经过一番分析,认为由于蜂鸣器发出的声音频率较低,隔直电容显得过大。 又换了几个容量较小的隔直电容,仍不出声,于是放弃隔直电容,而直接用一个 10K电阻替代。 再次测试后,发现效果好得多。 可见,加了电阻可起到削弱直流分量的作用,因而噪声小得多,而频率较低的交流也影响不大。 课程设计心得体会 实践出真知。 单片机是应用性很强的一本学科。 仅有课堂的 理论学习和次数有限的实验是远远不够的,必须自己动手做出实物来。 本次课程设计便提供了一个很好地机会,理论联系实际,在实际动手过程中巩固知识、积累经验。 13 应当说本人较好地珍惜了此次机会。 最初选题时,老师给了我们充分发挥积极主动性的空间,让大家结合自身实际情况自定课题。 本人由于爱好音乐,因而对基于单片机的简易电子琴产生了浓厚的兴趣。 因为有兴趣,所以整个课程设计过程中乐此不疲。 尤其是在做软件部分时,在弄懂了参考程序后,又将原先的示例音乐换掉,自己编写了一段。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。