单片机课程设计报告利用蜂鸣器播放音乐
成绩成绩 课程设计:课程设计: 嵌入式系统应用嵌入式系统应用 题目名称:题目名称:利用蜂鸣器实现音乐播放功能 利用蜂鸣器实现音乐播放功能 姓姓名:名: 学学号:号: 班班级:级: 完成时间:完成时间: 1 1 设计的任务设计的任务 设计内容:动手焊接一个 51 单片机 设计目标:利用单片机上的蜂鸣器实现音乐播放功能 2 2 设计的过程设计的过程 基本结构基本结构 在本次的试验中采用了 STC89C52RC 单片机,STC89C52RC 单片机是宏晶 科技推出的新一代高速/低功耗/超强抗干扰的单片机,指令代码完全兼容传 统 8051 单片机,12 时钟/机器周期,工作电压:~(5V 单片机)/~(3V 单 片机) ,工作频率范围:0~40MHz,相当于普通8051 的 0~80MHz,实际工 作频率可达 48MHz,用户应用程序空间为 8K 字节。 (STC89C52RC引脚图) STC89C52RC 单片机的工作模式: (1) 典型功耗 拍手:| XXX X X| X X X X 0 X X || 6 小节线 ○ 正如五綫谱一样,小节与小节之间以纵綫(称)分隔,乐曲终止以一粗 一细的直綫表示(但是一般不分粗细);重复乐段以纵綫后两点表示开始, 纵綫前两点表示终止。 7 拍号 ○ 的表达方式为:“2/4”、“3/4”、“4/4”、“6/8”等等。拍号一般都是置于的 后方。 8 变调与调号 ○ 表示有两种方法: 可以直接写“C 调”, “C 小调”或“Key: C”, “Key: Cm”。 亦可写清楚主音代表哪一个音,例如 1=C,就是 C 大调(大调以 1 为主 音) 。6=C 就是 C 小调(小调以 6 为主音) 。2=D 就是 D(多利安调以 2 为主音) 。五线谱有,简谱同样有升降号。在简谱中,若需表达升降号, 就把符号加在数字 1 至 7 的前方,让该音升高或降低。若要把升降号加 在调号跟 CDEFGAB 七个字母,就须加在它们的后方。在五綫谱中,C 小 调要把 B-E-A 三个音降低半音。所以表达它的和声小调时,就会把一个 放在 B?前面。简谱就一定得写?5,因为 5 不能下降。 9 延音线、圆滑线与其他音乐符号 ○ 简谱(Tie)跟(slur)都是跟五线谱相同,一定得置在数字上方。表 达(staccato)时需要特别小心,因为很容易会跟低八度的那一点混淆, 因此在表达跳音时把那一点写得粗点及低点。 *简谱编码 将简谱中的每个音符进行编码,每个音符用一个 unsigned char 字符类型表 示,简谱可用一个 unsigned char 字符数组表示。字符的前四位表示音频,可以 表示 0-f 共十六个音符。 本实验中采用了中音区和高音区。 中音 do-si 分别编码为 1~7,高音 do-si 分别编码为 8~E,停顿编为 0。字符的后四位表示节拍,节拍以 十六分音符为单位(在本程序中为 165ms) ,一拍即四分音符等于 4 个十六分音 符,编为 4,其它的播放时间以此类推。以 0 xff 作为曲谱的结束标志。程序从数组 中取出一个数,然后分离出高 4 位得到音调 ,将值赋给定时器 0,得到音调; 接着分离出该数的低 4 位,得到节拍。 本实验中播放音乐使用简谱如下: 将其编码成: uchar code zbjbxf[]={ 0 x64,0 xA3,0 xC1,0 xA2,0 x62,0 x84,0 x61,0 x81,0 x61,0 xA4,0 xA1,0 x91,0 xA1,0 x81,0 x64,0 x A3,0 xC1,0 xD2,0 xD2,0 xD2,0 xA2,0 xC4,0 xA1,0 xC1,0 xA1,0 xC1,0 xD2,0 xD2,0 xD2,0 xA2,0 x C4,0 xC2,0 x62,0 xC2,0 x62,0 xA2,0 xA2,0 x84,0 x94,0 x94,0 x92,0 x81,0 x91,0 xA2,0 xC2,0 xD4 ,0 xE4,0 xA4,0 xE4,0 xA2,0 xE2,0 xA2,0 xE2,0 xA2,0 xA2,0 x84,0 x94,0 x94,0 x92,0 x81,0 x91,0 x A2,0 xC2,0 xD8}; 程序流图及说明 (主程序流程图) 程序代码: #include #define uchar unsigned char #define uintunsigned int sbit fm=P3^4;算机与单片机的连接不上问题 计算机与单片机的连接需要在电脑端安装相应的 USB 转串的驱动,由于我组没有使用 实验室 windows xp 系统,而使用的是个人计算机windows 7 系统,所以需要针对win 7 的 驱动。后来联网搜索下载相应的驱动之后解决了这一问题。 2.如何使蜂鸣器发出声音而非Be-Be 声 为了解决这个问题, 我们深入研究了蜂鸣器发声原理与乐谱相关的知识。 通过学习相关 知识发现,不同的音符对应不同的音高, 音高取决于发声频率。 所以可以通过构造不同频率 的方波来使蜂鸣器发出不同频率的声音, 具体实现时利用定时器计时, 定时器每一次累加消 耗一个机器周期,即12 个时钟周期。本实验采用晶振频率为12MHz,即定时器每一次累加 消耗 1us,通过设置定时器初值设定蜂鸣器取法的时间间隔,从而产生相应的音频。 每个音符不但有频率属性, 还有节拍属性。 对不同节拍的控制可以采用延迟一定的时间 来得到。 5 5 总结总结 在本次课程设计中, 我们进一步加深了对小型嵌入式系统的认识。 实验初期单片机需要 自己焊接,通过亲手焊接电路板, 了解了如何将实验原理图转化为具体的硬件实物连接。 通 过使用 TN 单片机开发板和 STC89C52RC系统,对单片机应用开发有了初步的熟悉。在实验 的过程中,使用到了 C51 的编译环境 Keil C 和单片机通讯程序 STC_ISP,两者是单片机开发 所不可缺少的工具。 在具体实施的过程中, 通过一一解决遇到的问题, 增强了动手实践能力。