基于AT89C51单片机的音乐盒的课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1
《单片机原理及应用》
课程设计说明书
设计题目:基于AT89C52单片机的音乐盒的设计
学 院:
专业班级:
设 计 者:
学 号:
指导老师:
目录
摘要 (4)
第1章概述 (5)
第2章音乐盒的发音原理 (6)
2.1 播放音乐的原理 (6)
2.2 音符频率的产生 (6)
2.3 节拍频率的产生 (8)
第3章硬件电路设计 (9)
3.1 硬件电路 (9)
3.2 整体硬件电路 (10)
3.3 原理说明 (10)
2
3.4 键盘按键 (10)
第4章软件设计 (11)
4.1 程序设计流程 (11)
4.2 设计源程序代码 (12)
第5章仿真及调试 (16)
5.1 调试 (16)
5.2 仿真 (16)
5.3 程序调试中出现的问题及解决的办法 (17)
第6章设计小结 (18)
附录元件清单 (19)
3
基于AT89C52单片机的音乐盒的设计
【摘要】:随着人类社会的发展,人们对视觉、听觉方面
的享受提出了越来越高的要求。小小的音乐盒可以给人们带
来美好的回忆,提高人们的精神文化享受。传统的音乐盒多
是机械型的,体积笨重,发音单调,不能实现批量生产。本
文设计的音乐盒是以单片机为核心元件的电子式音乐盒,体
积小,重量轻,能演奏和旋音乐,功能多,使用方便,可以
批量生产,具有一定的商业价值。
【关键词】:音乐盒;单片机
4
5
第1章 概述
传统的音乐盒多是机械音乐盒,其工作原理是通过齿轮带动一个带有铁钉的铁桶转动,铁桶上的铁钉撞击铁片制成的琴键,从而发出声音。但是,机械式的音乐盒体积比较大,比较笨重,且发音单调。水、灰尘等外在因素,容易使内部金属发音条变形,从而造成发音跑调。另外,机械音乐盒放音时为了让音色稳定,必须放平不能动摇,而且价格昂贵,不能实现大批量生产。
本文设计的音乐盒,是基于单片机设计制作的电子式音乐盒。与传统的机械式音乐盒相比更小巧,音质更优美且能演奏和弦音乐。电子式音乐盒动力来源是电池,制作工艺简单,可进行批量生产,所以价格便宜。基于单片机制作的电子式音乐盒,控制功能强大,可根据需要选歌,使用方便。所放歌曲的节奏可以根据需要进行设置,根据存储容量的大小,可以尽可能多的存储歌曲。另外,可以设计彩灯外观效果,增设放歌时间、序号显示灯功能,使音乐盒的功能更加丰富,如图1-1所示。
图1-1 单片机音乐盒功能框图
6
第2章 音乐盒的发音原理
2.1 播放音乐的原理
发音原理:播放一段音乐需要的是两个元素,一个是音调,另一个是音符。首先要了解对应的音调,音调主要由声音的频率决定,同时也与声音强度有关。对一定强度的纯音,音调随频率的升降而升降;对一定频率的纯音、低频纯音的音调随声强增加而下降,高频纯音的音调却随强度增加而上升。另外,音符的频率有所不同。基于上面的内容,这样就对发音的原理有了一些初步的了解。
音符的发音主要靠不同的音频脉冲。利用单片机的内部定时器/计数器0,使其工作在模式1,定时中断,然后控制P3.7引脚的输出音乐。只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间,利用定时器计时这个半周期时间,每当计时到后就将输出脉冲的I/O 反相,然后重复计时此半周期时间再对I/O 反相,就可在I/O 脚上得到此频率的脉冲。
2.2 音符频率的产生
音符及定时器初始值:
例如:中音1(do )的音频=523HZ,周期T=1/523s=1912s μ
定时器/计数器0的定时时间为:T/2=1912/2s μ=956s μ
定时器956s μ的计数值=定时时间/机器周期=956s μ/1s μ=956(时钟频率=12MHZ)
装入T0计数器初值为65536-956=64580
将64580装入T0寄存器中,启动T0工作后,每计数956次时将产生溢出中断,进入中断服务时,每次对P3.0引脚的输出值进行取反,就可得到中音DO (523HZ )的音符音频。将51单片机内部定时器工作在计数器模式1下,改变计数初值TH0,TL0以产生不同的频率。下表2-1是C 调各音符频率与计数初值T 的对照表:
7
表2-1 C 调各音符频率与计数初值T 的对照表
音符、音符编码及定时器初始值:
为了产生音符,必须求出音符低音5—高音5的计数初值。例如C 调的低1DO 的THTL=65536-50000/262=63627,中音DO 的THTL=65536-500000/523=64580,高音DO 的THTL=65536-500000/1042=65056。为了方便写谱,对其进行简单的编码,在编程时,根据音符编码查找对应的计数初值。比如说音乐是C 调的,那么出现低音的5SO ,直接将代码写为1;出现低音6LA,直接写一个2的代码;出现低音7SI ,直接写一个3代码。
表2-2 音符编码表
8
2.3 节拍频率的产生
节拍的产生与编码:
音乐中的节拍用延时时间产生。例如,1拍=0.4s ,1/4拍=0.1s ,以此类推。假设1/4拍执行一次延时程序,则1/2拍就执行两次延时程序,所以只要求出1/4拍的延时时间,其余节拍就是它的倍数。为了方便,将节拍数也进行了编码,并且计算了乐谱节拍编程时的延时时间,如表2-3和表2-4所示。
表2-3 节拍数编码表
表2-4 乐谱节拍编程时的时间延时表
音符编码和节拍编码完成后,在编程时,每个音符占一个字节,高四位是音符编码,低四位是节拍编码。