资源描述:
《基于AVR单片机的电子琴设计》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、一、功能说明1.能通过键盘输入基本的音阶,并在LED上显示,蜂鸣器同步发出声音。输入的音阶将被存储起来,可以被重放。2.编辑完成后,可播放编辑好的音乐。3.可对音乐进行基本的操作:播放,暂停,停止,重输入,快进,后退。二、应用价值1.作为手机音乐编辑器。2.作为的模拟电子琴(比如,放在婴儿车上)。3.作为定音哨。……三、实现方案1.硬件设计思想和电原理图。2.通过TIMER0输出方波,作为音阶,以TIMER1延时,产生节拍,通过蜂鸣器播放出来。3.由键盘输入数据、控制播放,由LED显示。电原理图如下:连线照片:软件设计思想和流程图。每个play,pause
2、等(暂称之为执行函数),都只执行很短的时间,放在while(state=?)循环内部,中断函数只负责改变state的值。数组定义:Music_arr[歌曲数组名][状态位];歌曲数组名[音频][节拍];共五个;下图仅表示功能定义,代表由上而下的设计结构。不代表程序流程。4位led代表意义:1.模式选择,P,E;2.曲目序号,1-5;3.播放模式时为当前状态,state为空时不显示4.音阶0-7,播放时为播放的音阶,编辑时为输入的音阶。中断处理子过程程序流程main()软件详细功能:当键盘被按下时,触发外部中断,中断函数更改全局状态变量,主函数不断扫描这些变
3、量,从而调用相应的函数处理。以下简单介绍几个函数的功能:·play函数:播放预存数组中的一个音节。·stop函数:停止播放。·pause函数:暂停播放,同时记录下当前播放的数组元素的位置,等待继续播放。·>>,<<:播放状态时,前进一首和后退一首。编辑状态时,升高或降低八度,从而可以在覆盖几乎全部音域·当处于编辑状态时,delete退格键,reset重新输入键。0-7为音阶,存入数组中。程序源代码见附一。四.系统测试过程及测试数据。系统测试过程随着开发过程同时进行,我们实行的是边开发,边测试的思路。开发过程及进度表如下:起始阶段:定义键盘功能(详见附二)1
4、.6月13日,可以通过TIMER0输出方波,作为音阶,以TIMER1延时,产生节拍,通过蜂鸣器播放出来发出各种频率的声音。定义了1-7各个音阶的频率。写出发音函数,作为底层接口,可以在程序中直接调用。方便以后的进程。(测试代码见附三)2.6月16日,能通过键盘输入基本的音阶,并在LED上显示,蜂鸣器同步发出声音。通过键盘输入,编辑完成音乐,数据存入一个定义的数组中。编辑完成后,可将数组中的数据按照预定的方式通过单片机输出到喇叭中,播放编辑好的音乐。数组中预存《喀秋莎》,可以下载程序听到美妙的音乐播放出来。(测试代码见附四)3.6月20日,完成,并开始准备相
5、应的设计报告及其他文档。(测试代码见附一)五.设计所需资源。硬件资源:AVR开发板一块,扬声器一个。软件资源:iccavr,avrstudio软件。人力资源:组内全体成员。六.成员分工和工作情况。李晓:播放函数编写,键盘定义。杨金龙:软件整体架构,软件调试。李钰:相关文档整理,ppt,网页制作。各成员基本完成各自份内的任务。附一:#include"config.h"//决定是否播放,全局变量/////////uint16*p;//歌曲选择指针uint8list=0;//歌曲选择变量uint8input=1;uint8pause=1;uint8state=0
6、,stop=1,play=1,key;uint8MUSIC_DATA[50][2];uint8i=0,length=50,key_buffer;//i歌曲播放指针//671235671flashuint16Mode_Data[16]={440,494,523,587,659,698,784,880,998,1046,1156,1318,1396,1568,0};//存放声音的频率/************************************音乐产生函数**功能:输出频率为x的方波,延时yMS**范围:x:100-20000Hz,0:不发声**y
7、:0-65536MS************************************/externvoidsound(uint16i){//uint16x;//x=music_data[i][0];//取音乐的频率数据if(i!=0){//x=;//1M时钟数据计算OCR1A=500000/i;//比较值赋值TCCR1A=0x40;//允许比较反转输出}else{TCCR1A=0x00;//频率为0,休止符,不发声}}/*************************************延时函数:1M时钟时为MS***************
8、**********************/externvoid