单片机设计矩阵键盘电子琴 1.docx

上传人:b****3 文档编号:1081468 上传时间:2022-10-16 格式:DOCX 页数:14 大小:18.44KB
下载 相关 举报
单片机设计矩阵键盘电子琴 1.docx_第1页
第1页 / 共14页
单片机设计矩阵键盘电子琴 1.docx_第2页
第2页 / 共14页
单片机设计矩阵键盘电子琴 1.docx_第3页
第3页 / 共14页
单片机设计矩阵键盘电子琴 1.docx_第4页
第4页 / 共14页
单片机设计矩阵键盘电子琴 1.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

单片机设计矩阵键盘电子琴 1.docx

《单片机设计矩阵键盘电子琴 1.docx》由会员分享,可在线阅读,更多相关《单片机设计矩阵键盘电子琴 1.docx(14页珍藏版)》请在冰豆网上搜索。

单片机设计矩阵键盘电子琴 1.docx

单片机设计矩阵键盘电子琴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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1