基于AT89C51单片机简易电子琴.docx

上传人:b****5 文档编号:29498390 上传时间:2023-07-24 格式:DOCX 页数:32 大小:128.91KB
下载 相关 举报
基于AT89C51单片机简易电子琴.docx_第1页
第1页 / 共32页
基于AT89C51单片机简易电子琴.docx_第2页
第2页 / 共32页
基于AT89C51单片机简易电子琴.docx_第3页
第3页 / 共32页
基于AT89C51单片机简易电子琴.docx_第4页
第4页 / 共32页
基于AT89C51单片机简易电子琴.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

基于AT89C51单片机简易电子琴.docx

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

基于AT89C51单片机简易电子琴.docx

基于AT89C51单片机简易电子琴

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

小组分工

一、概述

1.1课程设计的题目:

基于AT89C51单片机简易电子琴

1.2设计任务

1.3引言

1.4基于AT89C51单片机简易电子琴的设计思想

1.5设计功能

二、方案比较与论证

2.1举例方案

2.2系统组成

2.3流程图

三、电路设计

3.2矩阵键盘模块

3.3主控模块

3.4音乐设计“音调”和“节拍”

3.5工作原理

3.6创新部分

3.7LED数码显示管与单片机的连接

3.8源程序

四、心得与体会

10

12

12

13

14

26

 

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

小组分工:

负责:

资料收集与整理,DXP2004电路板的绘制,

 

数码管显示

 

负责:

矩阵键盘上实现7种不同的音调

负责:

音乐播放实现

 

、概述

1.1课程设计的题目:

基于AT89C51单片机简易电子琴

摘要:

如今随着社会的发展进步,音乐逐渐成为我们生活中很重要的一部分,生活中的我们都会欣赏世界名曲,作为对精神的洗礼。

本论文设计一个基于

AT89C51单片机的简易电子琴。

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

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

本系统是以51系列单片机AT89C51为主控制器,附有矩阵键盘、

LED显示

管、扬声器组成。

系统完成显示输入信息、播放相应音符等基本功能。

本设计的系统运行稳定,其优点是硬件电路简单,软件功能完善,控制系统可靠,性价比较高等,具有一定的实用和参考价值。

关键词:

AT89C51矩阵键盘;LED显示管;扬声器

1)

2)

3)

查阅相关电子琴的资料,了解熟悉单片机控制单音喇叭发声原理。

利用键盘的16键,能够发出1,2,3,4,5,6,7等7个音符,具有一般演奏功能,要求按下键发声,松开则延时一段时间停止,中间再按别的键,则发出另一个音调的。

存储有一首歌的音乐,设置按键按下具有自动播放已存曲目功能。

1.3引

单片微型计算机是大规模集成电路技术发展的产物,属第四代电子计算机,

它具有高性能、高速度、体积小、价格低廉、稳定可靠、应用广泛的特点。

AT89C51

是美国ATMEL公司生产的低功耗,高性能CMOS位单片机,片内含4k字节的可系

统编程的Flash只读程序存器,器件采用ATME公司的高密度、非易失性存储技

术生产,兼容标准8051指令系统及引脚。

由于将多功能8位CPU和闪烁存器组合

在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C51是它的一种精简

版本。

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

可为您提供许多高性价比的应用场合,可灵活应用于各种控制领域。

单片机具有

强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不

可替代的一部分。

 

电子琴已为人们所熟知,它可以演奏出非常动听的乐曲,它在现代音乐扮演着重要的角色。

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

在许多专用的电子琴电路中,都采用了特殊的集成电路来完成电子电路的设计利用专用电路产生的声音信号驱动扬声器发音,通过演奏者不同的操作,弹奏出美妙的乐曲。

但是,以单片机作为主控核心,与键盘、蜂鸣器等模块组成核心主控制模块就可以达到设计一个简易电子琴的目的。

1.4基于AT89C51单片机简易电子琴的设计思想

单片机产生音乐的要素一般说来,单片机演奏音乐基本都是单音频率,它不

包含相应幅度的谐波频率,也就是说不能像电子琴那样能奏出多种音色的声音。

因此,单片机奏乐只需弄清楚两个概念,也就是“音调”和“节拍”。

音调表示个音符唱多高的频率,节拍表示一个音符唱多长的时间。

一首音乐是由许多不同的音符组成的,而每个音符对应着不同的频率,这样

我们就可以利用不同的频率的组合,

加上与拍数对应的延时,即可构成我们所想

 

要的音乐了。

所以本课程设计的主要内容是用

AT89C52单片机为核心控制元件,设计

个电子琴。

以单片机作为主控核心,

与键盘、蜂鸣器等模块组成核心主控制模块,

 

在主控模块上设有16个按键和蜂鸣器,用不同的频率和延时的时间来产生音乐的要素“音调”和“节拍”。

1.5设计功能

由4X4组成16个按钮矩阵,设计成16个音,可随意弹奏想要表达的声音。

2)

设计有音乐存储,按键按下后播放。

 

3)

键盘矩阵识别,即矩阵扫描在数码管上可以显示矩阵键盘按下哪个按键。

、方案比较与论证

2.1举例方案

方案一:

用VHDL语言编程来实现系统整体基本原理图如下:

利用我们实验室先进的数字电路实验设备,我们可以采用VHDL语言编程来实现。

我们可以通过VDHL

语言,对实验原理图的各个部分进行设计,通过编译,可以在计算机上下载此实验原理图,利空电路学习机上的芯片。

方案二:

利用AT89C51单片机为核心控制元件,以单片机作为主控核心,与键盘、

蜂鸣器等模块组成核心主控制模块,在主控模块上设有16个按键和蜂鸣器来设

计一个电子琴。

方案一显得比较笼统,只是把整个系统分为了若干个模块,而不牵涉到具体的硬件电路。

而方案二,利用单片机4X4组成16个按钮矩阵,设计成16个音对应音乐音符。

按一个键,单片机检测按下的那个键并查表查找相应的音符,输出到音频处理模块驱动蜂鸣

最终可随意弹奏想要表达的

扬声器、LED显示管模块

器发出音符。

利用单片机产生不同频率来获得我们要求的音阶,音乐。

所以本次设计采用方案二。

2.2系统组成

本系统只要以51单片机为主控核心,与矩阵键盘、一起组合而成。

具体如下:

 

单片机

 

2.3流程图

TO中断入口

■峠

重装TMTLQ初值

中断返回

 

、电路设计

3.1、蜂鸣器模块

单片机实验板蜂鸣器原理图如下图表1所示:

图表1

蜂鸣器发声原理是电流通过电磁线圈,使电磁线圈产生磁场来驱动振动膜发声的,因此需要一定的电流才能驱动它,单片机IO引脚输出的电流较小,单片机输出的TTL电平基本上驱动不了蜂鸣器,因此需要增加一个电流放大的电路。

如图一所示,蜂鸣器的正极接到VCC(+5V电源上面,蜂鸣器的负极接到

三极管的发射极E,三极管的基级B经过限流电阻R1后由单片机的P3.6引脚控制,当P3.6输出高电平时,三极管T1截止,没有电流流过线圈,蜂鸣器不发声;

当P3.6输出低电平时,三极管导通,这样蜂鸣器的电流形成回路,发出声音。

因此,我们可以通过程序控制P3.6脚的电平来使蜂鸣器发出声音和关闭。

用延时程序或者定时器控制接蜂鸣器的端口输出频率在2KHZ左右的矩形波就能

让蜂鸣器发声了。

程序中改变单片机P3.6引脚输出波形的频率,就可以调整控制蜂鸣器音调,生各种不同音色、音调的声音。

另外,改变P3.6输出电平的高

低电平占空比,则可以控制蜂鸣器的声音大小。

3.2矩阵键盘模块

在单片机组成的各种系统中,本次试验用的是非编码键盘,矩阵键盘。

矩阵键盘:

由单片机I/O口构成的行列式键盘,优点:

扫描速度快,按键数

量多缺点:

按键间存在关联,不能级联。

矩阵式结构的键盘识别要复杂一些,列线通过电阻接正电源,并将行线

所接的单片机的I/O口作为输出端,而列线所接的I/O口则作为输入。

这样,

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

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

态就可得知是否有键按下了。

单片机实验板键盘原理图如下图表2所示:

键盘原理图的PCB图如图表3所示:

kI

k2

k3

k&

J

s?

H

a■■

*11

11

*

<►,1

*

*11

4»|

aS

1

T

H

T

2c

❶I

®1

e

<»|

kS

kF

kS

PL

够,1

*

111

档11

*11

«l

T

H

T

O1

W1

0'

km

k1O

If1I

"k12

料1

*

料;

•t;

«

*

争*

'^1'

巒I

k13

kt叫

kI5

ky

MS

011

111

❺I1

11

❻1

1,

H

H

H

T

4»1

势1

图表3

独立键盘模块

独立键盘:

单片机一个I/O口连接一个按键。

独立键盘的原理图如图表4所示:

图表4

3.3主控模块

最小系统的原理图如图表5所示:

 

图表5

总的原理图如图表

6所示:

in

n■

3

p_

3.4首乐设计

P[]2

PN3

F门i

PL.45

rt.56

PHr

Pl73

9

P3U10

P?

]II]

F22L2

M3B

Pj4匸

FT?

""rr

D"IS

戶117

?

图表

音调”和节拍”

(1)本设计的控制矩阵键盘使用定时器

矩阵键盘的音调计算:

FCD

VCC

PL.l

FD.O

Pl3

MI

PI3

PD3

Pt4

PD*

Pt5tMOS[J

pn4

PL.睢』OSD)

pn.5

?

L.7tSCK?

PH』

P.JT

PD.7

PWD

碌yp

P3\(~yD}.

£LEbR3C

Pl

l5^】

F2?

P?

列TO)

P2h

P35d

F2.5

Pj.lidVR:

P14

?

J.7[.Rr>

PJ.J

JCAL?

P23

riaTIL-ISCirJll2]珀“i”

GriD

P30

STCSflC?

X-a?

S5X

PO.IJi

10

计数脉冲值与频率的关系式是:

N=fj

s

23

P2.t

k5

F2:

R:

=lmp-■I

讪-If’+2】^r~irt

TO方式1的音调的计算方法如下

 

式中,N是计数值:

fj是机器频率(晶体振荡器为11.0592MH时,其频率为

1,16个键的频率

1MHz);fr'是想要产生的频率’。

本设计定时器工作方式

音阶对应频率(音调的频率)表如图表7所示:

键kOlk02k03k04k05koekO?

kl5

音低低低低低低低

DO

RE

FA

SO

LA亠SI咼DO

频率(HQ计数值

1¥59

1567

1396

1320

1573

1047

933

441

图表

262

294

330

349

292

440

494

1046

犍k08k09klOkllkl2kl3kl4kl6

音中中中中中中中

DO

REM

FA

SOLA31

raRE

频率(Hz卅数值

832

785

699

660

53?

524

466

392

554

53?

659

69S

734

830

988

1174

节拍的计算方法

本设计使用定时器T0的中断控制播放音乐《一闪一闪亮晶晶》,T0工作方式0,

图表8列出了C音调与频率的对应关系。

1、C音调与频率的对应关系表

C音调与频率的对应关系表

音调

低1(“dao”)

低2

低3

低4

低5

低6

低7

频率

262

294

330

349

392

440

494

音调

1(中音

“dao”)

2

3

4

5

6

7

频率

523

587

659

698

784

880

988

音调

高1

高2

高3

高4

高5

高6

高7

频率

1064

1175

1318

1397

1586

1760

1967

图表8

2.定时常数C计算公式

106

us

C=2f460830

1.085usf

T0工作方式0.最大计数为8192,在已知定是常数为C的条件下,13位计算器的

高8位和低5的初值可由以下公式设定

TH0=(8192-C)/32;

TL0=(8192-C)%32;

3.简单乐谱|1155|665-|4433|221-|5544|332-|5544|332-|1155|665-|4433|221-|4..节拍控制

本例简谱的节拍为每分钟72拍,则每个节拍需时间

(1000*60mS)/72=833ms

“1“为1拍,需延时833ms

“2”为1/2拍,需延时833/2ms

“3”为1/4,需延时833/4ms

3.5工作原理

矩阵键盘的工作原理:

通过AT89C51单片机为核心控制元件,设计一个能

发出电子音调的简易电子琴。

在控制模块上设有16个矩阵键盘按键,通过按下

SI7个低音符的声音;

SI7个中音符的声音;当我们随意按下矩阵键

矩阵键盘K01一K7键,可发出DOREMFASOLA

矩阵键盘K08—K14键,可发出D0REMFASOLA

K15键是高音符DO的声音,K16键是高音符RE的声音。

盘上的一个按键时,可以发出相应的声音。

本设计有一个功能选择键(选择使用矩阵键盘选择键或者选择自动播放音乐选择键),一个矩阵键盘选择键、一个自动播放音乐选择键,通过按下功能选择键,可以实现按键发音功能和音乐播放功能之间的切换。

在矩阵按键发音的功能下,可以通过音调选择键来选择三个不同的音阶进行发音;在音乐播放功能下,可以自动播放音乐。

3.6创新部分

当我们选择矩阵键盘选择键的时候,在矩阵按键发音的功能下,可以通过音

调选择键来选择三个不同的音阶进行发音,同时在主板的数码管上可以同时显示

你在矩阵键盘上按下哪一个键。

例如你按下K01键,同时在数码管显示01这个

数字。

3.7LED数码显示管与单片机的连接

led数码管(LEDSegmentDisplays)是由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,

公共电极。

led数码管常用段数一般为7段有的另加一个小数点,还有一种是类似于3位“+T型。

位数有半位,1,2,3,4,5,6,8,10位等等....,led数码管根据LED的接法不同分为共阴和共阳两类,了解LED的这些特性,

对编程是很重要的,因为不同类型的数码管,除了它们的硬件电路有差异外,编程方法也是不同的。

数码管动态显示介面是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM

增加位元选通控制电路,位元选通由各自独立的I/O线控制,当单片机输

出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位元选通COM端电路的控制,所以我们只要

将需要显示的数码管的选通控制打开,该位元就显示出字形,没有选通的数码管就不会亮。

透过分时轮流控制各个LED数码管的COM端,就使各个数码管轮流受

控显示,这就是动态驱动。

在轮流显示过程中,每位元数码管的点亮时间为1〜2ms,由于人的视觉暂留现象及发光二极体的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示资料,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O埠,而且功耗更低。

由此本实验是将P2口通过芯片与

数码管连接,以达到点亮数码管的效果。

静态显示的特点是每个数码管的段选必须接一个8位数据线来保持显示的

CPU时间少,显示便于监测和控制。

字形码。

当送入一次字形码后,显示字形可一直保持,直到送入新字形码为止。

这种方法的优点是占用

 

+5V

1

fl

a

n

lb

el

1

1

|c

1

1

1

L

1dp

gfGNDab

edGNDcdp

(a)

图表9

abcdefg

o

CJ-

dpo

(b)

 

3.8源程序

主函数:

#include#include"music.h"#include"piano.h"voidmain()

InterruptPiano();

while

(1)

P1=0xfe;

temp=P1;

temp=temp&0xf0;

PlaySelect();

#endif

播放音乐的程序:

//************************************************#defineMUSIC_GLOBALS

#include"music.h"#include"piano.h"

//************************************************

#definedao523

#definere587

#definemi659

#definefa698

#definesao784

#definela880

#definexi987

unsignedintcodef[]={dao,dao,sao,sao,

la,la,sao,

fa,fa,mi,mi,re,re,dao,sao,sao,fa,fa,mi,mi,re,sao,sao,fa,fa,mi,mi,re,dao,dao,sao,sao,la,la,sao,fa,fa,mi,mi,re,re,dao,0xff};

unsignedcharcodeJP[]={4,4,4,4,

4,4,8,

4,4,4,4,

4,4,8,

4,4,4,4,

4,4,8,

4,4,4,4,

4,4,8,

4,4,4,4,4,4,8,

4,4,4,4,

4,4,8,};

/*

延时子程序2OOms

*/

voidMusicdelay()

{unsignedchari,j;

for(i=0;i<250;i++)

for(j=0;j<250;j++)

/*

定时器TO的中断服务子程序,使P3.6引脚输出音频的方波

*/

voidTimeO(void)interrupt1using1

{sound=!

sound;

THO=(8192-C)/32;

TLO=(8192-C)%32;

/*

主函数

*/

voidMusicInit()

EA=1;

ETO=1;

 

TMOD=0x00;

while(Music_count==1)

{i=0;

if(key1==0)

Music_count=0;

Piano_count=0;

while(f[i]!

=0xff&&Music_count==1)

if(key1==0)

Music_count=0;

Piano_count=0;

C=460830/f[i];

TH0=(8192-C)/32;

TL0=(8192-C)%32;

TR0=1;

for(j=0;j

Musicdelay();

TR0=0;

i++;

#endif

矩阵键盘的程序:

 

//************************************************

//************************************************#definePIANO_GLOBALS#include"piano.h"#include"music.h"//************************************************//变量定义

unsignedinttab[]={1759,1567,1396,1320,

1578,1047,933,832,785,699,660,587,524,466,441,392};

ucharcodenum[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

/*************************************************

延时子函数

*************************************************/voiddelay(uintz)

uintx,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

/************************************************

中断初始化函数

************************************************/voidInterruptPiano()

TMOD=0x01;

TH0=0xd8;

TL0=0xf0;

EA=1;

ET0=1;

TR0=0;

/************************************************

选择电子琴或者音乐播放函数

************************************************/

voidPlaySelect()

if(PianoKey==0)

Piano_count=1;

if(Piano_count==1&&Music_count==0)

Piano();

if(MusicKey==0)

Music_count=1;

if(Music_count==1&&Piano_count==0)

MusicInit();

if(key1==0)

Music_count=0;

Piano_count=0;

/*************************************************

键盘驱动电子琴函数

************************************************

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

当前位置:首页 > 小学教育 > 学科竞赛

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

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