用单片机设计的电子琴.docx

上传人:b****4 文档编号:26966930 上传时间:2023-06-24 格式:DOCX 页数:23 大小:544.64KB
下载 相关 举报
用单片机设计的电子琴.docx_第1页
第1页 / 共23页
用单片机设计的电子琴.docx_第2页
第2页 / 共23页
用单片机设计的电子琴.docx_第3页
第3页 / 共23页
用单片机设计的电子琴.docx_第4页
第4页 / 共23页
用单片机设计的电子琴.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

用单片机设计的电子琴.docx

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

用单片机设计的电子琴.docx

用单片机设计的电子琴

 

 

单片机课程设计说明书

用单片机设计的电子琴

 

专业

电气工程及其自动化

学生姓名

宋婷

班级

B电气081

学号

0810601131

指导教师

张兰红

完成日期

2011年6月24日

 

目录

1.概述1

2.课题方案设计1

3.系统硬件设计1

3.1总体设计2

3.1.1AT89C51简介及其引脚说明2

3.1.2矩阵式键盘的识别和显示4

3.1.34X4行列式键盘识别及显示5

3.1.4LED数码显示原理6

3.1.5电子琴实现原理7

4.系统软件设计8

4.1系统程序设计流程图8

4.2I/O并行口直接驱动LED显示9

5.软硬件联调11

5.1实物图11

5.2调试结果图13

6.结束语13

附录15

附录1:

原理图15

附录2:

PCB图16

附录3:

Proteus仿真图17

附录4:

C语言程序17

附录5:

元件清单21

 

用单片机设计的电子琴

1.概述

单片微型计算机是大规模集成电路技术发展的产物,属第四代电子计算机,它具有高性能、高速度、体积小、价格低廉、稳定可靠、应用广泛的特点。

它的应用必定导致传统的控制技术从根本上发生变革。

因此,单片机的开发应用已成为高科技和工程领域的一项重大课题。

电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。

它在现代音乐扮演着重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。

本文的主要内容是用单片机为核心控制元件,设计一个电子琴。

以单片机作为主控核心,与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有16个按键和扬声器。

利用单片机产生不同频率来获得我们要求的音阶,最终可随意弹奏想要表达的音乐。

本系统是简易电子琴的设计,按下键盘矩阵中的按键会使数码管显示当前按键,扬声器播放器对应的音符。

通过设计本系统可了解单片机的基本功能。

2.课题方案设计

本设计要实现的功能有:

由4X4组成16个按钮矩阵,设计成16个音。

可随意弹奏想要表达的音乐。

详细过程:

当系统扫描到键盘上有键子被按下,则快速检测出是那一个键子,然后单片机的定时器被启动,发出一定频率的脉冲,该频率的脉冲经喇叭驱动电路放大滤波后,就会发出相应的音调。

假如在前一个按下的键发声的同时有另一个键被按下,则启用中断系统,前面键的发音停止,转到后按的键的发音程序,发出后按的键的音。

3.系统硬件设计

该系统通过电子琴按键随意键入所要表达的音符,作为电平送给主体电路,中央处理器通过识别,解码输出音符,在扬声器中发出有效的声音。

通过这样可以不断的弹奏音乐。

嵌入式电路,按键电路,LED显示电路和两个功能键组成,通过功能键可以选择播放音乐。

其主要模块由五个部分组成,具体关系如图2.1所示。

图3-1系统组成框图

本系统的电路基本模块:

51单片机中心、矩阵键盘模块、显示模块、发音模块、功能选择模块。

工作原理描述如下:

打开电子琴电源开关后,电子琴默认为弹奏状态,弹奏显示灯点亮,数码管显示为0。

按下矩阵键盘中的任意键,扬声器发相应的音调,数码管显示对应的数字。

按下播放按钮,电子琴处于自动播放状态,播放显示灯点亮,此时,按下矩阵键盘中的任意键,扬声器发出存储在单片机内部的对应的乐曲,数码管显示对应的按键数字。

再按弹奏/停止键,音乐停止。

弹奏显示灯点亮。

此时系统又处于弹奏状态。

3.1总体设计

将设计的电子琴硬件部分进行模块化设计,主要分以下模块:

(1)矩阵键盘模块:

系统采用4*4矩阵键盘。

(2)显示模块:

系统采用LED显示管显示。

(3)功能显示模块:

采用发光二极管显示弹奏、播放两种状态。

(4)发音模块:

采用扬声器发音。

(5)控制中心模块:

AT89C51单片机。

3.1.1AT89C51简介及其引脚说明

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

AT89C51它是一个低功耗高性能单片机,40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,2个16位可编程定时计数器,2个全双工串行通信口,AT89C51可以按照常规方法进行编程,也可以在线编程。

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

与MCS-51兼容

·4K字节可编程闪烁存储器

·寿命:

1000写/擦循环

·数据保留时间:

10年

·全静态工作:

0Hz-24MHz

·三级程序存储器锁定

·128×8位内部RAM

·32可编程I/O线

·两个16位定时器/计数器

·5个中断源

·可编程串行通道

·低功耗的闲置和掉电模式

·片内振荡器和时钟电路

图3-1-1STC89C51引脚排列图

AT89C51管脚说明

  P0口:

P0口为一个8位漏级开路准双向I/O口,每脚可吸收8TTL门电流。

P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。

在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。

    P1口:

P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。

P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。

在FLASH编程和校验时,P1口作为第八位地址接收。

    P2口:

P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。

P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。

P3口:

P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。

当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。

作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。

P3口也可作为AT89C51的一些特殊功能口,如下表所示:

P3口引脚

特殊功能

P3.0

RXD(串行输入口)

P3.1

TXD(串行输出口)

P3.2

(外部中断0)

P3.3

(外部中断1)

P3.4

T0(定时器0外部输入)

P3.5

T1(定时器1外部输入)

P3.6

WR(外部数据存储器写选通)

P3.7

RD(外部数据存储器读先通)

P3口同时为闪烁编程和编程校验接收一些控制信号。

3.1.2矩阵式键盘的识别和显示

在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式。

在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。

这样,一个端口(如P1口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。

由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。

矩阵式结构的键盘显然比直接法要复杂一些,识别也要复杂一些,本系统中的矩阵键盘中,列线通过电阻接正电源,并将行线所接的单片机的I/O口作为输出端,而列线所接的I/O口则作为输入。

这样,当按键没有按下时,所有的输出端都是高电平,代表无键按下。

行线输出是低电平,一旦有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可得知是否有键按下了。

图3-1-2矩阵式键盘

3.1.34X4行列式键盘识别及显示

组成键盘的按键有机械式、电容式、导电橡胶式、薄膜式多种,但不管什么形式,其作用都是一个使电路接通与断开的开关。

目前微机系统中使用的键盘按其功能不同,通常可分为编码键盘和非编码键盘两种基本类型。

编码键盘:

键盘本身带有实现接口主要功能所需的硬件电路。

不仅能自动检测被按下的键,并完成去抖动、防串键等功能,而且能提供与被按键功能对应的键码(如ASCII码)送往CPU。

所以,编码键盘接口简单、使用方便。

但由于硬件电路较复杂,因而价格较贵。

非编码键盘:

键盘只简单地提供按键开关的行列矩阵。

有关按键的识别、键码的确定与输入、去抖动等功能均由软件完成。

目前微机系统中,一般为了降低成本大多数采用非编码键盘。

键盘接口必须具有去抖动、防串键、按键识别和键码产生4个基本功能。

(1)去抖动:

每个按键在按下或松开时,都会产生短时间的抖动。

抖动的持续时间与键的质量相关,一般为5—20mm。

所谓抖动是指在识别被按键是必须避开抖动状态,只有处在稳定接通或稳定断开状态才能保证识别正确无误。

去抖问题可通过软件延时或硬件电路解决。

(2)防串键:

防串键是为了解决多个键同时按下或者前一按键没有释放又有新的按键按下时产生的问题。

常用的方法有双键锁定和N键轮回两种方法。

双键锁定,是当有两个或两个以上的按键按下时,只把最后释放的键当作有效键并产生相应的键码。

N键轮回,是当检测到有多个键被按下时,能根据发现它们的顺序依次产生相应键的键码。

(3)被按键识别:

如何识别被按键是接口解决的主要问题,一般可通过软硬结合的方法完成。

常用的方法有行扫描法和线反转法两种。

行扫描法的基本思想是,由程序对键盘逐行扫描,通过检测到的列输出状态来确定闭合键,为此,需要设置入口、输出口一个,该方法在微机系统中被广泛使用。

线反转法的基本思想是通过行列颠倒两次扫描来识别闭合键,为此需要提供两个可编程的双向输入/输出端口。

(4)键码产生:

为了从键的行列坐标编码得到反映键功能的键码,一般在内存区中建立一个键盘编码表,通过查表获得被按键的键码。

用AT89C51的并行口P0接4×4矩阵键盘,以P0.0-P0.3作输入线,以P0.4-P0.7作输出线;在数码管上显示每个按键的“0-F”序号。

3.1.4LED数码显示原理:

(1)七段LED显示器内部由七个条形发光二极管和一个小圆点发光二极管组成,根据各管的极管的接线形式,可分成共阴极型和共阳极型。

LED数码管的g~a七个发光二极管因加正电压而发亮,因加零电压而不以发亮,不同亮暗的组合就能形成不同的字形,这种组合称之为字形码,下面给出共阴极的字形码表(如表2-1所示)

“0”

3FH

 

“8”

7FH

“1”

06H

“9”

6FH

“2”

5BH

“A”

77H

“3”

4FH

“b”

7CH

“4”

66H

“C”

39H

“5”

6DH

“d”

5EH

“6”

7DH

“E”

79H

“7”

07H

“F”

71H

表3-1-4 字形码表

(2)由于显示的数字0-9的字形码没有规律可循,只能采用查表的方式来完成我们所需的要求了。

这样我们按着数字0-9的顺序,把每个数字的笔段代码按顺序排好!

建立的表格如下所示:

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

3.1.5电子琴实现原理

1.电源部分:

是由220V的市电通过变压、整流稳压利用7805来得到+5V电压,维持系统的正常工作;把7805的3脚输出接到89S51的40引脚上

图3-1-5

(1)电源图

2.4*4的16个按钮矩阵:

4*4行列式键盘识别;行线接P0口的P0.0~P0.3,列线P0.4~P0.7,行值和列值的组合就是识别这个按键的编码。

每个按键的状态同样需变成数字量“0”和“1”,开关的一端(列线)通过电阻接VCC,而接地是通过程序输出数字“0”实现的。

图3-1-5

(2)4*4的16个按钮矩阵

3.晶振模块:

用12MHZ的晶振,及两个30pf的电容,接到单片机的18,19,20脚,电路如图(a)所示

(a)(b)

4.复位模块:

利用开关和一个10uf的极性电容并联接单片机9脚“reset”脚,电路如图(b)所示

5.音频放大模块:

利用三极管将信号放大,由扬声器放出,信号由单片机的17脚“P3.7”口读出,电路如图(c)所示

(c)(d)

6.数码管:

利用AT89S51单片机的P2端口的P2.0-P2.7连接到一个七段数码管的a-h的笔段上,数码管的公共端接地。

在数码管上循环显示0-7数字,时间间隔0.2秒。

4.系统软件设计

4.1系统程序设计流程图

系统程序设计流程图4.1所示。

图4-1整体程序处理流程图

在电子琴开始工作时,系统默认电子琴处于弹奏状态,歌曲选择功能键的目的是赋予矩阵键盘第二功能,即对系统内置的歌曲进行选择,在放歌时能且只能通过弹奏/停止键来结束放歌,选歌时必须先按下歌曲选择功能键,在通过矩阵键盘来选择和切换曲目。

4.2I/O并行口直接驱动LED显示

把“AT89C51”区域中的P2.0/A8-P2.7/A15端口用8芯排线连接到一位数码管的a-h端口上;要求:

P2.0/A8与a相连,P2.1/A9与b相连,P2.2/A10与c相连,……,P2.7/A15与h相连。

表1字形码表及对应的音符

0

0x3f

低5SO

8

0x7f

中6LA

1

0x06

低6LA

9

0x6f

中7SI

2

0x5b

低7SI

A

0x77

高1DO

3

0x4f

中1DO

B

0x7c

高2RE

4

0x66

中2RE

C

0x39

高3M

5

0x6d

中3M

D

0x5e

高4FA

6

0x7d

中4FA

E

0x79

高5SO

7

0x07

中5SO

F

0x71

高6LA

在本设计中,数码管的显示通过

P2=DSY_CODE[k]

这句语言来查表并输出,实现音符的显示。

 

5.软硬件联调:

5.1实物图:

图5-1硬件系统实验结果正面图

图5-2硬件系统实验结果反面图

5.2调试结果图:

图5-3硬件系统实验调试结果图

6.结束语:

两周的单片机课程设计终于顺利完成了,其中包含着快乐,也有辛酸。

我们选的设计题目是“用单片机设计的电子琴”,大家都觉得这个题目是比较简单的。

其实不然,做了之后,发现设计电路虽然简单,但我们认为它真正困难的地方是程序设计,不过在我们同心努力下最终完成了。

我们刚选该题目时,真的是一头雾水,硬件电路不知如何下手,更何谈解决程序那块,因为我们所学的都是单片机方面的理论知识,应用到实践中去还比较少。

不过,我们四人也没偷下懒,迅速分工去查阅和收集资料。

我们去了图书馆借一些参考书,上网找一些相关资料,并且请教指导老师。

通过不断努力,终于把电子琴的思路和模型定了下来,然后去设计原理图,买材料,编程序。

 

通过一番整理和修改后,在电脑上进行仿真,仿真成功后准备焊接电路板。

在焊接电路板中,我们首先对硬件电路进行布局,然后确认无误后,在电路板上进行焊接,这个过程我们觉得是做得比较快的,以至于后面出现了虚焊的错误。

焊接电路板完工,细心检查后,进行通电测试。

结果数码管显示的不对,通过检查,原来是有些线短路了,再又修改后,能显示出来了。

但还有个问题是,有的蜂鸣器响的声音不对,原来我们应该接一个无源的,还是对单片机的知识不够了解。

然后,我们换了一个蜂鸣器,在重新焊接好后,电子琴终于成功实现功能,当时我们的心情都是无比兴奋和快乐的,因为我们两周的辛苦没有白费。

在完成单片机课程设计后,我们发现我们还有许多不足,所学到的知识还远远不够,以至于还有一些功能不能被动完成。

但通过学习这一次实践,增强了我们的动手能力,提高和巩固了单片机方面的知识,特别是软件方面。

从中增强了我们的团队合作精神,并让我们认识到把理论应用到实践中去是多么重要。

 

7.参考文献:

[1]新编单片机原理与应用.西安电子科技大学出版社,2007.103~110

[2]康华光.电子技术基础数字部分.北京:

高等教育出版社,2008.400~411

[3]电子琴:

[硕士学位论文].武汉:

中国地质大学信息工程学院,2007

 

附录

附录1:

原理图

附录1用单片机设计的电子琴原理图

 

附录2:

PCB图

附录2用单片机设计的电子琴PCB图

附录3:

Proteus仿真图

附录3用单片机设计的电子琴Proteus图

附录4:

C语言程序

#include

#defineucharunsignedchar

#defineuintunsignedint

ucharcodeDSY_Table[]=

{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,

0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xBF};

uintcodeTone_Delay_Table[]=

{64021,64103,64260,64400,64524,64580,64624,64777,

64820,64898,64968,65030,65058,65110,65157,65178};

sbitBEEP=P3^0;

ucharKeyNo;

voidDelayMS(ucharx)

{

uchari;

while(x--)for(i=0;i<120;i--);

}

voidKeys_Scan()

{

ucharTmp,k;

P1=0x0F;

DelayMS

(2);

Tmp=P1^0x0F;

switch(Tmp)

{

case1:

k=0;break;

case2:

k=1;break;

case4:

k=2;break;

case8:

k=3;break;

default:

return;

}

P1=0xF0;

DelayMS

(2);

Tmp=(P1>>4)^0x0F;

switch(Tmp)

{

case1:

k+=0;break;

case2:

k+=4;break;

case4:

k+=8;break;

case8:

k+=12;break;

default:

return;

}

KeyNo=k;

}

voidPlay_Tone()interrupt1

{

TH0=Tone_Delay_Table[KeyNo]/256;

TL0=Tone_Delay_Table[KeyNo]%256;

BEEP=~BEEP;

}

voidmain()

{

P0=0xBF;

TMOD=0x01;

IE=0x82;

while

(1)

{

P1=0xF0;

if(P1!

=0xF0)

{

Keys_Scan();

P0=DSY_Table[KeyNo];

TR0=1;

}

else

{

TR0=0;

}

DelayMS

(2);

}

附录5:

元件清单

STC89C511个

七段数码管1个

开关17个

擦槽1个

蜂鸣器1个

电阻1个

流水灯1个

三极管1个

晶振1个

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

当前位置:首页 > 人文社科 > 广告传媒

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

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