基于89c51单片机的简易电子琴设计.docx

上传人:b****6 文档编号:5285310 上传时间:2022-12-14 格式:DOCX 页数:15 大小:97.71KB
下载 相关 举报
基于89c51单片机的简易电子琴设计.docx_第1页
第1页 / 共15页
基于89c51单片机的简易电子琴设计.docx_第2页
第2页 / 共15页
基于89c51单片机的简易电子琴设计.docx_第3页
第3页 / 共15页
基于89c51单片机的简易电子琴设计.docx_第4页
第4页 / 共15页
基于89c51单片机的简易电子琴设计.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

基于89c51单片机的简易电子琴设计.docx

《基于89c51单片机的简易电子琴设计.docx》由会员分享,可在线阅读,更多相关《基于89c51单片机的简易电子琴设计.docx(15页珍藏版)》请在冰豆网上搜索。

基于89c51单片机的简易电子琴设计.docx

基于89c51单片机的简易电子琴设计

目录

一、元器件介绍1

二、设计题目2

三、总体设计2

四、硬件电路设计2

五、软件设计思路3

六、软件调试9

九、设计总结10

八、参考书籍11

 

摘要

单片机又称微控制器,其中最基本的结构是将CPU和计算机外围功能单元,如储存器、I/O口、定时器/计数器、中断系统等集成在一个芯片上构成的。

单片机具有体积小、可靠性高、功能强、灵活方便等的优点,故广泛应用于国民经济的各个领域目前单片机已用于工业控制、机电一体化设备、仪器仪表、信号处理、现代兵器、交通能源、商用设备、医疗设备及家用电器等各个领域,随着单片机性能的不断提高,它的应用将会更加广泛。

单片机技术发展非常快,所以目前的产品都致力于在功能全面、技术先进、操作简便、安全可靠、价格合理等方面进行仔细研究,精心设计;及时掌握最新的单片机技术,在条件允许的情况下,尽可能地利用最新的单片机技术来研制其应用系统,再利用单片机体积小、价格低、功能强等特点,以保证所设计的产品在未来的一段时间内仍具生命力。

关键词:

单片机、最小系统、电子琴、键盘输入

 

一、元器件介绍

AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FlashProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。

AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。

单片机的可擦除只读存储器可以反复擦除100次。

该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。

AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

外形及引脚排列如图。

 

二、设计题目

课程设计题:

简易电子琴设计

设计内容:

 

三、总体设计

设计思路:

1、首先先要有一个输入口,用来控制DO,RW,MI,FA,SUO,LA,XI七个音的发出,还有播放音乐的控制。

2、再次就是输出,用来输出七个音符,和对现在工作状态的显示。

3、最重要的就是单片机的最小系统的实现。

4、最后是电源和flash的烧写RSP接口。

 

四、硬件电路设计

输入口:

P2口,3*3矩阵输入键盘,用P3.3做中断输入口

输出口:

P0口,P0.0、P0.1、P0.2、P0.3接四个LED灯来做为发音状态显示用P0.7做喇叭输出口。

 

五、软件设计思路

按键部分设计:

播放音乐部分:

 

音乐产生的方法;

一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。

现在以单片机12MHZ晶振为例,例出高中低音符与单片机计数T0相关的计数值如下表所示

音符

频率(HZ)

简谱码(T值)

音符

频率(HZ)

简谱码(T值)

低1 DO

262

63628

#4FA#

740

64860

#1 DO#

277

63731

中5SO

784

64898

低2 RE

294

63835

#5SO#

831

64934

#2RE#

311

63928

中6LA

880

64968

低3M

330

64021

#6

932

64994

低4FA

349

64103

中7SI

988

65030

#4FA#

370

64185

高1DO

1046

65058

低5SO

392

64260

#1DO#

1109

65085

#5SO#

415

64331

高2RE

1175

65110

低6LA

440

64400

#2RE#

1245

65134

#6

466

64463

高3M

1318

65157

低7SI

494

64524

高4FA

1397

65178

中1DO

523

64580

#4FA#

1480

65198

#1DO#

554

64633

高5SO

1568

65217

中2RE

587

64684

#5SO#

1661

65235

#2RE#

622

64732

高6LA

1760

65252

中3M

659

64777

#6

1865

65268

中4FA

698

64820

高7SI

1967

65283

下面我们要为这个音符建立一个表格,有助于单片机通过查表的方式来获得相应的数据

低音0-19之间,中音在20-39之间,高音在40-59之间

软件编程:

KEYBUFEQU30H

STH0EQU31H

STL0EQU32H

TEMPEQU33H

ORG0000H

LJMPSTART

ORG000BH

LJMPINT_T0

ORG0100H

START:

MOVTMOD,#01H

SETBET0

SETBEA

WAIT:

MOVP2,#0FFH

CLRP2.3

MOVA,P2

ANLA,#00000111B

XRLA,#00000111B

JZNOKEY1

LCALLDELY10MS

MOVA,P2

ANLA,#00000111B

XRLA,#00000111B

JZNOKEY1

MOVA,P2

ANLA,#00000111B

CJNEA,#06H,NK1

MOVKEYBUF,#0

LJMPDK1

NK1:

CJNEA,#05H,NK2

MOVKEYBUF,#3

LJMPDK1

NK2:

CJNEA,#03H,NK3

MOVKEYBUF,#7

LJMPDK1

NK3:

NOP

DK1:

MOVA,KEYBUF

MOVDPTR,#TABLE

MOVCA,@A+DPTR

MOVP0,A

MOVA,KEYBUF

MOVB,#2

MULAB

MOVTEMP,A

MOVDPTR,#TABLE1

MOVCA,@A+DPTR

MOVSTH0,A

MOVTH0,A

INCTEMP

MOVA,TEMP

MOVCA,@A+DPTR

MOVSTL0,A

MOVTL0,A

SETBTR0

DK1A:

MOVA,P2

ANLA,#00000111B

XRLA,#00000111B

JNZDK1A

CLRTR0

NOKEY1:

MOVP2,#0FFH

CLRP2.4

MOVA,P2

ANLA,#00000111B

XRLA,#00000111B

JZNOKEY2

LCALLDELY10MS

MOVA,P2

ANLA,#00000111B

XRLA,#00000111B

JZNOKEY2

MOVA,P2

ANLA,#00000111B

CJNEA,#06H,NK5

MOVKEYBUF,#1

LJMPDK2

NK5:

CJNEA,#05H,NK6

MOVKEYBUF,#4

LJMPDK2

NK6:

CJNEA,#03H,NK7

MOVKEYBUF,#8

LJMPDK2

NK7:

NOP

DK2:

MOVA,KEYBUF

MOVDPTR,#TABLE

MOVCA,@A+DPTR

MOVP0,A

MOVA,KEYBUF

MOVB,#2

MULAB

MOVTEMP,A

MOVDPTR,#TABLE1

MOVCA,@A+DPTR

MOVSTH0,A

MOVTH0,A

INCTEMP

MOVA,TEMP

MOVCA,@A+DPTR

MOVSTL0,A

MOVTL0,A

SETBTR0

DK2A:

MOVA,P2

ANLA,#00000111B

XRLA,#00000111B

JNZDK2A

CLRTR0

NOKEY2:

MOVP2,#0FFH

CLRP2.5

MOVA,P2

ANLA,#00000111B

XRLA,#00000111B

JZNOKEY3

LCALLDELY10MS

MOVA,P2

ANLA,#00000111B

XRLA,#00000111B

JZNOKEY3

MOVA,P2

ANLA,#00000111B

CJNEA,#06H,NK9

MOVKEYBUF,#2

LJMPDK3

NK9:

CJNEA,#05H,NK10

MOVKEYBUF,#5

LJMPDK3

NK10:

CJNEA,#03H,NK11

MOVKEYBUF,#6

LJMPDK3

NK11:

NOP

DK3:

MOVA,KEYBUF

MOVDPTR,#TABLE

MOVCA,@A+DPTR

MOVP0,A

MOVA,KEYBUF

MOVB,#2

MULAB

MOVTEMP,A

MOVDPTR,#TABLE1

MOVCA,@A+DPTR

MOVSTH0,A

MOVTH0,A

INCTEMP

MOVA,TEMP

MOVCA,@A+DPTR

MOVSTL0,A

MOVTL0,A

SETBTR0

DK3A:

MOVA,P2

ANLA,#00000111B

XRLA,#00000111B

JNZDK3A

CLRTR0

NOKEY3:

LJMPWAIT

DELY10MS:

MOVR6,#10

D1:

MOVR7,#248

DJNZR7,$

DJNZR6,D1

RET

INT_T0:

MOVTH0,STH0

MOVTL0,STL0

CPLP0.7

RETI

TABLE:

DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH

TABLE1:

DW64021,64103,64260,64400

DW64524,64580,64684,64777

DW64820,64898,64968,65030

DW65058,65110,65157,65178

END

六、软件调试

首先是最小系统的测试:

采用流水灯程序来试验最小系统的实现与否,

而后才实验程序的正确性,键盘的输入和喇叭、LED灯的显示。

在调试的过程中,出现了很多的问题在多次的检查下才得以解决,但依是有问题存在,比如中断的响应程序并没有得以实现,播放音乐没有实现。

中断程序如下所示:

先在开头设置了中断地址:

ORG0003H

LJMPINT_0

中断子程序:

INT_0:

MOVR7,#12

LOOP2:

MOVA,R7

MOVDPTR,#TAB

MOVCA,@A+DPTR

MOVKEYBUF,A

MOVA,KEYBUF

MOVDPTR,#TABLE

MOVCA,@A+DPTR

MOVP0,A

MOVA,KEYBUF

MOVB,#2

MULAB

MOVTEMP,A

MOVDPTR,#TABLE1

MOVCA,@A+DPTR

MOVSTH0,A

MOVTH0,A

INCTEMP

MOVA,TEMP

MOVCA,@A+DPTR

MOVSTL0,A

MOVTL0,A

SETBTR0

DJNZR7,INT_0

LJMPLOOP

INT_T0:

MOVTH0,STH0

MOVTL0,STL0

CPLP0.7

RETI

TAB:

DW1,5,7,6,1,3,4,5,6,7,1,3

九、设计总结

最后把程序写入单片机中,实现了键盘控制喇叭发DO,RW,MI,FA,SUO,LA,XI的程序,但中断还是没有最终实现。

在这次的单片机实训中,我收获到很多:

首先,我们原先的学习仅限于电脑上的仿真,并没有真正的运用到实际中,原先我们在电脑上写的程序也成了纸上谈兵,来到真正的实践中才发现了我们学的知识远远不足以应付在现实中的应用,我们的题目硬件也不是很难,但我也调试了很多次才真正的成功,实现了最小系统。

所以说我们的实践经验远远不足。

其次,在此过程中我们学会使用了一些的仿真软件,学会了以前我们所不会的一些编程方法,使我们的编程能力得到了进一步的提升。

提高了自己的动手能力。

动手在一定程度上反映了一个人的能力,作为当代大学生,社会要求的我们不是只能说而不能做的人才;作为海大的一员,三能人才标准更让我们清醒地认识到,实际动手能力无比重要。

从这次实物制作中,我的动手能力提高了。

最后就是我们的学习能力和检查电路的能力。

在我们的知识不能满足现实的所需时,我们就必须自己去学习所需的知识。

八、参考书籍

《单片机原理与接口技术》

《实验指导书——《单片机原理与接口技术》》

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

当前位置:首页 > 经管营销 > 企业管理

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

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