基于51单片机电子琴八音盒设计.docx
- 文档编号:3585737
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:26
- 大小:625.15KB
基于51单片机电子琴八音盒设计.docx
《基于51单片机电子琴八音盒设计.docx》由会员分享,可在线阅读,更多相关《基于51单片机电子琴八音盒设计.docx(26页珍藏版)》请在冰豆网上搜索。
基于51单片机电子琴八音盒设计
目录
诚信声明„„„„„„„„„„„„„„„„„„„„„„„„„„„„„
(1)基于51单片机电子琴八音盒设计„„„„„„„„„„„„„„„„„„
(2)中文摘要„„„„„„„„„„„„„„„„„„„„„„„„„„„„„
(2)英文摘要„„„„„„„„„„„„„„„„„„„„„„„„„„„„„
(2)1引言„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„
(2)2方案总体设计„„„„„„„„„„„„„„„„„„„„„„„„„„
(2)
2.1方案对比„„„„„„„„„„„„„„„„„„„„„„„„„„„(3)
2.2系统工作原理„„„„„„„„„„„„„„„„„„„„„„„„„(4)3硬件设计„„„„„„„„„„„„„„„„„„„„„„„„„„„„(4)
3.1STC89C52芯片„„„„„„„„„„„„„„„„„„„„„„„„(4)
3.2单片机复位部分„„„„„„„„„„„„„„„„„„„„„„„„(5)
3.3单片机晶振部分„„„„„„„„„„„„„„„„„„„„„„„„(6)
3.4数码管显示部分„„„„„„„„„„„„„„„„„„„„„„„„(6)
3.5蜂鸣器部分„„„„„„„„„„„„„„„„„„„„„„„„„„(8)
3.6按键部分„„„„„„„„„„„„„„„„„„„„„„„„„„„(8)4软件设计„„„„„„„„„„„„„„„„„„„„„„„„„„„(10)
4.1系统流程„„„„„„„„„„„„„„„„„„„„„„„„„„(10)
4.2延时源代码„„„„„„„„„„„„„„„„„„„„„„„„„(11)
4.3发音源代码„„„„„„„„„„„„„„„„„„„„„„„„„(11)
4.4单个按键源代码„„„„„„„„„„„„„„„„„„„„„„„(11)5系统仿真与调试„„„„„„„„„„„„„„„„„„„„„„„„(12)
5.1仿真软件简介„„„„„„„„„„„„„„„„„„„„„„„„(12)
5.2硬件调试„„„„„„„„„„„„„„„„„„„„„„„„„„(12)
5.3软件调试„„„„„„„„„„„„„„„„„„„„„„„„„„(12)
5.4使用说明„„„„„„„„„„„„„„„„„„„„„„„„„„(15)6设计总结„„„„„„„„„„„„„„„„„„„„„„„„„„„(15)参考文献„„„„„„„„„„„„„„„„„„„„„„„„„„„„(16)
致谢„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„(17)
附录Ⅰ原理图„„„„„„„„„„„„„„„„„„„„„„„„„(18)附录Ⅱ实物图„„„„„„„„„„„„„„„„„„„„„„„„„(19)附录Ⅲ软件设计„„„„„„„„„„„„„„„„„„„„„„„„(20)
xxx学院本科生毕业设计诚信声明
本人郑重声明:
所呈交的本科毕业设计,是本人在指导老师的指导下,独立进行研究工作所取得的成果,成果不存在知识产权争议,除文中已经注明引用的内容外,本设计不含任何其他个人或集体已经发表或撰写过的作品成果。
对本文的研究做出重要贡献的个人和集体均已在文中以明确方式标明。
本人完全意识到本声明的法律结果由本人承担。
作者签名:
二O一年月日
1
基于51单片机电子琴八音盒设计
xxx,xxx
(xxx学院电气工程学院,xxxxxxxxxxx)
摘要:
本文的主要内容是用AT89C52单片机为核心控制元件,设计一个八音盒。
利用单片机产生不同的频率来获得我要求的音阶,最终可随意弹奏出要表达的音符。
只要把一首歌曲的音阶对应频率关系,编写程序就可以达到我想要的曲目。
经此调试,所做的八音盒得到了应有的按键发音效果。
关键词:
AT89C52;八音盒;音阶
Keyboardmusicboxdesignbasedon51singlechipmicrocomputer
YINFugui,WUZhiRong
(ElectricalEngineeringCollege,LongdongUniversity,Qingyang745000,Gansu,)
Abstract:
ThemaincontentofthispaperistouseAT89C52microcontrollerasthecorecontrolelement,thedesignofamusicbox.Producedifferentfrequenciesobtainthescalewerequiretheuseofsingle-chip,finallyfreetoplaywanttoexpress.thecorrectcorrespondingfrequencycanachievewhatwewantmusic.Onthisbasis,theelectronicorganbepronunciationkeyeffect.
Keywords:
AT89C52;musicbox;scale
1引言
单片机因其体积小,功能强,价格低廉而得到广泛应用,同时随着我国经济的飞速发展,单片机在越来越多的领域得到了广泛的应用,现在国内的单片机多用于电话,玩具和LCD等产品,预计在未来,利用单片机发明的产品会越来越多,理解和掌握单片机的工作原理和使用技巧是必备的技能。
我所设计该产品时根据自身的兴趣和爱好设计的,通过对传统电子琴的认识和了解,知道了传统的电子琴是利用单片机汇编语言的编程来实现的,而且功能单一,只能弹奏而不能随意的播放音乐,我所设计的产品是基于对89C52单片机的深入理解,然后对传统电子琴小小的改革和创新,并且以简单的C语言程序替代了复杂的汇编语言程序。
我相信在电子琴的不断革新达到人们娱乐设备标准的时候,电子琴会被投入到批量生产之中。
2方案总体设计
本次设计的课题是基于51单片机的电子琴的设计,指标如下:
1)利用蜂鸣器作为发声部件。
2
2)一个数码管作为显示部件。
3)设置8个按键,实现高音、中音、低音的1、2、3、4、5、6、7、1的发音。
总体设计框架如图2-1所示
图2-1总体框架图
2.1方案对比
方案一:
采用单个的逻辑器件组合
我们知道计数器8253可以产生任意频率的方波频率信号,因此,我们只要把一首歌曲的音阶对应频率与计数器的频率对应起来就可通过计数器产生音乐了。
根据本实验要求,采用8279将键扫描得到的键值通过查表得到相应的8253的频率值,将从8253得到相对应的按键弹奏信号经过LM386进行放大,再用喇叭输出,就实现了简易电子琴的基本功能,也就完成了实验的要求
方案二:
用VHDL语言编程来实现
利用我们实验室先进的数字电路实验设备,我们可以采用VHDL语言编程来实现。
我们可以通过VDHL语言,对实验原理图的各个部分进行设计,通过编译,可以在计算机上下载此实验原理图,利用电路学习机上的芯片。
我们很快就可以设计出一个简单的电子琴。
并实现其功能[1]。
方案三:
采用STC89C52单片机
采用STC89C52单片机作为主控芯片,设置键盘、蜂鸣器等外围器件,另外还用到一些简单器件如:
一位数码管,和PNP型三极管等。
利用按键实现音符和音调的输入;一位的数码管进行被操作的按键显示:
用PNP型三极管实现低音频功率放大;最后用蜂鸣器发音。
3
方案比较:
方案一采用单个的逻辑器件组合实现。
这样虽然比较直观,逻辑器件分工鲜明,思路也比清晰,一目了然,但是由于元器件种类、个数繁多,而过于复杂的硬件电路也容易引起系统的精度不高、体积过大等不利因素。
方案二采用VHDL语言编程来实现电子琴的各项功能。
系统主要由电子琴发声模块、选择控制模块和储存器模块组成。
和方案一相比较,方案二就显得比较笼统,虽然我们可以看到用超高速硬件描述语言VHDL的优势,但本质上它只是把整个系统分为了若干个模块,而不牵涉到具体的硬件电路。
方案三与前两种方案相比,主控芯片采用STC89C52单片机,它是大规模集成电路技术发展的产物,具有高性能、高速度、体积小、价格低廉、稳定可靠、应用广泛的特点。
同时具有强大控制功能和灵活的编程实现特性,由于本设计主要用于人们娱乐方面,因此在设计上尽量使其安全以及简单易操作。
而第三种方案具有经济可行性、技术可行性、实物应用性。
所以我们选择第三种方案[2]。
2.2系统工作原理
由STC89C52的P1口8个按键控制DO,RE,MI,FA,SO,LA,XI,DO的各个音符,在由位于P0口的一位数码管显示出来,同时位于P3^7口的蜂鸣器发出声音。
发音原理:
其动力和时钟相同。
发条轮上带个较大的圆柱轮。
这柱面上按需要做了些凸点,对应的地方有一组发音的簧片,圆柱轮转动时就会刮上这些簧片。
每点一个音。
圆柱轮转动基本是恒速的,节拍就靠点的距离。
八音盒主要部分由滚筒和簧片两部分组成。
若要产生音频脉冲,只要算出某一音频的周期,再将周期除以2,即为半周期的时间。
利用定时器记时半周期时间,每当记时终止后就将P3^7反相,然后记时再反相。
就可在P3^7上得到此频率的脉冲。
利用STC89C52的内部定时器使其工作计数器模式下,改变计数值TH0及TL0以产生不同频率的方法产生不同音阶。
3硬件设计
3.1STC89C52芯片
STC89C52是一个低功耗,高性能CMOS8位单片机,片内含具有如下特点:
40个引脚(引脚图如图3-1所示),4kBytesFlash片内程序存储器,128bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDTC)电路,片内时钟振荡器[3]。
此外,STC89C52设计和配置了振荡频率可为0HZ并可通过软件设置省电模式。
空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。
同时该芯片还4
具有PDIP、TQFP和PLCC等三种封装形式,以适应不同产品的需求。
单片机引脚图如图3-1所示:
图3-1单片机引脚图
本系统采用单片机STC89C52为电子琴的控制核心,系统主要包括播放模块、安键控制模块。
下面对各模块的设计逐一进行论证比较。
3.2单片机复位部分
1)复位功能:
单片机复位电路就好比电脑的重启部分,当电脑在使用中出现死机,按下重启按钮电脑内部的程序从头开始执行。
单片机也一样,当单片机系统在运行中,受到环境干扰出现程序跑飞的时候,按下复位按钮内部的程序自动从头开始[4]。
2)复位原理:
单片机复位时只要保持RST引脚接2us的高电平即可。
在单片机启动0.1S后,电容C两端的电压持续充电为5V,这是时候10K电阻两端的电压接近于0V,RST处于低电平所以系统正常工作。
当按键按下的时候,开关导通,这个时候电容两端形成了一个回路,电容被短路,所以在按键按下的这个过程中,电容开始释放之前充的电量。
随着时间的推移,电容的电压在0.1S内,从5V释放到变为了1.5V,甚至更小。
根据串联电路电压为各处之和,这个时候10K电阻两端的电压为3.5V,甚至更大,所以RST引脚又接收到高电平。
单片机系统自动复位[5]。
3.3单片机晶振部分
外接晶振引脚XTAL1和TXAL2接外部晶振和微调电容的一端。
振荡电路的频率就是晶体的固有频率。
晶振电路结合单片机内部电路产生单片机所需的时钟频率。
晶振提高频率越高,单片机运行速度越快。
单片机一切指令的执行都是建立在晶振提供的时钟频率上。
5
晶振电路原理图如图3-2所示:
图3-2晶振电路原理图
3.4数码管部分
1)数码管的分类:
数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(即多一个小数点显示);按能显示多少个“8”可分为1位、2位、4位等等数码管;按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。
共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。
共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。
当某一字段的阴极为高电平时,相应字段就不亮共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。
数码管LED对应字母图如图3-3所示:
图3-3数码管LED灯对应字母图
2)共阴极数码管:
阴极数码管是把所有LED的阴极连接到共同接点COM,而每个LED的阳极分别为a、b、c、d、e、f、g及dp(小数点),如下图所示。
图中的8个LED分别和上面那个图中的A~DP各段相对应,通过控制各个LED的亮灭来显示数字。
当某一字段发光二极管的阳极为高电平时,相应字段就点亮。
当某一字段的阳极为低电平时,相应字段就不亮。
6
数码管引脚图如图3-4所示:
图3-4数码管所接引脚图
3)数码管显示部分的实现:
数码管通过PO口输入高低电平控制每个LED灯的亮灭,公共端接地线P0口接1K的上拉电阻。
数码管电路如图3-5所示:
图3-5数码管电路
以下为数码管显示字型对应的字符码表:
表3-1数码管显示数字的实现
显示字型
012345678
Dp,g,f,e,d,c,b,a101111111000011011011011110011111110011011101101111111011000011111111111
7
字符码0xbf0x860xdb0xcf0xe60xed0xfd0x870xff
3.5蜂鸣器部分
有源蜂鸣器与无源蜂鸣器的区别:
1)内部区别:
需要注意的是这里的“源”不是指电源,而是指震荡源。
也就是说,有源蜂鸣器内部带震荡源,所以只要一通电就会发声。
而无源内部不带震荡源,所以如果用直流信号无法令其发声。
有源蜂鸣器往往比无源的贵,就是因为里面多个震荡电路[6]。
2)外观区别:
两者的高度略有区别,有源蜂鸣器,高度为9mm,而无源蜂鸣器的高度为8mm。
如将两种蜂鸣器的引脚都朝上放置时,可以看出有绿色电路板的一种是无源蜂鸣器,没有电路板而用黑胶封闭的一种是有源蜂鸣器[7]。
3)辨别方式:
除了从外观上来看,进一步判断有源蜂鸣器和无源蜂鸣器,还可以用万用表电阻档Rxl档测试:
用黑表笔接蜂鸣器"-"引脚,红表笔在另一引脚上来回碰触,如果触发出咔、咔声的且电阻只有8Ω(或16Ω)的是无源蜂鸣器;如果能发出持续声音的,且电阻在几百欧以上的,是有源蜂鸣器[8]。
有源蜂鸣器直接接上额定电源(新的蜂鸣器在标签上都有注明)就可连续发声;而无源蜂鸣器则和电磁扬声器一样,需要接在音频输出电路中才能发声。
最终我选择无源蜂鸣器。
无源蜂鸣器的优点是:
1)便宜。
2)声音频率可控,可以做出“多来米发索拉西”的效果。
3)在一些特例中,可以和LED复用一个控制口有源蜂鸣器的优点是程序控制方便。
3.6按键部分
1)操作键设计:
常用的按键有三种:
机械触点式按键、导电橡胶式和柔性按键(又称触摸式键盘)。
机械触点式按键是利用机械弹性使键复位,手感明显,连线清晰,工艺简单,适合单件制造。
但是触点处易侵入灰尘而导致接触不良,体积相对较大。
导电橡胶按键是利用橡胶的弹性来复位,通过压制的方法把面板上所有的按键制成一块,体积小,装配方便,适合批量生产。
但是时间长了,橡胶老化而使弹力下降,同时易侵入灰尘[9]。
柔性按键是近年来迅速发展的一种新型按键,可以分为凸球型和平面型两种。
柔性按键最大特点是防尘、防潮、耐蚀,外形美观,装嵌方便。
而且外形和面板的布局、色彩、键距可按照整机的要求来设计[10]。
但是由于客观条件与经济能力有限,本系统采用机械触点式按键。
8
2)键盘设计:
键盘在单片机应用系统中是一个关键的部件,它能实现向计算机输入数据,传送命令等功能,是人工干预计算机的主要手段。
键盘可以分为2类:
独立连接式键盘和矩阵式键盘。
矩阵式键盘
单片机系统中,若按键较多时,通常采用矩阵式(也称行列式)键盘。
矩阵式键盘由行线和列线组成,按键位于行、列线的交叉点上。
显然,在按键数量较多时,矩阵式键盘较之独立式按键键盘要节省很多I/O口。
矩阵式键盘中,行、列线分别连接到按键开关的两端,行线通过上拉电阻接到+5V上.当无键按下时,行线处于高电平状态;当有键按下时,行、列线将导通,此时,行线电平将由与此行线相连的列线电平决定。
这是识别按键是否按下的关键。
独立连接式键盘
独立式按键是直接用I/O口线构成的单个按键电路,其特点是每个按键单独占用一根I/O口线,每个按键的工作不会影响其它I/O口线的状态。
独立式按键电路配置灵活,软件结构简单,但每个按键必须占用一根I/O口线,然而,在按键较多时,I/O口线浪费较大,不宜采用。
按键电路图如图3-6所示:
图3-6按键电路图
3)去抖动
键盘编程中主要考虑去抖动的问题。
当测试表明有键被按下之后,紧接着就进行去抖动处理。
因为键是机械开关结构,由于机械触点的弹性及电压突跳等原因,在触点闭合或断开的瞬间会出现电压抖动。
为保证键识别的准确,在电压信号抖动的情况下不能进行行状态输9
入。
硬件方法就是加去抖动电路,从根本上避免抖动的产生。
软件消抖,在第一次检测到有键按下时,执行一段延时程序之后,再检测此按键,如果第二次检测结果仍为按下状态,CPU便确认此按键己按下,消除了抖动。
4软件设计
4.1系统流程
在绘制传统流程图时注意几点:
1)熟练绘制传统流程图的基本元素,三种基本结构的流程图标准画法。
2)将复合条件转为多个单一条件。
3)循环注意初值、变化和终止。
4)算法的重点实现一定体现出来。
程序流程如图4-1所示:
图4-1流程图
10
4.2延时源代码
voidDelayMS(uintx)
{
uchart;
while(x--)for(t=0;t<120;t++);
}
4.3发音源代码
voidPlay(uchary)
{
uchari;
for(i=0;i<100;i++)
{
BEEP=~BEEP;//对蜂鸣器电平求反DelayMS(y);
}
BEEP=1;//给蜂鸣器一个高电平
}
4.4单个按键源代码:
if(K1==0)
{
DelayMS(10);//按键去抖动
if(K1==0)
{
num=1;
P0=table[num];
Play
(1);
}
while(!
K1);
}
11
5系统仿真与调试
5.1仿真软件简介
Proteus是由LabcenterElectronics开发的功能强大的单片机仿真软件,现在最新版本
6.9SP5。
Proteus与其他的仿真软件相比较,在下面的优点:
1)能仿真模拟电路、数字电路、数模混合电路;
2)能绘制原理图、PCB图;
3)几乎包括实际中所有使用的仪器;
4)其最大的亮点在于能够对单片机进行实物级的仿真。
从程序的编写,编译到调试,目标版的仿真一应俱全。
支持汇编语言和C语言的编程。
还可配合KeilC实现程序的联合调试,将Proteus中绘制的原理图作为实际中的目标板,而用KeilC集成环境实现对目标板的控制,与实际中通过硬件仿真器对目标板的调试几乎完全相同,并且支持多显示器的调试,即Proteus运行在一台计算机上,而KeilC运行在另一台计算机上,通过网络连接实现远程的调试。
5.2硬件调试
硬件调试是针对单片机部分进行的调试。
在上电之前,先确保电路中不存在断路或短路情况,这一工作是整个调试工作的第一步,也是非常重要的一个步骤。
在这部分调试中主要使用的工具是万用表,用来完成检测电路中是否存在断路或者短路情况的任务。
注意焊点之间,确保焊点没有短接在一起,同时注意焊点的美观,确保没有开路以及短路的现象出现。
在确保硬件电路正常且无异常情况(短路或断路)的情况下方可上电调试,上电调试的口的是检测单片机控制部分、数码管点亮部分、和音频转换电路硬件调试。
1)数码管LED电路调试:
接通电源,随机按下按钮可以看到数码福安显示数字。
2)键盘单片机控制部分调试:
上电后,随机按动键盘可以发现各个按键对应的音正确。
5.3软件调试
调试主要方法和技巧:
通常一个调试程序应该具有至少四种性能:
跟踪、断点、查看变量、更改数值。
整个程序是一个主程序调用各个子程序实现功能的过程,要使主程序和整个程序都能平稳运行,各个模块的子程序的正确与平稳运行必不可少,所以在软件调试的最初阶段就是把各个子程序进行分别调试。
12
Keil软件中生成程序的HEX软件图如图5-1所示:
图5-1生成相应程序的HEX软件
keil程序下载到仿真图如图5-2所示:
图5-2将keil程序下到仿真中
13
仿真电路图图5-3所示:
图5-3仿真图
另附实物图如图5-4所示
:
图5-4实物
14
5.4使用说明
1)单片机分别接VCC和GND使单片机处于供电状态。
2)接上TXD和RXD将程序导入单片机中。
3)按下六角开关,可到指示灯亮后,即可通过按键控制发音了,数码管会随按键变化显示出相应的数字。
6设计总结
总体来说,此次单片机课程设计使我收获良多,虽然课程设计的过程中遇到了很多困难与问题,但我最终还是完成了设计的任务及要求。
具体来说可以分为以下几点:
第一,不够细心,不够严谨(如因为粗心大意而焊错线);
第二,因对课本理论的掌握度不够导致编程出现错误;
第三,硬件方面,刚开始有的程序模块不能实现预期的效果,对于有的硬件,在实物制作过程中焊了比较多的排线,同时对于整体各元器件的布局都有很高的要求。
不过在向同学请教,各方面都有了不同程度的改善;
第四,在做人方面,我认识到,无论做什么事情,只要你足够坚强,有足够的毅力和决心,有足够的挑战困难的勇气,就没有什么办不到的。
这次课程设计中,经过我的努力,在仿真软件和实物上都实现了7个音符的发声,使我有了一定的成就感,也使我进一步熟悉和掌握了单片机的内部结构和工作原理,了解了单片机应用系统设计的基本方法和步骤,掌握了单片机仿真软件Proteus的使用方法和键盘、显示器在的单片机控制系统中的应用,同时也掌握了撰写课程设计报告的方法。
总之,通过这次课程设计,我都清楚明白了自己的能力有多深,想提高还得归于多锻炼,多动手,多向别人学习。
尤其在做各种东西时应该要特别的仔细小心,比如我在进行电路焊接时就将数码管搞错了,本应使用的共阴数码管被拿成了共阳数码管,然后发光二极管的极性焊反了,焊接的铁丝没有完全焊牢等问题,给自己和老师造成了许多不必要的麻烦,大大的浪费掉了宝贵的时间,这都是不应该出现的。
而对于一些软件来说,就必须了解软件各个方面的性质,不然,在一些小问题中也有可能造成不必要的错误。
另外,自己在理解老师所说的很多东西方面还不是很成熟,经常会反复去问老师一些同样的问题,其原因都是自己不仔细去揣摩老师所说的话的意思,导致自己无法按老师所要求的方面去做,而要反复去问老师反复强调的问题。
终上所述,这都是应该值得去注意和深思的,在做任何意见事情时,都要用百分百的态度去完成它,不能粗心大意了,不然有可能会浪费无比多的时间在一些不该出现的小问题上,比如虚焊。
从这次课程设计中不仅学到了很多做事的方法也学到了许多对人生应有的态度。
受益匪浅。
15
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 51 单片机 电子琴 八音盒 设计
![提示](https://static.bdocx.com/images/bang_tan.gif)