收藏 分享(赏)

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

上传人:weiwoduzun 文档编号:5026565 上传时间:2019-01-31 格式:DOCX 页数:51 大小:174.84KB
下载 相关 举报
基于51单片机简易电子琴设计.docx_第1页
第1页 / 共51页
基于51单片机简易电子琴设计.docx_第2页
第2页 / 共51页
基于51单片机简易电子琴设计.docx_第3页
第3页 / 共51页
基于51单片机简易电子琴设计.docx_第4页
第4页 / 共51页
基于51单片机简易电子琴设计.docx_第5页
第5页 / 共51页
点击查看更多>>
资源描述

1、- 1 -创新制作报告简易电子琴设计学 校:深圳职业技术学院 2013 年 11 月 12 日- 2 -摘要本设计主要研究基于 STC90C51 单片机的简易电子琴设计。它是以单片机作为主控核心,键盘、电脑音响、led 等外围器件构成;本设计硬件部分主要由最小系统,按键系统模块、led 显示模块和发声模块组成。其软件部分主要有主程序模块、定时中断程序、定时计数程序、显示程序。(1)最小系统:它是单片机应用系统的设计基础。它包括单片机的选择、时钟系统设计、复位电路设计等。(2)按键系统模块:本设计采用 24 个按键,其中 21 个按键用来显示 21 个音调,其它 3 个按键可以进行功能的切换。(

2、3)LED 显示模块:八个 LED,七个红色 LED 来显示音符,1 个绿色 LED 指示。(4)发声模块:此电子琴发音是用现成的电脑音响。本次设计首先对单片机设计简易电子琴仔细分析,接着制作硬件电路和编写软件的程序,最后进行软硬件的调试运行。并且从原理图,主要芯片,各模块的原理和各个模块的程序调试来阐述。利用单片机产生不同频率来获得我们要求的音阶,实现高、中、低共 21 个音符的发音和显示和音乐播放时的控制显示,并且能自动播放程序中编排的音乐,同时还有保存兵播放已按下的音符。系统运行稳定,其优点是硬件电路简单,软件功能完善,控制系统可靠.- 3 - 4 -目录1.概述 41.1 设计背景 4

3、1.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 播放音乐模块 16- 5 -3.4 录音模块 204.1 硬件调试 234.2 软件调试 235 课程设计体会 附 1 源程序代码 24- 6 -1.概述1.1 设计背景由于本课程要做一个创新制作,而老师给的参考题中觉得电子琴这课题不错,因为电子琴能陶冶人的情操,同时使人更快乐,他能真正影响人的心情,因此

4、决定做。单片机技术使我们可以利用软硬件来实现电子琴的功能,从而可以实现电子琴的微型化,可以用作玩具琴、音乐转盘以及音乐童车等等。并且可以进行一定的功能扩展。鉴于传统电子琴可以用键盘上的“1”到“A”键演奏从低 So 到高 DO 等 11 个音,从而也可以通过单片机实现对十个按键的扩展,实现七个音符键的高、中、低 21 个音调的显示播放和音乐的自动播放。1.2 设计意义可以了解音乐的基本知识;加深对单片机的使用;学会自己做项目;1.3 设计任务实现电子琴发声控制系统;要求电路实现如下功能:利用现成电脑音响作为发声部件,21 个音符键,实现高音、中音、低音的1、2、3、4、5、6、7 的发音。并在

5、存储几首歌曲的内容,可以实现自动播放。2.系统总体方案及硬件设计2.1 总体设计音乐是有由不同的音阶组成的,而不同的音阶又是由不同的频率发出的,那么产生不同的频率,就可以发出不同的音乐了。而利用单片机就可以产生不- 7 -同的频率的方波,因此选择单片机为为主来设计。通过程序编写实现单片机输出不同的频率,输出的方波信号再通过接口给电脑音响,让其发声。同时电子琴加入 led 用来显示。本设计的主要工作是程序编写,通过程序让电子琴实现音乐演奏,歌曲播放以及记录已按下的音符,并播放,最后实现 led 显示。而硬件主要有单片机最小系统,键盘模块,发声模块,还有一个电源模块。总体框图 2按键输入直流电源L

6、ED 显示电脑音响单片机- 8 -2.2 硬件设计电路图 1注:本系统有主控单片机、键盘、led 显示模块、发声模块以及电源组成。2.2.2 单片机的最小工作系统:这里用的单片机的型号是 STC90C516RD+,配以 12M 的晶振,以及复位电路供电电路构成最小系统。2.2.3 电源设计:这里电源直接用直流 5v 电源;2.2.4 按键设计:- 9 -按键采用 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-

7、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 显示不同,当低音音符播放时

8、,LED 闪亮,当是中音时,LED也闪亮,但是闪亮的频率更快,当是高音时,LED 全亮,这是通过调节 LED 亮灭时间来实现,也可以说是 PWM 吧。还有一个绿色 LED 指示当前状态,当电子琴处于录音时,LED 亮,否则,灭;2.2.6 发声模块:这里没有自己做功放,而是使用电脑的音响。3 系统软件的的编写- 10 -3.1 电子琴基本原理首先的弄清楚电子琴的基本原理:声音的频谱范围约在几十到几千赫兹,若能利用程序来控制单片机的某个口线不断输出“高”“低”电平,则在该口线上就能产生一定频率的方波,讲该方波接上喇叭就能发出一定频率的声音,若再利用程序控制“高”“低”电平的持续时间,就能改变输出

9、波形的频率从而改变音调。乐曲中,每个音符对应着确定的频率,下表给出各音符频率。如果单片机某个口线输出“高”“低”电平的频率和某个音符的频率一样,那么将此口线接上喇叭就可以发出此音符的声音。根据这个原理就能设计出,对于单片机来说要产生一定频率的方波大致是先将某口线输出高电平然后延迟一段时间再输出低电平,如此循环的输出就会产生一定频率的方波,通过改变延迟的时间就可以改变输出方波的频率。单片机内部有两个定时计数器 T1 和 T0,单片机的定时计数器实际上是个计数装置,它既可以对单片机内部晶振驱动时钟计数,也可以对外部输入的脉冲计数,对内部晶振计数时称为定时器,对外部时钟计数时称为计数器。当对单片机内

10、部晶振驱动时钟计数时,每个机器周期定时计数器的计数值就加,当计数值达到计数最大值时计数完毕并通知单片机。音乐中各个音符的频率表如下:- 11 -音符频率表 3弄懂后开始程序的实现- 12 -3.2 主程序模块N Y KeyNo=21 KeyNo3) cont=0; - 19 -中断函数中的余值在主程序中是这样赋值的:yuzhi=(KeyNo+3)%7; /判断 DO RE MI FA.根据 yuzhi 判断 DO、RE。当时 DO 时,亮一个 LED 灯,当时 RE 时,亮两个LED./21 个音符的频率对应的 T 值Uint codeTone_Delay_Table=63628,63835,

11、64021,64103,64260,64400,64524,64580,64684,64777,64820,64898,64968,65030,65058,65110,65157,65178,65217,65252,65283void main()uchar Keystate=0;Timer_Init();led=0x00; /初始化 ledled_zhishi=0;指示 LED 灭(进入演奏状态,若进入录音状态则亮)while(1)Keystate=KeyState();/如果有按键按下,返回 1if(Keystate)key_scan();if(KeyNo4); /取出音符对应的序号,如/

12、Music_One2=0x82,音符代表 MusicYinFu8jiepai=(*(p1+i)/取出节拍数 yinfu_led=yinfu%7; /音符对应 LED 显示号if(yinfu!=0) - 24 -th0=*(p2+(yinfu-1)*2); tl0=*(p2+(yinfu-1)*2+1); TR0=1;ET0=1; else /如 Music_One1=0x02,这里的音符为 0,表停顿TR0=0;Beep=1;for(j=jiepai;j0;-j) led=LED_Disyinfu_led-1;Delayms(180);/一拍延时时间key_scan(); if(KeyNo=2

13、3) /退出播放ET0=1;break;else if(KeyNo=22)/下一曲if(p1=Music_One) 若正在播放第一首,那么下一曲就是第二首- 25 -ET0=0;p1=Music_Two;else if(p1=Music_Two)/若是第二首,下一首是第三首ET0=0;p1=Music_Three;elseET0=0;p1=Music_One;/同理i=0;KeyNo=26; /一定要改变 KeyNo 的值,否则只播放一个音符Delayms(1000);/歌曲切换,停顿一下break;/跳出之前播放的歌曲,以使播放下一曲 if(*(p1+i+1)=0XFF) /判断歌曲是否播放

14、完毕ET0=0;Beep=0;/暂停一下if(p1=Music_One) /如果刚刚结束第一首歌,播放第二首歌i=0;- 26 -p1=Music_Two;Delayms(2000);else if(p1=Music_Two) /如果刚刚结束第二首歌,播放第三首歌i=0;p1=Music_Three;Delayms(2000);else /如果刚刚结束第三首歌,播放第一首歌i=0;p1=Music_One;Delayms(3000);- 27 -TR0=0; ET0=0;if(KeyNo=23) ET0=1;break; ET0=1; 3.4 录音函数实现:NY主程序检测是否有按键按下LED

15、指示灯亮关定时器关- 28 -KeyNo21 KeyNo21 KeyNo=23程序框图:5程序实现:void Record_yinfu()uchar keystate,i=0;uchar history100=0; /记录按下的键音,初始化led_zhishi=1; /开灯while(KeyState();/等待按键释放while(1)keystate=KeyState();/按键状态检测if(keystate)按键扫描定时器开启,播放按键所对应的音符,同时LED 灯显示那个音符按下播放已按下的键,播放完毕后,绿色 LED 指示灯灭存储按下键的键值,以及按下键的时间- 29 -key_scan

16、();if(KeyNo=23) Recordonoff=Recordonoff;/退出录音else if(KeyNo21)/音符键do /这里用 do while 循环能使音符播放随按键松开而停止,/同时计时也是随按键松开而停止计时,这样能比较准确计算按键按下的时间key_scan(); if(KeyNo21)yuzhi=(KeyNo+3)%7; /判断 DO RE MI FA.YinFu_DiZhongGao_Flag(KeyNo);th0=Tone_Delay_TableKeyNo/256;tl0=Tone_Delay_TableKeyNo%256; TR0=1;TR1=1;history

17、i*2=KeyNo;/存储按键的键的音符- 30 -historyi*2+1=Record_Timer;/存储按键按下不松的时间keystate=KeyState();while(keystate);/如果按键松开,表示按下的一个音符结束i+; /接下来按的键就是下一个音符else/表示没键按下,那得关闭定时器,led 灭led=0x00;Record_Timer=0; /按键按下定时数清零,下一个按键按下后从新计时TR0=0; TR1=0;if(!Recordonoff)/按下录音播放键,回放按下的音符for(i=0;historyi*2+1!=0;i+)/historyi*2+1存的是按键对/应的音符yuzhi=(historyi*2+3)%7; /判断 DO RE MI FA.

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 学术论文 > 毕业论文

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报