基于51单片机简易电子琴设计

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

-1-创新制作报告简易电子琴设计学校:深圳职业技术学院2013年11月12日-2-摘要本设计主要研究基于STC90C51单片机的简易电子琴设计。它是以单片机作为主控核心,键盘、电脑音响、led等外围器件构成;本设计硬件部分主要由最小系统,按键系统模块、led显示模块和发声模块组成。其软件部分主要有主程序模块、定时中断程序、定时计数程序、显示程序。(1)最小系统:它是单片机应用系统的设计基础。它包括单片机的选择、时钟系统设计、复位电路设计等。(2)按键系统模块:本设计采用24个按键,其中21个按键用来显示21个音调,其它3个按键可以进行功能的切换。(3)LED显示模块:八个LED,七个红色LED来显示音符,1个绿色LED指示。(4)发声模块:此电子琴发音是用现成的电脑音响。本次设计首先对单片机设计简易电子琴仔细分析,接着制作硬件电路和编写软件的程序,最后进行软硬件的调试运行。并且从原理图,主要芯片,各模块的原理和各个模块的程序调试来阐述。利用单片机产生不同频率来获得我们要求的音阶,实现高、中、低共21个音符的发音和显示和音乐播放时的控制显示,并且能自动播放程序中编排的音乐,同时还有保存兵播放已按下的音符。系统运行稳定,其优点是硬件电路简单,软件功能完善,控制系统可靠.-3-目录1.概述41.1设计背景41.2设计意义41.3设计任务42.系统总体方案及硬件设计42.1总体设计42.2硬件设计62.3单片机的最小工作系统62.4电源设计:2.5按键设计:2.6LED灯设计:2.7发声模块:3.系统软件的的编写73.1电子琴基本原理73.2主程序93.3播放音乐模块163.4录音模块204.1硬件调试234.2软件调试235课程设计体会附1源程序代码24-4-1.概述1.1设计背景由于本课程要做一个创新制作,而老师给的参考题中觉得电子琴这课题不错,因为电子琴能陶冶人的情操,同时使人更快乐,他能真正影响人的心情,因此决定做。单片机技术使我们可以利用软硬件来实现电子琴的功能,从而可以实现电子琴的微型化,可以用作玩具琴、音乐转盘以及音乐童车等等。并且可以进行一定的功能扩展。鉴于传统电子琴可以用键盘上的“1”到“A”键演奏从低So到高DO等11个音,从而也可以通过单片机实现对十个按键的扩展,实现七个音符键的高、中、低21个音调的显示播放和音乐的自动播放。1.2设计意义①可以了解音乐的基本知识;②加深对单片机的使用;③学会自己做项目;1.3设计任务实现电子琴发声控制系统;要求电路实现如下功能:利用现成电脑音响作为发声部件,21个音符键,实现高音、中音、低音的1、2、3、4、5、6、7的发音。并在存储几首歌曲的内容,可以实现自动播放。2.系统总体方案及硬件设计2.1总体设计音乐是有由不同的音阶组成的,而不同的音阶又是由不同的频率发出的,那么产生不同的频率,就可以发出不同的音乐了。而利用单片机就可以产生不同的频率的方波,因此选择单片机为为主来设计。通过程序编写实现单片机输出不同的频率,输出的方波信号再通过接口给电脑音响,让其发声。同时电子琴加入led用来显示。本设计的主要工作是程序编写,通过程序让电子琴实现音乐演奏,歌曲播放以及记录已按下的音符,并播放,最后实现led显示。而硬件主要有单片机最小系统,键盘模块,发声模块,还有一个电源模块。-5-总体框图22.2硬件设计电路图1注:本系统有主控单片机、键盘、led显示模块、发声模块以及电源组成。按键输入直流电源LED显示电脑音响单片机-6-2.2.2单片机的最小工作系统:这里用的单片机的型号是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发声模块:这里没有自己做功放,而是使用电脑的音响。-7-3系统软件的的编写3.1电子琴基本原理首先的弄清楚电子琴的基本原理:声音的频谱范围约在几十到几千赫兹,若能利用程序来控制单片机的某个口线不断输出“高”“低”电平,则在该口线上就能产生一定频率的方波,讲该方波接上喇叭就能发出一定频率的声音,若再利用程序控制“高”“低”电平的持续时间,就能改变输出波形的频率从而改变音调。乐曲中,每个音符对应着确定的频率,下表给出各音符频率。如果单片机某个口线输出“高”“低”电平的频率和某个音符的频率一样,那么将此口线接上喇叭就可以发出此音符的声音。根据这个原理就能设计出,对于单片机来说要产生一定频率的方波大致是先将某口线输出高电平然后延迟一段时间再输出低电平,如此循环的输出就会产生一定频率的方波,通过改变延迟的时间就可以改变输出方波的频率。单片机内部有两个定时计数器T1和T0,单片机的定时计数器实际上是个计数装置,它既可以对单片机内部晶振驱动时钟计数,也可以对外部输入的脉冲计数,对内部晶振计数时称为定时器,对外部时钟计数时称为计数器。当对单片机内部晶振驱动时钟计数时,每个机器周期定时计数器的计数值就加,当计数值达到计数最大值时计数完毕并通知单片机。音乐中各个音符的频率表如下:-8-音符频率表3弄懂后开始程序的实现-9-3.2主程序模块NYKeyNo==21KeyNo21KeyNo==23YY主程序框图参数计算发音原理若要产生音频脉冲,只要算出某一音频的周期(1/频率),再将此周期除以2,即为半周期的时间。利用定时器计时半周期时间,每当计时终止后就将P1.0反相,然后重复计时再反相。就可在P1.0引脚上得到此频率的脉冲。利用AT89C51开始初始化定时器T0,T1、led开启定时器,开中断进入录音模式进入函数播放曲目关闭定时器,LED灯熄灭根据KeyNo,LED显示按键扫描根据KeyNo,喇叭发声检测有无按键按下按键是否松开关闭定时器-10-的内部定时器使其工作计数器模式(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=64580。3.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-11--59之间。用单片机播放音乐,或者弹奏电子琴,实际上是按照特定的频率,输出一连串的方波。为了输出合适的方波,首先应该知道音符与频率的关系。(2)音调数据表曲调值DELAY曲调值DELAY调4/4125ms调4/462ms调3/4187ms调3/494ms调2/4250ms调2/4125ms上表中的频率数值,有些过多,去掉不常用的黑键频率,只是把白键对应的数据存放在单片机中,即可满足绝大部分的应用需求。定义音调数据表的程序如下:DW63628,63835,64021,64103,64260,64400,64524;64580,低音区:1234567DW64580,64671,64777,64820,64898,64968,6503065058中音区:1234567DW65058,65110,65157,65178,65217,65252,6528365312高音区:1234567把这个数据表,放在程序中,需要播音的时候,就从表中取出一个数据送到定时器,当定时器溢出中断的时候,再对输出引脚取反,那么,在扬声器中,即可听到上表中频率的声音。3.2主程序中涉及的函数讲解:voidYinFu_DiZhongGao_Flag(ucharkeyval){if(keyval7)flag_yinfu_dizhonggao=1;//低音elseif(keyval14)flag_yinfu_dizhonggao=2;//中音elseif(keyval21)flag_yinfu_dizhonggao=3;//高音}-12-此函数是根据按下键值来确定音符是高音、中音还是低音flag_yinfu_dizhonggao=1代表低音;lag_yinfu_dizhonggao=2;代表中音。flag_yinfu_dizhonggao=3;代表高音。。而LED显示函数(定时器1中断服务函数)会根据lag_yinfu_dizhonggao的值来显示voidTimer_Init(){TMOD=0x11;//定时器T0,T1设置为方式1,TH1=0xD8;//10ms中断一次TL1=0xF0;TH0=th0;TL0=tl0;IE=0x82;//开启总中断和定时器T0,T1溢出中断ET1=1;IP=0x02;//T0优先于T1}定时器0用来产生不同方波频率,使音响发声定时器1用来控制LED显示,当工作在演奏模式时,按下音符键时,判断音符键是高音还是中音或者低音,当是高音时,LED全亮,占空比为1,当是中音时,LED快速闪烁,占空比为1/2;当是低音时,LED相对较慢的闪烁,占空比为1/4;以下是中断服务程序:voidplay_Tone()interrupt1using0//定时器T

1 / 37
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功