单片机电子琴课程设计报告_第1页
单片机电子琴课程设计报告_第2页
单片机电子琴课程设计报告_第3页
单片机电子琴课程设计报告_第4页
单片机电子琴课程设计报告_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

设计目的提高51单片机理论知识学会如何设计电子琴提高编程能力设计要求.设计一个(4、4)的键盘,并将16个键设计成16个音.可弹奏想要表达的音乐.该电子琴包含1首示例音乐,接通电源可播放示例音乐设计过程主要芯片功能描述AT89C51是在一块芯片中集成了CPU、RAM、ROM、定时器/计数器和多种功能的I/O线等一台计算机所需要的基本部件。其内包含下列几个部件:.一个8位CPU;.一个片内振荡器及时钟电路;.4K字节ROM程序存储器;.128字节RAM数据存储器.可寻址64K外部数据存储器和64K外部程序存储器空间的控制电路;6),32条可编程的I/O线(四个8为并行I/O端口);7).具有五个中断源、两个优先级嵌套结构;其外型如图示:5 92605 92605 92605 92602.音乐频率一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器10来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。单片机12MHz晶振,高中低音符与单片机计数10相关的计数值如下表所示:低6音频简330402码M1符率值(低641T44903值FA)低642SO低低6中中6低低6中中6640440低6794452中6123458DO0中 6287468中6359477M700004FA5SO6LA7SI1DO2RE984820中6844898中6804968中6885030高60645058高6175511高 高 6FAFA8高 高 6FAFA8高高6MM7331851543975173.设计硬件部分如下图所示,硬件部分采用的是逐列扫描,右边16个按键对应16个音。不断检测十六个按键,当某个按键被按下,先检测出是哪一列被按下,再判断哪个键被按下。左边的三个按键是我设置的三个功能键,P1.0是歌曲《祝你生日快乐》,P1.1是歌曲《找朋友》当检测到按键被按下时,P1.0和P1.1接地,所以歌曲就播放。臼.2是一个暂停/启动按键,当歌曲播放时,按下它就启动;当歌曲再次按下,它就停止播放。sbitbeep=P2? sbitbeep=P2? //定义蜂鸣器4.软件设计部分程序设计的流程图如下图,不断检测16个音阶键或功能键哪个被按下,当音阶键被按下时,发出对应的音;当功能键被按下时,执行相应的功能。然后再检测按键释放成不成功,也就是平时所说的松手检测,不成功就不断再检测,成功就停止工作。四、设计心得通过本次课程设计,遇到了许多问题,也提高了自己的实践能力。如设计硬件部分,我用了另外三个独立功能键,虽然这样做简单很多,但是浪费了10口的资源;设计软件部分,发现自己的编程能力还有很多问题,改了又改,特别是实现功能键,花了很多时间。在这次课程设计中,之所以存在着很多的问题,最主要是课外知识不够广,电子方面的知识比较欠缺,认识到了自己的弱点,在接下来的时间会针对这方面努力。回顾起此次单片机课程设计,至今我仍感慨颇多,科技日益更新,我们要跟上时代的步伐就要掌握好知识,努力向上。附录设计源程序:#include<reg52.h>#defineucharunsignedchar#defineuintunsignedintuchartemp,key;sbits1=P1P; //定义功能键1sbits2=P「1; //定义功能键2sbits3=P12 //定义功能键3uintcodetable[]={64021,64103,64260,64400,64524,64580,64684,64777,64820,64898,64968,65030,65058,65110,65157,65178};//频率voiddelay(uintz) //延时程序{uintx,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}voidmain(){TMOD=0x01;EA=1; //开总中断ET0=1;//开定时器0中断ET0=1;key=1;key=1;key=1;key=1;while(1){P3=0xfe;temp=P3;temp=temp&0xf0;if(temp!=0xf0) //检测第一行按键{delay(10);temp=P3;temp=temp&0xf0;if(temp!=0xf0){temp=P3;switch(temp){case0xee:key=0;break;case0xde:break;temp=P3;temp=P3;temp=P3;temp=P3;case0xbe:key=2;break;case0x7e:key=3;break;}TH0=table[key]/256;TL0=table[key]%256;TR0=1;while(temp!=0xf0) //松手检测{temp=P3;temp=temp&0xf0;}TR0=0;beep=1;}}P3=0xfd; //检测第二行按键temp=temp&0xf0;temp=temp&0xf0;key=7;key=7;temp=temp&0xf0;temp=temp&0xf0;key=7;key=7;if(temp!=0xf0){delay(10);temp=P3;temp=temp&0xf0;if(temp!=0xf0){temp=P3;switch(temp){case0xed:key=4;break;case0xdd:key=5;break;case0xbd:key=6;break;case0x7d:delay(10);delay(10);delay(10);delay(10);break;TH0=table[key]/256;TL0=table[key]%256;TR0=1;while(temp!=0xf0){temp=P3;temp=temp&0xf0;}TR0=0;beep=1;}}P3=0xfb; //检测第三行按键temp=P3;temp=temp&0xf0;if(temp!=0xf0)TR0=1;TR0=1;TR0=1;TR0=1;temp=P3;temp=P3;temp=temp&0xf0;if(temp!=0xf0){temp=P3;switch(temp){case0xeb:key=8;break;case0xdb:key=9;break;case0xbb:key=10;break;case0x7b:key=11;break;}TH0=table[key]/256;TL0=table[key]%256;while(temp!=0xf0){temp=P3;temp=temp&0xf0;}TR0=0;beep=1;}}P3=0xf7; //检测第四行按键temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(10);temp=P3;temp=temp&0xf0;if(temp!=0xf0)temp=P3;temp=P3;if(s3==0)if(s3==0)temp=P3;temp=P3;if(s3==0)if(s3==0){temp=P3;{temp=P3;{{switch(temp){case0xe7:key=12;break;case0xd7:key=13;break;case0xb7:key=14;break;case0x77:key=15;break;}TH0=table[key]/256;TL0=table[key]%256;TR0=1;while(temp!=0xf0)temp=temp&0xf0;}TR0=0;beep=1;}}if(s1==0) //功能键1{delay(10);if(s1==0){TR0=1;while(1){if(s3==0) //功能键3{delay(1);{{{{TR0=~TR0;//设置启动\暂停while(!s3);}}key=4; //祝你生日快乐TH0=table[key]/256;TL0=table[key]%256;delay(150);key=4;TH0=table[key]/256;TL0=table[key]%256;delay(150);key=5;TH0=table[key]/256;TL0=table[key]%256;delay(300);key=4;TH0=table[key]/256;TL0=table[key]%256;TH0=table[key]/256;TH0=table[key]/256;TH0=table[key]/256;TH0=table[key]/256;delay(300);key=7;TH0=table[key]/256;delay(300);key=6;delay(300);key=6;TH0=table[key]/256;TL0=table[key]%256;delay(600);key=4;TH0=table[key]/256;TL0=table[key]%256;delay(150);key=4;TH0=table[key]/256;TL0=table[key]%256;delay(150);key=5;TH0=table[key]/256;TL0=table[key]%256;delay(300);key=4;TL0=table[key]%256;delay(300);key=8;TH0=table[key]/256;TL0=table[key]%256;delay(300);key=6;TH0=table[key]/256;TL0=table[key]%256;delay(300);beep=1;while(!s1); //松手检测}}}if(s2==0) //功能键2{delay(10);if(s2==0){TR0=1;TR0=1;TR0=1;TR0=1;while(1){if(s3==0) //功能键3{delay(10);if(s3==0){TR0=~TR0;}}//找朋友key=4;//找朋友TH0=table[key]/256;TL0=table[key]%256;delay(400);key=5;TH0=table[key]/256;TL0=table[key]%256;delay(400);key=4;TH0=table[key]/256;TL0=table[key]%256;delay(400);key=5;TH0=table[key]/256;TL0=table[key]%256;delay(400);key=4;TH0=table[key]/256;TL0=table[key]%256;delay(800);key=4;TH0=table[key]/256;TL0=table[key]%256;delay(400);key=7;TH0=table[key]/256;TL0=table[key]%256;delay(400);key=6;TH0=table[key]/256;TL0=table[key]%256;delay(400);key=5;TH0=table[key]/256;TH0=table[key]/256;TH0=table[key]/25

温馨提示

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

评论

0/150

提交评论