单片机电子琴课程设计 .doc

上传人:飞****2 文档编号:56293084 上传时间:2022-11-01 格式:DOC 页数:12 大小:183KB
返回 下载 相关 举报
单片机电子琴课程设计 .doc_第1页
第1页 / 共12页
单片机电子琴课程设计 .doc_第2页
第2页 / 共12页
点击查看更多>>
资源描述

《单片机电子琴课程设计 .doc》由会员分享,可在线阅读,更多相关《单片机电子琴课程设计 .doc(12页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、一、 设计目的1. 提高51单片机理论知识2. 学会如何设计电子琴3. 提高编程能力二、 设计要求1.设计一个(44)的键盘,并将16个键设计成16个音2.可弹奏想要表达的音乐3.该电子琴包含1首示例音乐,接通电源可播放示例音乐三、 设计过程1. 主要芯片功能描述AT89C51是在一块芯片中集成了CPU、RAM、ROM、定时器/计数器和多种功能的I/O线等一台计算机所需要的基本部件。其内包含下列几个部件: 1).一个8位CPU ; 2).一个片内振荡器及时钟电路; 3).4K字节ROM程序存储器; 4).128字节RAM数据存储器 5).可寻址64K外部数据存储器和64K外部程序存储器空间的控

2、制电路; 6).32条可编程的I/O线(四个8为并行I/O端口); 7).具有五个中断源、两个优先级嵌套结构;其外型如图示: 2.音乐频率一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。单片机12MHZ晶振,高中低音符与单片机计数T0相关的计数值如下表所示 : 音 符 频 率 简码值(T值)低3 M33064021低4 FA349 64103低5 SO392 6426

3、0低6 LA44064400低7 SI49464524中 1 DO52364580 中 2 RE58764684中 3 M65964777中 4 FA69864820中 5 SO78464898中 6 LA88064968中 7 SI98865030高 1 DO106465058高 2 RE117565110高 3 M131865157高 4 FA1397651783.设计硬件部分如下图所示,硬件部分采用的是逐列扫描,右边16个按键对应16个音。不断检测十六个按键,当某个按键被按下,先检测出是哪一列被按下,再判断哪个键被按下。左边的三个按键是我设置的三个功能键,P1.0是歌曲祝你生日快乐, P

4、1.1是歌曲找朋友,当检测到按键被按下时,P1.0和P1.1接地,所以歌曲就播放。P1.2是一个暂停/启动按键,当歌曲播放时,按下它就启动;当歌曲再次按下,它就停止播放。 4. 软件设计部分 程序设计的流程图如下图,不断检测16个音阶键或功能键哪个被按下,当音阶键被按下时,发出对应的音;当功能键被按下时,执行相应的功能。然后再检测按键释放成不成功,也就是平时所说的松手检测,不成功就不断再检测,成功就停止工作。四、 设计心得通过本次课程设计,遇到了许多问题,也提高了自己的实践能力。如设计硬件部分,我用了另外三个独立功能键,虽然这样做简单很多,但是浪费了IO口的资源;设计软件部分,发现自己的编程能

5、力还有很多问题,改了又改,特别是实现功能键,花了很多时间。在这次课程设计中,之所以存在着很多的问题,最主要是课外知识不够广,电子方面的知识比较欠缺,认识到了自己的弱点,在接下来的时间会针对这方面努力。回顾起此次单片机课程设计,至今我仍感慨颇多,科技日益更新,我们要跟上时代的步伐就要掌握好知识,努力向上。 附录 设计源程序:#include#define uchar unsigned char#define uint unsigned intsbit beep=P23; /定义蜂鸣器uchar temp,key;sbit s1=P10; /定义功能键1 sbit s2=P11; /定义功能键2s

6、bit s3=P12; /定义功能键3uint code table=64021,64103,64260,64400,64524,64580,64684,64777,64820,64898,64968,65030,65058,65110,65157,65178; /频率void delay(uint z) /延时程序 uint x,y; for(x=z;x0;x-) for(y=110;y0;y-);void main() TMOD=0x01; EA=1; /开总中断 ET0=1; /开定时器0中断 while(1) P3=0xfe; temp=P3; temp=temp&0xf0; if(t

7、emp!=0xf0) /检测第一行按键 delay(10); temp=P3; temp=temp&0xf0; if(temp!=0xf0) temp=P3; switch(temp) case 0xee: key=0; break; case 0xde: key=1; break; case 0xbe: key=2; break; case 0x7e: key=3; break; TH0=tablekey/256; TL0=tablekey%256; TR0=1; while(temp!=0xf0) /松手检测 temp=P3; temp=temp&0xf0; TR0=0; beep=1;

8、P3=0xfd; /检测第二行按键 temp=P3; temp=temp&0xf0; if(temp!=0xf0) delay(10);temp=P3;temp=temp&0xf0;if(temp!=0xf0) temp=P3; switch(temp) case 0xed: key=4; break; case 0xdd: key=5; break; case 0xbd: key=6; break; case 0x7d: key=7; break; TH0=tablekey/256; TL0=tablekey%256; TR0=1; while(temp!=0xf0) temp=P3; te

9、mp=temp&0xf0; TR0=0; beep=1; P3=0xfb; /检测第三行按键 temp=P3; temp=temp&0xf0; if(temp!=0xf0) delay(10);temp=P3;temp=temp&0xf0;if(temp!=0xf0) temp=P3; switch(temp) case 0xeb: key=8; break; case 0xdb: key=9; break; case 0xbb: key=10; break; case 0x7b: key=11; break; TH0=tablekey/256; TL0=tablekey%256; TR0=1

10、; 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; switch(temp) case 0xe7: key=12; break; case 0xd7: key=13; break; case 0xb7: key=14; break; case 0x77: key=15; break; TH0=t

11、ablekey/256; TL0=tablekey%256; TR0=1; while(temp!=0xf0) temp=P3;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); if(s3=0) TR0=TR0; /设置启动暂停 while(!s3); key=4; /祝你生日快乐TH0=tablekey/256;TL0=tablekey%256;delay(150); key=4; TH0=tablekey/256; TL0=ta

12、blekey%256; delay(150); key=5; TH0=tablekey/256; TL0=tablekey%256; delay(300); key=4; TH0=tablekey/256; TL0=tablekey%256; delay(300); key=7; TH0=tablekey/256; TL0=tablekey%256; delay(300); key=6; TH0=tablekey/256; TL0=tablekey%256; delay(600); key=4; TH0=tablekey/256; TL0=tablekey%256; delay(150); k

13、ey=4; TH0=tablekey/256; TL0=tablekey%256; delay(150); key=5; TH0=tablekey/256; TL0=tablekey%256; delay(300); key=4; TH0=tablekey/256; TL0=tablekey%256; delay(300); key=8; TH0=tablekey/256; TL0=tablekey%256; delay(300); key=6; TH0=tablekey/256; TL0=tablekey%256; delay(300); beep=1; while(!s1); /松手检测

14、if(s2=0) /功能键2 delay(10); if(s2=0) TR0=1; while(1) if(s3=0) /功能键3 delay(10); if(s3=0) TR0=TR0; key=4; /找朋友 TH0=tablekey/256; TL0=tablekey%256; delay(400); key=5; TH0=tablekey/256; TL0=tablekey%256; delay(400); key=4; TH0=tablekey/256; TL0=tablekey%256; delay(400); key=5; TH0=tablekey/256; TL0=tablek

15、ey%256; delay(400); key=4; TH0=tablekey/256; TL0=tablekey%256; delay(800); key=4; TH0=tablekey/256; TL0=tablekey%256; delay(400); key=7; TH0=tablekey/256; TL0=tablekey%256; delay(400); key=6; TH0=tablekey/256; TL0=tablekey%256; delay(400); key=5; TH0=tablekey/256; TL0=tablekey%256; delay(400); key=4; TH0=tablekey/256; TL0=tablekey%256; delay(800); key=2; TH0=tablekey/256; TL0=tablekey%256; delay(800); beep=1; while(!s2); /松手检测 void time() interrupt 1 /中断 TH0=tablekey/256;TL0=tablekey%256;beep=beep;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁