单片机设计矩阵键盘电子琴 1.docx
- 文档编号:1081468
- 上传时间:2022-10-16
- 格式:DOCX
- 页数:14
- 大小:18.44KB
单片机设计矩阵键盘电子琴 1.docx
《单片机设计矩阵键盘电子琴 1.docx》由会员分享,可在线阅读,更多相关《单片机设计矩阵键盘电子琴 1.docx(14页珍藏版)》请在冰豆网上搜索。
单片机设计矩阵键盘电子琴1
课程设计任务书
课程名称单片机原理及应用课程设计
院(系、部、中心)通信工程学院
专业通信工程
1.课程设计应达到的目的
本课程是继《单片机原理及应用B》课程之后,训练学生综合运用上述课程知识,进行单片机软件、硬件系统设计与调试,使学生加深对单片机结构、工作原理的理解,提高学生综合应用知识的能力、分析解决问题的能力和单片机最小应用系统的设计技能。
通过课程设计,达到理论与实际应用相结合,增强学生对综合电子系统设计的理解,掌握单片机原理就应用的设计方法以及C51编程的能力,并能够在这个基础上进行实际项目的程序设计及软硬件调试,增强学生的工程实践能力。
2.课程设计题目及要求
带存储播放功能的简易电子琴设计
要求:
利用行列式键盘和数码管,来控制并显示和产生不同频率的声音。
其他扩展功能学生可自己添加,功能不限定与此。
3.课程设计任务及工作量的要求〔包括课程设计计算说明书、图纸、实物样品等要求〕
(1)了解相关理论知识,掌握基本的原理,理解相关特殊功能寄存器的设置。
(2)完成电路板的组装
(3)完成硬件电路的测试、以及软件的编程
(4)最终完成具体的课设任务。
4.主要参考文献
1.张洪润等.单片机应用设计200例.北京:
北京航空航天大学出版社,2006
2.胡汉才.单片机原理及其接口技术.北京:
清华大学出版社,2010
3.夏继强等.单片机实验与实践教程.北京:
北京航空航天大学出版社,2006
4.倪晓军等.单片机原理与接口技术教程.北京:
清华大学出版社,2007
5
(1)硬件方面:
单片机。
4*4行列式键盘,蜂鸣器,独立数码管,独立建。
硬件部分采用逐列扫描,16个键位对应16个音,不断检测16键位,当某个键位被按下,先检测哪一列再检测哪个按键被按下,同时设置四个功能键,p1.0,p1.1播放歌曲,p1.2暂停,p1.3复位,可控制歌曲的播放。
插入图片
(2)音乐频率
一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。
单片机12MHZ晶振,高中低音符与单片机计数T0相关的计数值如下表所示:
音符
频率
简码值(T值)
低3M
330
64021
低4FA
349
64103
低5SO
392
64260
低6LA
440
64400
低7SI
494
64524
中1DO
523
64580
中2RE
587
64684
中3M
659
64777
中4FA
698
64820
中5SO
784
64898
中6LA
880
64968
中7SI
988
65030
高1DO
1064
65058
高2RE
1175
65110
高3M
1318
65157
高4FA
1397
65178
6程序设计的流程图如下图,不断检测16个音阶键或功能键哪个被按下,当音阶键被按下时,发出对应的音;当功能键被按下时,执行相应的功能。
然后再检测按键释放成不成功,也就是平时所说的松手检测,不成功就不断再检测,成功就停止工作。
插入图片
7心得体会:
通过这次课程设计,我学到了很多书本上学不到的知识与经验,同时也遇到了很多问题,并在这个过程中逐步尝试去解决他们,提高自己的实践能力,硬件设计上我发现通过不同的I/O口可以节省端口资源的利用,部分端口上的需求可以通过软件解决。
从语法错误到程序功能的实现,前前后后也是改了又改,这次课程设计使我意识到很多存在的问题,必须在单片机方面读更多的书,更深入的去探究,去挖掘这些问题的答案。
8源程序
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitbuz=P2^3;//定义蜂鸣器
uchartemp,key;
sbits1=P1^0;//定义功能键1
sbits2=P1^1;//定义功能键2
sbits3=P1^2;//定义功能键3
sbits4=P1^3;
uintcodetable[]={64021,64103,64260,64400,
64524,64580,64684,64777,
64820,64898,64968,65030,
65058,65110,65157,65178};//频率
uintcodexable[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71
};
voiddelay(uintz)//延时程序
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voidinitialize()
{
P1=0xff;//起初数码管不显示任何数
}
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,P0=xable[0];
break;
case0xde:
key=1,P0=xable[1];
break;
case0xbe:
key=2,P0=xable[2];
break;
case0x7e:
key=3,P0=xable[3];
break;
}
TH0=table[key]/256;
TL0=table[key]%256;
TR0=1;
while(temp!
=0xf0)//松手检测
{
temp=P3;
temp=temp&0xf0;
}
TR0=0;
buz=1;
}
}
P3=0xfd;//检测第二行按键
temp=P3;
temp=temp&0xf0;
if(temp!
=0xf0)
{
delay(10);
temp=P3;
temp=temp&0xf0;
if(temp!
=0xf0)
{
temp=P3;
switch(temp)
{
case0xed:
key=4,P0=xable[4];
break;
case0xdd:
key=5,P0=xable[5];
break;
case0xbd:
key=6,P0=xable[6];
break;
case0x7d:
key=7,P0=xable[7];
break;
}
TH0=table[key]/256;
TL0=table[key]%256;
TR0=1;
while(temp!
=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
TR0=0;
buz=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)
{
case0xeb:
key=8,P0=xable[8];
break;
case0xdb:
key=9,P0=xable[9];
break;
case0xbb:
key=10,P0=xable[10];
break;
case0x7b:
key=11,P0=xable[11];
break;
}
TH0=table[key]/256;
TL0=table[key]%256;
TR0=1;
while(temp!
=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
TR0=0;
buz=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)
{
case0xe7:
key=12,P0=xable[12];
break;
case0xd7:
key=13,P0=xable[13];
break;
case0xb7:
key=14,P0=xable[14];
break;
case0x77:
key=15,P0=xable[15];
break;
}
TH0=table[key]/256;
TL0=table[key]%256;
TR0=1;
while(temp!
=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
TR0=0;
buz=1;
}
}
if(s1==0)//功能键1
{
delay(10);
if(s1==0)
XX文库-让每个人平等地提升自我{
TR0=1;
while
(1)
{
if(s3==0)//功能键3
{
delay
(1);
if(s3==0)
{
TR0=~TR0;//设置启动\暂停
while(!
s3);
}
}
key=4;//祝你生日快乐
TH0=table[key]/256;
TL0=table[key]%256;
de
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机设计矩阵键盘电子琴 单片机 设计 矩阵 键盘 电子琴
![提示](https://static.bdocx.com/images/bang_tan.gif)