课程设计报告-电子琴.docx_第1页
课程设计报告-电子琴.docx_第2页
课程设计报告-电子琴.docx_第3页
课程设计报告-电子琴.docx_第4页
课程设计报告-电子琴.docx_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

合肥工业大学计算机学院创新设计报告设计题目: 电子琴音乐发生器 专 业: 电子信息科学与技术 班 级: 10-01班 组 长:副 组 长:组 员:2012年6月18日2012年7月15日摘要:本系统采用Atmel89s52单片机控制,主要利用了键盘矩阵模块和蜂鸣器模块来对电子琴进行设计,通过键盘扫描程序的识别,使用单片机的定时/计数器延时。可以大致准确的来发出所需的音调(即1,2,3,4,5,6,7这7个音符)。关键字:Atmel89s52,键盘扫描,定时器设计题目及要求:1:能够通过键盘演奏音符。2:能够保存演奏的音乐,并实现回放。3:有音调调整功能(如:C调,G调)。4: 可以自由选择高音、中音、低音。5: 要求有单片机硬件系统框图,电路原理图,软件流程图。一、系统方案: 总体方案的方框图如下:定时器控制TH0与TL0蜂鸣器频率选择声调选择 键盘扫描Atmel89S52控制模块二、单元电路: 1.电路原理图: Proteus 软件制作的原理图 矩阵键盘原理图: 单片机最小系统原理图:三、控制算法: 对于电子琴来说,其主要原理是利用单片机某个口线不断的输出“高”“低”电平,则在该口在线就能产生一定频率的方波,将该方波接上喇叭就能发出一定频率的声音,若再利用过程控制“高”“低”电平的持续时间,就能改变输出波形的频率,从而改变音调。对于AT89C2051单片机来说要产生一定频率的方波大致是先将某口线输出高电平然后延时一段时间再输出低电平,如此循环的输出就会产生一定频率的方波,通过改变延时的时间就可以改变输出方波的频率,而单片机延时主要有两种方法:1 使用循环语句来实现延时,让单片机循环的执行某条指令然后根据单片机每条指令运行的时间以及循环的次数来计算延时时间。2 使用单片机的定时/计数器延时。AT89S52单片机内部有两个16位的定时/计数器T0和T1,当对单片机的内部晶振驱动时钟计数时,每个机器周期定时/计数器的计数值就加1,当计数值达到计数最大值时计数完毕并通知单片机的CPU;对外部输入的时钟信号计数时,外部时钟的每个时钟上升沿定时/计数器的计数值就加1,当计数值达到计数最大值时计数完毕并通知单片机的CPU。因此,如果知道单片机的机器周期或者外部输入时钟信号的周期,单片机就可以根据定时器的计数值计算出定时的时间。 本实验采用第二种方式:计数初值的计算方法:用最大计数量减去需要的计数次数即可。例:如果T0运行于定时状态,单片机的晶振是12MHz,要求定时lOOus,那么定时器要计 100个机器周期,当TO工作在工作方式O时计数初值应该是8192100=8092;工作在方式1时的计数初值应该是65536-100= 65436;工作在方式2,3时的计数初值应该是256100=156。当然,此次实验使用的是T1工作方式。 设音符的频率为f,则计数初值=65336一各个音符的周期=65536- 四、软件控制程序流程图:开始 T0初始化并开中断允许放T0中断按键按下成功否? N按键释放成功否?启动T1工作根据按键功能,装入音符初始值到T1中识别按键功能 Y N 停止T1工作附录:1. 参考文献:1 大学生电子实验室 WWW.CEET.HBNU.EDU.CN/BBS/2 电子工程世界 WWW.EEWORLD.COM3 元器件交易网 WWW.CECB2B.COM4 中国知网 WWW.CNKI.COM.CN程序代码: /* 共有7种音符 有三种音调可选择 C调 1 2 3 4 5 6 7 (do rai mi fa so la xi) g调 1 2 3 4 5 6 7 (fa so la xi do rai mi) 5=1,6=2,7=3,1=4,2=5,3=6,4=7 可保存音乐*/#include#define uint unsigned int#define uchar unsigned charuint code table2= /G音0 ,65178, 65217 ,65252 ,65283, 65058 ,65110 ,65157;uint code table3= /C调0 ,65058 ,65110 ,65157 ,65178,65217 ,65252 ,65283;uint table12=0;sbit beep=P23;uint num,CTH0,CTL0,i,j,m;uchar temp,flag;void delay(uint);void keyscan();void play(uint );void init();void replay();void main() init(); while(1) keyscan(); void delay(uint z) uint a; uchar b; for(a=z;a0;a-) for(b=110;b0;b-);void init() TMOD=0x01; EA=1;/开总中断 ET0=1; /开定时器中断void keyscan()P3=0xfe; /检测第一行temp=P3;temp=temp&0xf0;while(temp!=0xf0)/初始列置高电平,行置底电平delay(300);/消抖temp=P3;temp=temp&0xf0;while(temp!=0xf0) /确认按键按下temp=P3;switch(temp)case 0xee:num=7;break;case 0xde:num=8;break;case 0xbe:num=9;break;case 0x7e:break;play(num); /演奏音符while(temp!=0xf0)temp=P3;/检验是否释放temp=temp&0xf0;TR0=0; /按键关闭之后,停止定时器工作beep=1; P3=0xfd; /检测第二行temp=P3;temp=temp&0xf0;while(temp!=0xf0)delay(300);temp=P3;temp=temp&0xf0;while(temp!=0xf0)temp=P3;switch(temp)case 0xed:num=4;break;case 0xdd:num=5;break;case 0xbd:num=6;break;case 0x7d: break;play(num); while(temp!=0xf0)temp=P3;temp=temp&0xf0;TR0=0; / 按键释放之后,蜂鸣器停止beep=1;P3=0xfb; /检测第三行temp=P3;temp=temp&0xf0;while(temp!=0xf0)delay(300);temp=P3;temp=temp&0xf0;while(temp!=0xf0)temp=P3;switch(temp)case 0xeb:num=1;break;case 0xdb:num=2;break;case 0xbb:num=3;break;case 0x7b:break;play(num);while(temp!=0xf0)temp=P3;temp=temp&0xf0;TR0=0;/ 按键释放之后,蜂鸣器停止beep=1; P3=0xf7; /检测第四行temp=P3;temp=temp&0xf0;while(temp!=0xf0)delay(300);temp=P3;temp=temp&0xf0;while(temp!=0xf0)temp=P3;switch(temp)case 0xe7: flag=flag; /改变音调(C调与G调切换)break;case 0xd7:num=0;break;case 0xb7:replay(); / 保存音乐break;case 0x77:break;while(temp!=0xf0)temp=P3;temp=temp&0xf0; void play(uint num) if(flag=1) CTH0=table2num/256; CTL0=table2num%256; else CTH0=table3num/256; CTL0=table3num%256; TR0=1; tablei+=num; /存储刚才按下的音 void timer0() interrupt 1 TH0=CTH0; TL0=CTL0; beep=beep;void replay() for(j=0;j=i;j+) m=tablej+1; play(m); delay(300); TR0=0; beep=1; delay(300); beep=1; TR0=0; for(i=0;i12;i+) /初始化音乐保存数组 tablei=0;第二次会议记录会议时间:7月5日下午18:00会议地点:电子信息创新基地(4号实验楼7号机房)主持人: 陈力会议内容: 经过一段时间的学习,很多同学已经掌握单片机的基本方法,可以编写一些简单的程序,但是很多大一点的程序还没有思绪,本次会议主要是给大家提供一些源代码,给大家赏析的同时要求组员必须参透这些程序,对于不懂的地方我们给予他们讲解。会议成效: 大家通过对一些代码比较大的程序了解后发现原来编写程序也不是那么的难,主程序里只有几个模块,而且很多代码原理都一样,通过这次会议给大家提高了信心。本次与会人员:武 哲20102908电信科10-1班韩 阳20102909电信科10-1班甄 鑫20102910电

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论