电子琴设计报告.docx

上传人:b****1 文档编号:2656348 上传时间:2023-05-04 格式:DOCX 页数:18 大小:130.17KB
下载 相关 举报
电子琴设计报告.docx_第1页
第1页 / 共18页
电子琴设计报告.docx_第2页
第2页 / 共18页
电子琴设计报告.docx_第3页
第3页 / 共18页
电子琴设计报告.docx_第4页
第4页 / 共18页
电子琴设计报告.docx_第5页
第5页 / 共18页
电子琴设计报告.docx_第6页
第6页 / 共18页
电子琴设计报告.docx_第7页
第7页 / 共18页
电子琴设计报告.docx_第8页
第8页 / 共18页
电子琴设计报告.docx_第9页
第9页 / 共18页
电子琴设计报告.docx_第10页
第10页 / 共18页
电子琴设计报告.docx_第11页
第11页 / 共18页
电子琴设计报告.docx_第12页
第12页 / 共18页
电子琴设计报告.docx_第13页
第13页 / 共18页
电子琴设计报告.docx_第14页
第14页 / 共18页
电子琴设计报告.docx_第15页
第15页 / 共18页
电子琴设计报告.docx_第16页
第16页 / 共18页
电子琴设计报告.docx_第17页
第17页 / 共18页
电子琴设计报告.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

电子琴设计报告.docx

《电子琴设计报告.docx》由会员分享,可在线阅读,更多相关《电子琴设计报告.docx(18页珍藏版)》请在冰点文库上搜索。

电子琴设计报告.docx

电子琴设计报告

 

课程设计简述

课程:

微机原理与接口技术

设计名称:

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

 

目录

1设计背景3

2设计目的3

3设计要求3

4设计方案与技术分析4

4.1某微机控制系统简介4

4.2系统中被控对象电路设计6

4.3系统中人机交互电路设计6

4.4该微机控制系统中整个程序设计9

5实验验证与结论12

5.1软件调试12

5.2软件仿真13

6实验结论13

7参考文献14

1设计背景

随着电子技术的发展,电子技术正在逐渐改善着人们的学习、生活、工作,因此开发本系统希望能够给人们多带来一点生活上的乐趣,电子技术与音乐的结合不断加深。

由此而产生的电子琴在这种形势下,因其体积小,易于携带,经济适用,对初学者,尤其对识谱的人来说是很容易弹奏的,一首简单的曲子灵感好的人甚至不用很多的练习和教师的指导就能很快的弹奏出来。

是一般家庭都能承受得了的经济投入,而且电子琴键盘操作直观易于掌握。

这样就强烈地激发了学习者的学习兴趣,迅速地提高了电子琴的普及率。

电子琴使用简单。

深受广大音乐爱好者推崇。

作为电子专业的学生,掌握电子琴的制作是很好检验我们所学知识应用。

它所包含的知识基本上覆盖我们的模拟电子技术基础、数字电子技术基础、EDA技术、电子线路、单片机基础以及接口技术课程的重要章节。

虽然我们不能设计出很复杂的电子琴,主要是考虑到设备以及成本等一系列问题,因此我打算设计并制作一个简易的电子琴。

采用集成电路设计,基于AT89C51单片机设计一款简易的电子琴,采用4*4距阵键盘,鉴于传统电子琴可以用键盘上的“k0”到“k16”键演奏从低So到高DO等16个音,从而可以用来弹奏喜欢的乐曲。

2设计目的

通过单片机电子琴的设计,更深层次的了解单片机技术。

熟悉单片机的控制功用和系统原理应用。

对系统设计与实用编程有进一步强化。

体验音乐的原理与魅力。

3设计要求

设计采用C语言编程控制,巧妙的运用单片机的定时器与中断功能,实现音乐的音频、节拍的实时控制。

具体要求如下:

1)构造出微单片机的最小控制系统,能实现基本框架运作;

2)学习音乐音符的发音原理与节拍原理,了解音乐的神奇效果,熟悉常用歌曲的歌谱,并为下面的相关实践打好理论基础;

3)采用键盘设计理念,建立键符——音符的对应关系,巧妙运用音乐的频率特性,实现按键既得特定音符的功用;

4)并增加按钮控制系统运作,数码管实现实时音符(按键)符显示的功能,使按键弹奏的效果更加人性化与和谐完美。

4设计方案与技术分析

4.1某微机控制系统简介

控制系统的整体设计框架,如图1所示。

图1电子琴设计框架图

设计中涉及被控对象模块和人机交互模块的电路设计,以及软件编程部分。

这将在后面的论述中逐一介绍。

设计中,选用两种工作模式:

试音与弹奏。

通过两个按钮控制选取,并有相应的指示灯指示工作状态。

试音用于测试系统的可行性,选取童年歌曲“两只老虎”中的几句作为检测乐谱;弹奏模式下,通过4×4矩阵式键盘,完成美妙音乐的弹奏。

操作者可以按相应的键,弹奏出特定的音乐,实现作曲与奏乐的完美体验。

并且本设计中还添加了数码显示功能,用于显示实时的显示按下的键码,同时也与音符有内在的对应关系。

下面主要介绍,为何单片机可以实现美妙音乐的实时再现。

音乐实际上是有固定周期的信号。

本设计理念将采用AT89C51的两个定时器(T0,T1)控制信号的不定周期产生,从而实现音频的完美变化。

内部定时器使其工作计数器模式(MODE1)下,改变计数值TH0及TL0以产生不同频率的方法产生不同音阶,例如,频率为523Hz,其周期T=1/523=1912μs,因此只要令计数器计时956μs/1μs=956,每计数956次时将I/O反相,就可得到中音DO(523Hz)。

在P3.7脚上输出方波周期信号,产生乐音;通过矩阵键盘按键产生不同的音符,由此操作人员可以随心所欲的弹奏自己所喜爱的乐曲。

这样就做出了一台微型电子琴。

具体的音频控制原理如下:

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

若要产生音频脉冲,只要算出某一音频的周期(1/频率),再将此周期除以2,即为半周期的时间。

利用定时器计时半周期时间,每当计时终止后就将P3.7反相,然后重复计时再反相。

就可在P3.7引脚上得到此频率的脉冲。

利用单片机的内部定时器使其工作计数器模式(MODE1)下,改变计数值TH0及TL0以产生不同频率的方法产生不同音阶,例如,频率为523Hz,其周期T=1/523=1912μs,因此只要令计数器计时956μs/1μs=956,每计数956次时将I/O反相,就可得到中音DO(523Hz)。

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

N=fi÷2÷fr

式中,N是计数值;fi是机器频率(晶体振荡器为12MHz时,其频率为1MHz);fr是想要产生的频率。

其计数初值T的求法如下:

T=65536-N=65536-fi÷2÷fr

例如:

设K=65536,fi=1MHz,求低音DO(261Hz)、中音DO(523Hz)、高音DO(1046Hz)的计数值。

T=65536-N=65536-fi÷2÷fr=65536-1000000÷2÷fr

=65536-500000/fr

低音DO的T=65536-500000/262=63628

中音DO的T=65536-500000/523=64580

高音DO的T=65536-500000/1046=65058

单片机12MHZ晶振,高中低音符与计数T0相关的计数值如表1所示

表1音符频率表

音符

频率(HZ)

简谱码(T值)

音符

频率(HZ)

简谱码(T值)

休止

0

0

中4FA

698

64820

低1 DO

262

63628

中5SO

784

64898

低2 RE

294

63835

中6LA

880

64968

低3M

330

64021

中7SI

988

65030

低4FA

349

64103

高1DO

1046

65058

低5SO

392

64260

高2RE

1175

65110

低6LA

440

64400

高3M

1318

65157

低7SI

494

64524

高4FA

1397

65178

中1DO

523

64580

高5SO

1568

65217

中2RE

587

64684

高6LA

1760

65252

中3M

659

64777

高7SI

1967

65283

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

uintcodetab[]=

{

0,63628,63835,64021,64103,64260,64400,64524,

64580,64684,64777,64820,64898,64968,65030,

65058,65110,65157,65178,65217,65252,65283

音乐的音拍,一个节拍为单位(C调)(如表2所示)

表2曲调值表

曲调值

DELAY

曲调值

DELAY

调4/4

125ms

调4/4

62ms

调3/4

187ms

调3/4

94ms

调2/4

250ms

调2/4

125ms

对于不同的曲调我们也可以用单片机的另外一个定时/计数器来完成。

在这个程序中用到了两个定时/计数器来完成的。

其中T0用来产生音符频率,T1用来产生音拍。

4.2系统中被控对象电路设计

本设计中,被控对象为数码管、指示灯以及扬声器。

数码管用于实时显示键盘中所按下的键码;指示灯用于显示系统状态,如:

试音和弹奏两个模式;扬声器则是用于体现音乐的产生,将不同周期的电信号,转换为人类能够识别的美妙的音频信号。

4.3系统中人机交互电路设计

本设计的人机交互功能主要体现在4×4矩阵键盘上面,并且设置了两个工作模式按钮。

人机交互电路设计,如图4所示。

两个按钮,代表了两个工作模式。

分为:

试音和弹奏。

图4人机交互电路设计

试音是为了检验程序设计的可行性,起到验证的作用。

通过短小的几句乐谱,实现对整个单片机控制系统的稳定性以及可靠性,程序软件与硬件电路的设计的可行性进行检验。

为程序的再修改和完善,起到了重要的作用。

当按下试音按钮后,单片机进入试音工作模式。

操作者,仅需按下键盘中的SK0键,即可听到动听而充满儿童记忆的“两只老虎”的几句音乐。

此时,证明程序基本正确。

为下一步音乐的弹奏,做了一定的鉴定;

当操作者按下了弹奏按钮后,即可进入弹奏模式下。

它可以实现按键既得特定音符的神奇效果。

使操作者自己设计自己的音乐成为可能,亲身体验作为作曲家的完美想了感受。

表3中显示了键值与弹奏音符以及数码管显示的对应关系。

可以看到其中的巧妙之处。

硬件电路设计中,将单片机的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相连。

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

P2=DSY_CODE[k]

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

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

1

0x3f

低1DO

9

0x7f

中2RE

2

0x06

低2RE

A

0x6f

中3M

3

0x5b

低3M

b

0x77

中4FA

4

0x4f

低4FA

C

0x7c

中5SO

5

0x66

低5SO

D

0x39

中6LA

6

0x6d

低6LA

E

0x5e

中7SI

7

0x7d

低7SI

F

0x79

高1DO

8

0x07

中1DO

0

0x71

休止

数码管采用共阴极的工作方式。

该键盘为4×4矩阵键盘,其键码的识别是采用行扫描法完成的。

行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法,原理过程如下:

1)判断键盘中有无键按下

将全部行线Y0-Y3置低电平,然后检测列线的状态。

只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。

若所有列线均为高电平,则键盘中无键按下。

2)判断闭合键所在的位置

在确认有键按下后,即可进入确定具体闭合键的过程。

其方法是:

依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。

在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。

若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。

同时,键盘接口必须具有下面4个基本功能:

1)去抖动

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

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

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

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

2)防串键

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

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

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

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

3)被按键识别

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

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

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

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

4)键码产生

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

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

4.4该微机控制系统中整个程序设计

除了硬件设计外,还需要赋予实物以灵魂,才能实现真正的乐曲弹奏。

整个程序的设计流程图,如图5所示。

图5控制系统整体设计流程图

主程序段设计:

voidmain(void)

{LED1=1;

LED2=0;

P2=0x3f;

IE=0x87;

TMOD=0x01;

IT0=1;

IT1=1;

while

(1)

{

P0=0xf0;//发全0列扫描码

if((P0&0xf0)!

=0xf0)//若有键按下

{

delay();//延时去抖动

if((P0&0xf0)!

=0xf0)//延时后再判断一次,去除抖动影响

{

key=getkey();//调用键盘扫描函数

switch(key)//根据获取的按键位置得到k值

{

case0x11:

//1行1列

k=0;

break;

……后面的判断选择程序段等省略。

下面是矩阵键盘软件消抖,扫描程序段设计:

/*键消抖延时函数*/

voiddelay(void)

{

uchari;

for(i=300;i>0;i--);

}

/*键扫描函数*/

uchargetkey(void)

{

ucharscancode,tmpcode;

if((P0&0xf0)==0xf0)

return(0);

scancode=0xfe;

while((scancode&0x10)!

=0)//逐行扫描

{

P0=scancode;//输出行扫描码

if((P0&0xf0)!

=0xf0)//本行有键按下

{

tmpcode=(P0&0xf0)|0x0f;

/*返回特征字节码,为1的位即对应于行和列*/

return((~scancode)+(~tmpcode));

}

elsescancode=(scancode<<1)|0x01;//行扫描码左移一位

}

}

下面是中断程序段设计:

/*外部中断0,这里是弹奏按键*/

voidEX0_INT()interrupt0

{

FY=0;LED1=1;LED2=0;

}

/*外部中断1,这里是试音按键*/

voidEX1_INT()interrupt2

{

FY=1;LED1=0;LED2=1;

}

/*定时器0中断服务子程序*/

voidtime0_int(void)interrupt1using0

{

/*设置计数初值*/

TH0=STH0;

TL0=STL0;

SPK=!

SPK;//反相,产生输出脉冲

P2=DSY_CODE[k];

}

 

为了音符的实现,我们建立了一个表格,单片机通过查表的方式来获得相应的数据,

uintcodetab[]=

{

0,63628,63835,64021,64103,64260,64400,64524,

64580,64684,64777,64820,64898,64968,65030,

65058,65110,65157,65178,65217,65252,65283

对于不同的曲调我们也可以用单片机的另外一个定时/计数器来完成。

在这个程序中用到了两个定时/计数器来完成的。

其中T0用来产生音符频率,T1用来产生音拍。

ucharcodeSong[][50]=//“两只老虎”音乐的旋律

{{1,2,3,1,1,2,3,1,3,4,5,3,4,5,5,6,5,3,5,6,5,3,5,3,2,1,2,1,-1}

};

ucharcodeLen[][50]=//上面音乐的旋律每个音符对应的节拍

{{1,1,1,1,1,1,1,1,1,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,2,2,2,-1}

};

图6试音模式程序设计流程图

上面程序实现的是单首曲目循环播放。

为试音模式软件流程图,如图6所示。

5实验验证与结论

5.1软件调试

Keil软件是目前最流行开发MCS-51系列单片机的软件,这从近年来各仿真机厂商纷纷宣布全面支持Keil即可看出。

Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部份组合在一起。

掌握这一软件的使用对于使用51系列单片机的爱好者来说是十分必要的,如果你使用C语言编程,那么Keil几乎就是你的不二之选(目前在国内你只能买到该软件、而你买的仿真机也很可能只支持该软件),即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。

使用步骤:

1.打开keil,建立工程,输入程序;

2.编译和生成hex文件.

5.2软件仿真

1.打开Proteus,设计硬件电路图,如图8所示。

图8Proteus硬件电路图

2.导入hex文件,见图9所示。

图9导入hex文件

3.将鼠标置于电路图中SST89C52单片机器件上,右击后再左击,弹出图5-3中的对话框,在红线框中导入dzq.hex文件。

4.点击面板左下角的

,开始调试。

5.当按下“试音”按钮后,试音指示灯亮;接着按下键盘中的sk0后,试音开始,循环播放几句“两只老虎”。

6.当按下“弹奏”按钮后,弹奏指示灯亮;接着按下矩阵键盘的各按键,将弹奏出相应的音符。

6实验结论

通过keil调试后,无误;通过Proteus仿真,系统所设计功能均能完美完成。

本课题通过制作电子琴,将几个模块很好的融合起来,对使用单片机设计简易电子琴进行了分析,并介绍了基于单片机电子琴统硬件组成。

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

说明一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,于是我们可以利用单片机的定时/计数器T0来产生这样方波频率信号。

因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可,然后我们利用功放电路来将音乐声音放大,同时通过显示模块来确知自己所弹的音符。

通过这次课程设计,我感觉收获了很多:

首先,通过实践,加深对单片机系列知识及其系统的认识。

能实现简单的控制系统设计;

第二,通过设计学习到了很多软件的使用。

本次设计,软件部分用到了protues进行硬件设计,用keil进行程序编译。

第三,提高了自己的动手能力。

对单片机等控制系统的开发产生了浓厚的兴趣。

7课程设计体会

通过这次课程设计,我学到了不少课本上没有的知识,也锻炼了自己的动手能力,将以前学过的零散的知识串到一起。

经过长时间的设计及调试,本系统基本能实现按下键盘中相应的按键时会使数码管显示当前按键,扬声器播放对应的音符。

当按下音乐播放按键时,可以通过扬声器循环播放出已经存储的音乐但由于发声器是原因,本设计音频效果不是很好。

另外一个未能解决的问题是,当按下相应按键时部分按键的按键指示灯不能正常熄灭,而且播放音符时伴有一定的杂音。

我的综合设计主要涉及硬件和软件两方面的内容,通过这些我的硬件和软件开发能力都获得了提高。

基本了解了电子产品的开发流程和所要做的工作。

基本掌握了proteus仿真的方法。

通过开发板的设计和硬件搭建的过程,使我对51系单片机的接口有了更深层次的理解,熟悉了一些单片机常用的外围电路引脚和连接方法,如LED数码管,键盘等。

并且我学会了分析问题解决问题的能力,加深了对所学理论知识的理解和运用。

我的动手能力得到了很大的提高,创新意识得到了锻炼。

总的来说这次的课程设计收获还是很大的,刚拿到课程设计要求时感觉自己什么也不会,真得用心去做时才发现自己的单片机知识也并不是零,还是有一定基础的。

经过课程设计使自己对单片机知识有了进一步的掌握,对模电知识也有了很好的回顾。

当然也反应出了自己很多地方的不足,单片机基础知识还有待进一步提高,C语言编程也应该再去用心回顾下,模电学习的也不是很牢靠,总之自己还有很多的不足之处,还就再接再励提高自己的综合能

 

8考文献

[1]陈明荧.8051单片机课程设计实训教材[M].北京:

清华大学出版社,2003年9月.

[2]徐新艳.单片机原理、应用与实践[M].北京:

高等教育出版社,2005年3月.

[3]吴金戌,沈庆阳,郭庭吉.8051单片机实践与应用[M].第一版.北京:

清华大学出版社,2002年.

[4]吴金戌,沈庆阳,郭庭吉,8051单片机实践与应用[M].清华大学出版社,2001

[5]冯博琴,微型计算机原理与接口技术[M].清华大学出版社,2004[6]张毅刚,MCS-51单片机应用设计[M].哈尔滨工业大学出版社,

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

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2