基于某某51单片机简易电子琴设计.doc
48页word创新制作报告简易电子琴设计学 校:某某职业技术学院 2013年11月12日摘要本设计主要研究基于STC90C51单片机的简易电子琴设计它是以单片机作为主控核心,键盘、电脑音响、led等外围器件构成;本设计硬件局部主要由最小系统,按键系统模块、led显示模块和发声模块组成其软件局部主要有主程序模块、定时中断程序、定时计数程序、显示程序〔1〕最小系统:它是单片机应用系统的设计根底它包括单片机的选择、时钟系统设计、复位电路设计等〔2〕按键系统模块:本设计采用24个按键,其中21个按键用来显示21个音调,其它3个按键可以进展功能的切换〔3〕LED显示模块:八个LED,七个红色LED来显示音符,1个绿色LED指示〔4〕发声模块:此电子琴发音是用现成的电脑音响本次设计首先对单片机设计简易电子琴仔细分析,接着制作硬件电路和编写软件的程序,最后进展软硬件的调试运行并且从原理图,主要芯片,各模块的原理和各个模块的程序调试来阐述利用单片机产生不同频率来获得我们要求的音阶,实现高、中、低共21个音符的发音和显示和音乐播放时的控制显示,并且能自动播放程序中编排的音乐,同时还有保存兵播放已按下的音符。
系统运行稳定,其优点是硬件电路简单,软件功能完善,控制系统可靠.目录1.3 设计任务4 2.4电源设计: 2.5按键设计: 2.6LED灯设计: 2.7发声模块: 3.系统软件的的编写 7 3.1电子琴根本原理 7 3.2主程序 9 3.3播放音乐模块 16 3.4录音模块 204.1硬件调试 234.2软件调试 235课程设计体会 附1 源程序代码24由于本课程要做一个创新制作,而教师给的参考题中觉得电子琴这课题不错,因为电子琴能陶冶人的情操,同时使人更快乐,他能真正影响人的心情,因此决定做单片机技术使我们可以利用软硬件来实现电子琴的功能,从而可以实现电子琴的微型化,可以用作玩具琴、音乐转盘以与音乐童车等等并且可以进展一定的功能扩展鉴于传统电子琴可以用键盘上的“1〞到“A〞键演奏从低So到高DO等11个音,从而也可以通过单片机实现对十个按键的扩展,实现七个音符键的高、中、低21个音调的显示播放和音乐的自动播放①可以了解音乐的根本知识;②加深对单片机的使用;③学会自己做项目;1.3 设计任务实现电子琴发声控制系统;要求电路实现如下功能:利用现成电脑音响作为发声部件,21个音符键,实现高音、中音、低音的1、2、3、4、5、6、7的发音。
并在存储几首歌曲的内容,可以实现自动播放音乐是有由不同的音阶组成的,而不同的音阶又是由不同的频率发出的,那么产生不同的频率,就可以发出不同的音乐了而利用单片机就可以产生不同的频率的方波,因此选择单片机为为主来设计通过程序编写实现单片机输出不同的频率,输出的方波信号再通过接口给电脑音响,让其发声同时电子琴参加led用来显示本设计的主要工作是程序编写,通过程序让电子琴实现音乐演奏,歌曲播放以与记录已按下的音符,并播放,最后实现led显示而硬件主要有单片机最小系统,键盘模块,发声模块,还有一个电源模块直流电源LED显示 单片机按键输入电脑音响 总体框图2电路图1注:本系统有主控单片机、键盘、led显示模块、发声模块以与电源组成这里用的单片机的型号是STC90C516RD+,配以12M的晶振,以与复位电路供电电路构成最小系统2.2.3电源设计:这里电源直接用直流5v电源;2.2.4按键设计: 按键采用4*6扫描;4根行线接P10-P13,六根列线接P14-P17以与P20,P21口共24个按键,0-20代表音符键,0-6代表低音1,2,3,4,5,6,7;7-13代表中音1,2,3,4,5,6,7;14-20代表高音1,2,3,4,5,6,7;21号按键表示播放歌曲键,当按下21号键,进入播放歌曲函数,当按下22号键时,播放下一首歌曲,当按下23键时,退出播放返回主程序。
而在主程序中时,代表演奏状态,当按下23号键时,进入录音状态,此时有个绿色的指示灯会亮而进入录音后,再按一次23键,指示灯灭,退出录音状态,返回主程序2.2.5LED灯设计:七个红色的LED代表按键的音符DO,RE,MI...分别接到P0口的各个I端口音符DO时,一个LED亮,音符MI时,2个LED亮同时为了区分高中低音,三个八度LED显示不同,当低音音符播放时,LED闪亮,当是中音时,LED也闪亮,但是闪亮的频率更快,当是高音时,LED全亮,这是通过调节LED亮灭时间来实现,也可以说是PWM吧还有一个绿色LED指示当前状态,当电子琴处于录音时,LED亮,否如此,灭;2.2.6发声模块: 这里没有自己做功放,而是使用电脑的音响3系统软件的的编写首先的弄清楚电子琴的根本原理:声音的频谱X围约在几十到几千赫兹,假如能利用程序来控制单片机的某个口线不断输出“高〞“低〞电平,如此在该口线上就能产生一定频率的方波,讲该方波接上喇叭就能发出一定频率的声音,假如再利用程序控制“高〞“低〞电平的持续时间,就能改变输出波形的频率从而改变音调乐曲中,每个音符对应着确定的频率,下表给出各音符频率如果单片机某个口线输出“高〞“低〞电平的频率和某个音符的频率一样,那么将此口线接上喇叭就可以发出此音符的声音。
根据这个原理就能设计出,对于单片机来说要产生一定频率的方波大致是先将某口线输出高电平然后延迟一段时间再输出低电平,如此循环的输出就会产生一定频率的方波,通过改变延迟的时间就可以改变输出方波的频率单片机内部有两个定时计数器T1和T0,单片机的定时计数器实际上是个计数装置,它既可以对单片机内部晶振驱动时钟计数,也可以对外部输入的脉冲计数,对内部晶振计数时称为定时器,对外部时钟计数时称为计数器当对单片机内部晶振驱动时钟计数时,每个机器周期定时计数器的计数值就加,当计数值达到计数最大值时计数完毕并通知单片机音乐中各个音符的频率表如下:音符频率表3弄懂后开始程序的实现 开始初始化定时器T0,T1、led关闭定时器,LED灯熄灭检测有无按键按下 N Y 按键扫描开启定时器,开中断KeyNo==21 KeyNo<21 KeyNo==23 进入录音模式进入函数播放曲目 Y 按键是否松开根据KeyNo,喇叭发声根据KeyNo,LED显示 Y关闭定时器主程序框图参数计算发音原理假如要产生音频脉冲,只要算出某一音频的周期〔1/频率〕,再将此周期除以2,即为半周期的时间。
利用定时器计时半周期时间,每当计时终止后就将P1.0反相,然后重复计时再反相就可在P1.0引脚上得到此频率的脉冲利用AT89C51的内部定时器使其工作计数器模式〔MODE1〕下,改变计数值TH0与TL0以产生不同频率的方法产生不同音阶计算举例例如,频率为523Hz,其周期T=1/523=1912μs,因此只要令计数器计时956μs/1μs=956,每计数956次时将I/O反相,就可得到中音DO〔523Hz〕计数脉冲值与频率的关系式是:N=fi÷2÷fr,式中,N是计数值;fi是机器频率〔晶体振荡器为12MHz时,其频率为1MHz〕;fr是想要产生的频率其计数初值T的求法如下:T=65536-N=65536-fi÷2÷fr例如:设K=65536,fi=1MHz,求中音DO〔261Hz〕T=65536-N=65536-fi÷2÷fr=65536-1000000÷2÷fr=65536-500000/fr,中音DO的T=65536-500000/523=645803.2.3 计算结果〔1〕单片机12MHZ晶振,中音符与计数T0相关的计数值如表所示:音符频率〔HZ〕计数值〔T值〕音符频率〔HZ〕计数值〔T值〕低1DO26263628#4FA#74064860#1DO#27763737中5SO78464898低2RE29463835#5SO#83194934#2RE#31163928中6LA88064968低3MI33064021#6LA#93264994低4FA34964103中7SI96865030#4FA#37064185低1DO104665058低SO39264260#1DO#110965085#5SO#41564331高2RE117565110低6LA44064400#2RE#124565134#6LA#46664463高3MI131865157低7SI49464524高4FA139765178中1DO52364580#4FA#149065198#1DO#55464633高5SO156865217中2RE58764633#5SO#166165235#2RE#62264884高6LA176065252中3MI65964732#6LA#186565268中4FA69864820高7SI196765283采用查表程序进展查表时,可以为这个音符建立一个表格,有助于单片机通过查表的方式来获得相应的数据:低音0-19之间,中音在20-39之间,高音在40-59之间。
用单片机播放音乐,或者弹奏电子琴,实际上是按照特定的频率,输出一连串的方波为了输出适宜的方波,首先应该知道音符与频率的关系〔2〕音调数据表曲调值DELAY曲调值DELAY调4/4125ms调4/462ms调3/4187ms调3/494ms调2/4250ms调2/4125ms上表中的频率数值,有些过多,去掉不常用的黑键频率,只是把白键对应的数据存放在单片机中,即可满足绝大局部的应用需求定义音调数据表的程序如下:DW 63628,63835,64021,64103,64260,64400,64524 ;64580,低音区:1 2 3 4 5 6 7 DW 64580,64671,64777,64820,64898,64968,65030 65058中音区:1 2 3 4 5 6 7 DW 65058,65110,65157,65178,65217,65252,65283 65312高音区:1 2 3 4 5 6 7把这个数据表,放在程序中,需要播音的时候,就从表中取出一个数据送到定时器,当定时器溢出中断的时候,再对输出引脚取反,那。





