如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
设计目的提高51单片机理论知识学会如何设计电子琴提高编程能力设计要求1.设计一个(4×4)的键盘,并将16个键设计成16个音2.可弹奏想要表达的音乐3.该电子琴包含1首示例音乐,接通电源可播放示例音乐设计过程主要芯片功能描述AT89C51是在一块芯片中集成了CPU、RAM、ROM、定时器/计数器和多种功能的I/O线等一台计算机所需要的基本部件。其内包含下列几个部件:1).一个8位CPU;2).一个片内振荡器及时钟电路;3).4K字节ROM程序存储器;4).128字节RAM数据存储器5).可寻址64K外部数据存储器和64K外部程序存储器空间的控制电路;6).32条可编程的I/O线(四个8为并行I/O端口);7).具有五个中断源、两个优先级嵌套结构;其外型如图示:2.音乐频率一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。单片机12MHZ晶振,高中低音符与单片机计数T0相关的计数值如下表所示:音符频率简码值(T值)低3M33064021低4FA34964103低5SO39264260低6LA44064400低7SI49464524中1DO52364580中2RE58764684中3M65964777中4FA69864820中5SO78464898中6LA88064968中7SI98865030高1DO106465058高2RE117565110高3M131865157高4FA1397651783.设计硬件部分如下图所示,硬件部分采用的是逐列扫描,右边16个按键对应16个音。不断检测十六个按键,当某个按键被按下,先检测出是哪一列被按下,再判断哪个键被按下。左边的三个按键是我设置的三个功能键,P1.0是歌曲《祝你生日快乐》,P1.1是歌曲《找朋友》,当检测到按键被按下时,P1.0和P1.1接地,所以歌曲就播放。P1.2是一个暂停/启动按键,当歌曲播放时,按下它就启动;当歌曲再次按下,它就停止播放。软件设计部分程序设计的流程图如下图,不断检测16个音阶键或功能键哪个被按下,当音阶键被按下时,发出对应的音;当功能键被按下时,执行相应的功能。然后再检测按键释放成不成功,也就是平时所说的松手检测,不成功就不断再检测,成功就停止工作。设计心得通过本次课程设计,遇到了许多问题,也提高了自己的实践能力。如设计硬件部分,我用了另外三个独立功能键,虽然这样做简单很多,但是浪费了IO口的资源;设计软件部分,发现自己的编程能力还有很多问题,改了又改,特别是实现功能键,花了很多时间。在这次课程设计中,之所以存在着很多的问题,最主要是课外知识不够广,电子方面的知识比较欠缺,认识到了自己的弱点,在接下来的时间会针对这方面努力。回顾起此次单片机课程设计,至今我仍感慨颇多,科技日益更新,我们要跟上时代的步伐就要掌握好知识,努力向上。附录设计源程序:#include<reg52.h>#defineucharunsignedchar#defineuintunsignedintsbitbeep=P2^3;//定义蜂鸣器uchartemp,key;sbits1=P1^0;//定义功能键1sbits2=P1^1;//定义功能键2sbits3=P1^2;//定义功能键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中断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;