多功能电子琴设计报告Word文档格式.docx

上传人:b****5 文档编号:20571611 上传时间:2023-01-24 格式:DOCX 页数:24 大小:297.16KB
下载 相关 举报
多功能电子琴设计报告Word文档格式.docx_第1页
第1页 / 共24页
多功能电子琴设计报告Word文档格式.docx_第2页
第2页 / 共24页
多功能电子琴设计报告Word文档格式.docx_第3页
第3页 / 共24页
多功能电子琴设计报告Word文档格式.docx_第4页
第4页 / 共24页
多功能电子琴设计报告Word文档格式.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

多功能电子琴设计报告Word文档格式.docx

《多功能电子琴设计报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《多功能电子琴设计报告Word文档格式.docx(24页珍藏版)》请在冰豆网上搜索。

多功能电子琴设计报告Word文档格式.docx

4的键盘矩阵、LED数码显示管设计一台多功能电子琴。

其基本功能如下:

(1)可以播放两个八度的音阶;

(2)可以弹奏想要的音乐;

(3)可以播放预先存储在单片机里的音乐;

(4)可以在LED数码管上显示正在播放和弹奏的音阶。

1.2系统总体设计方案

本系统采用AT89C52为电子琴控制中心,系统主要包括主控制模块、琴键控制模块、播放模块、显示模块和电源模块。

下面对这几个模块的设计进行论证比较。

1.2.1系统设计思路

本设计采用AT89C52单片机作为整个系统的控制中心,控制整个系统的运行,外加琴键控制模块、播放模块、显示模块和电源模块使制作的电子琴可以完成上述功能。

琴键控制模块由16个按键组成,使用者可以通过按不同的琴键弹奏出不同的音阶,一段音乐是由许多不同的音阶组成,而每个音阶对应着不同的频率,这样我们就可以根据不同的频率组合得到我们想要的音乐。

电源模块向单片机、LED数码管等需要供电器件提供电源。

播放模块负责播放琴键弹奏的音阶以及播放预先存放在单片机里的音乐,同时显示模块会显示出相应的音阶。

下表是不同的音阶对应的频率(以12MHz为例)。

音阶

频率(Hz)

中音1

523

高音1

1046

中音2

587

高音2

1174

中音3

659

高音3

1318

中音4

698

高音4

1396

中音5

784

高音5

1567

中音6

880

高音6

1760

中音7

988

高音7

1975

表1.1各音阶对应频率表

1.2.2系统总体组成框图

下图即为根据上述描述所绘制的多功能电子琴系统的总体组成框图:

图1.1系统总体框图

2.系统硬件设计

2.1主控制模块

本系统的主控制模块采用AT89C52单片机,AT89C52单片机是美国ATMEL公司生产的低电压、高性能CMOS单片机,片内含8kbytes的可反复擦除的flash只读程序存储器和256kbytes的随机存取数字存储器(RAM),与标准的MSC-51指令系统及8052引脚兼容,片内置通用8位中央处理器(CPU),可以满足不同控制应用场合的要求。

对于本次的多功能电子琴系统,AT89C52可以满足其对琴键的控制要求、输出音阶的控制要求、显示输出音阶等各模块的控制要求。

图2.1AT89C52管脚图

2.2琴键控制模块

电子琴利用4×

4的键盘矩阵作为电子琴的琴键,共有16个琴键,分别弹奏两个八度的音阶。

其中14个作为音符输入,一个作为播放键。

将键盘矩阵的接口与AT89C52单片机的P1口相连接,使键盘矩阵受单片机的控制。

这样,当按下各个音阶所代表的按键时,系统播放该按键代表的音阶;

当按下播放键时可以使系统播放预存在单片机里的音乐。

下表为所用4×

4键盘矩阵每个按键所代表的音阶或功能。

图2.2键盘矩阵实物图

代表音阶或功能

按键

A

#

B

2

C

5

D

8

3

6

1

9

4

播放键

7

表2.24x4矩阵各按键代表音阶或功能

2.3播放模块

电子琴的播放模块是由蜂鸣器组成。

蜂鸣器与AT89C52单片机的P3.7口相连接,使蜂鸣器受单片机的控制,通过软件编程,使蜂鸣器播放音阶的功能受键盘矩阵的按键控制。

这样,当按下某个琴键后,蜂鸣器便会发出的相应的音,若按下的是播放键,蜂鸣器会播放预存在单片机里的音乐。

图2.3播放模块仿真电路图

2.4显示模块

电子琴的显示模块由LED数码显示管组成。

LED有着显示亮度高、响应速度快的特点,常用的有七段LED显示器。

七段LED显示器由7个条形发光二极管和一个小圆点发光二极管组成,根据各管的亮暗组成字符。

本系统使用的LED数码显示管是共阴极数码显示管,数码显示管与单片机P0口相连接,受单片机控制,通过软件编程使数码显示管受键盘矩阵控制。

这样,当按下某个琴键后,LED数码显示管会显示出所弹奏音符对应的数字。

图2.4显示模块仿真电路图

2.5电源模块

电子琴的电源模块有一个手机充电器外加LM117-5.0稳压向单片机、LED数码显示管等元件供电。

下图即为LM1117-5.0稳压电源模块的原理图。

图2.5LM117-5.0电源模块原理图

3.系统软件设计

软件是多功能电子琴系统的主要组成部分,在系统的软件部份也采用了模块化设计,将系统各模块的功能编写成子函数的形式,这样增加了系统软件的可读性和可移植性。

3.1主程序流程说明

总体思想:

本系统软件设计部分分为三个模块:

琴键扫描模块,显示模块,播放模块,寻音模块。

寻音模块是将显示模块和播放模块集合在一个函数中,再把几个模块的程序结合在一个主程序中,同时实现键盘扫描、LED数码管显示音阶、播放音阶功能。

下图即为主程序流程图:

图3.1主程序流程图

3.2琴键扫描程序

(1)4×

4键盘矩阵的识别处理:

每个琴键都有它的行值和列值,行值和列值的组合就是这个琴键的编码。

矩阵的行线和列线分别通过两个并行接口和CPU通信。

(2)琴键处理程序:

确定是否有键按下,是哪个键按下,键的功能是什么;

还要消除键按下和断开时的抖动。

两个并行口中,一个输出扫描码,使琴键逐行动态接地,另一个并行口输入按键状态,由行扫描值和回馈信号共同形成键编码而实现琴键识别,通过软件查表,查出该键的功能。

图3.2键盘扫描程序流程图

3.3显示程序流程说明

利用单片机的P0接口连接到共阴极LED数码管的7个接口上,数码管的公共端接地,这样数码管就可以根据软件编程中给出的字型显示指令显示相应数字。

下表为LED字型显示代码表。

显示字符

十六进制代码

06H

6FH

5BH

77H

4FH

7CH

66H

39H

6DH

5EH

7DH

E

79H

07H

F

71H

7FH

H

76H

表3.1LED字型显示代码表

下图为显示程序的程序流程图。

图3.3显示程序流程图

3.4播放程序

利用单片机的P3.7接口连接到蜂鸣器上,根据所按下的琴键,发出相应的声音。

蜂鸣器发出声音是利用单片机的定时/计数器0产生不同的频率方波信号。

定时/计数器0初值计算方法如下:

C=(46083/f)*10(3-1)

其中f为对应音阶的频率。

TH0=(8192-C)/32(3-2)

TL0=(8192-C)%32(3-3)

利用定时/计数器的定时功能,使P3.7口按一定频率输出方波,产生对应音阶的音频输出。

下图为显示模块的程序流程图。

图3.4播放程序程序流程图

3.5寻音程序

寻音程序是将播放程序和显示程序集合在一个程序函数中,使得单片机控制蜂鸣器播放音阶时,可以同时显示出相同的音阶。

下图为寻音程序的程序流程图。

图3.5寻音程序流程图

4系统测试

4.1显示模块测试

对显示模块的测试,主要是为了验证显示模块是否能在键盘按下某个按键后显示出相应的数字。

测试步骤具体如下:

第一步:

检查焊接电路板的线路连接是否有错误,是否有虚焊、漏焊的地方,待确定电路连接、焊接均没有问题后才能进行下一步。

第二步:

接通系统的电源,此时,LED数码管应该显示“8”。

第三步:

按下键盘上的任一按键,观察LED数码管是否有显示出相应的数字,若显示出正确的数字,则表明测试成功。

若未成功,则应检查在程序中是否有错误。

4.2播放模块测试

对播放模块的测试,主要是为了验证播放模块是否能在键盘按下某个按键后播放相应的音阶。

接通系统的电源,此时,蜂鸣器应该不发出任何声音。

按下键盘上的任一按键,听蜂鸣器是否有播放出相应的音阶,若播放出了正确的音阶,则表明测试成功。

4.3整体测试

对系统的整体测试,主要是为了验证系统是否能在多模块的组合下完成设计需要的功能。

接通系统的电源,此时,LED数码管应该显示“8”,蜂鸣器不播放声音。

根据下表观察测试现象是否正常。

数码管显示

蜂鸣器播放音阶

显示播放音乐的音阶

播放预存音乐

表4.1系统测试对照表

5.总结

本系统以AT89C52单片机为核心,结合显示模块、播放模块、琴键控制模块和电源模块,实现两个八度音阶的弹奏,播放预存音乐,同时显示播放和弹奏的音阶的功能。

本系统的设计和制作是在对设计电路的仿真基础上完成的,通过仿真中发现的问题对系统的电路和程序进行进一步的调试,以达到更好的效果。

再根据仿真的电路制作实际电路,检验仿真的正确性。

通过这次课程设计,我们把平时学习到的知识应用到了实际中,加深了对所学知识的理解。

同时,我们从这次课程设计中也意识到自己对所学知识的掌握不够深入,对单片机系统的了解还不够细致,以及在编程能力上的缺陷。

例如,在对播放模块的编程中,由于仿真中播放模块只能在按键按下松开后才能放音,这与实际的电子琴的功能有差异,本想通过修改程序使蜂鸣器在按键按下时放音,松开后立即停止播放,不过经过几次的程序修改和仿真都未能实现这一功能。

从这点上,就可以看出我们在软件编程上的缺陷和不足,在以后的学习中,应该加强这方面的能力。

另外,在本次课程设计的过程中,我们深刻体会到了团队合作的重要性,只有一个团队齐心协力,每个成员各司其职才可以把工作做好。

最后,感谢在这次课程设计过程中为我们设计能够最后完成提供帮助和协助的老师和同学们!

参考文献

[1]李群芳,张士军,黄建.单片微型计算机与接口技术(第三版)北京:

电子工业出版社2009

[2]刘洁.简易电子琴设计报告大庆:

大庆石油学院

[3]杨文蕊.基于单片机的简易电子琴设计报告内蒙古:

内蒙古民族大学

[4]中国芯片手册网

[5]中国电子网

附录

附录一元件清单

序号

名字

数量

备注

AT89C52

1个

LED数码管

共阴极数码管

4键盘矩阵

晶振

12MHz

手机充电器

作为电源供应

AMS1117-5.0

将电源稳压至5V

蜂鸣器

作为播放模块

导线,电路板,电阻,电容

若干

附录二系统使用说明

一、接通系统的电源

将电源线的正负极和电路板上正负极相接,此时LED数码管会显示“8”,蜂鸣器不发出任何声音。

二、弹奏和播放功能

上图显示的是按下键盘的B键,LED数码管会显示“2”,同时蜂鸣器会播放出中音2,如果按下键盘的其他键则会显示和播放出相应的音阶,若按下7键,系统会播放预存在系统中的音乐,LED数码管根据相应的音乐显示相应的音阶。

附录三系统仿真电路

附图1系统仿真电路图

下图为按下某一按键后的仿真电路图。

附图2工作时的系统电路图

附录四程序清单

#include<

reg51.h>

sbitP14=P1^4;

//将P14位定义为P1.4引脚

sbitP15=P1^5;

//将P15位定义为P1.5引脚

sbitP16=P1^6;

//将P16位定义为P1.6引脚

sbitP17=P1^7;

//将P17位定义为P1.7引脚

unsignedcharkeyval;

//定义变量储存按键值

sbitsound=P3^7;

//将sound位定义为P3.7

unsignedintC;

//全局变量,储存定时器的定时常数

unsignedintf;

//全局变量,储存音阶的频率

codechartab[17]={0,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x76};

codecharmusic[]={1,2,3,4,5,5,5,4,3,4,4,4,3,2,1,3,5,1,2,3,4,5,5,5,4,3,4,4,4,3,2,1,3,1};

inti;

//以下是C调中音的音频宏定义

#definedao523//将“dao”宏定义为中音“1”的频率523Hz

#definere587//将“re”宏定义为中音“2”的频率587Hz

#definemi659//将“mi”宏定义为中音“3”的频率659Hz

#definefa698//将“fa”宏定义为中音“4”的频率698Hz

#definesao784//将“sao”宏定义为中音“5”的频率784Hz

#definela880//将“la”宏定义为中音“6”的频率880Hz

#definexi988//将“xi”宏定义为中音“7”的频率988Hz

//以下是C调高音的音频宏定义

#defineh_dao1046//将“h_dao”宏定义为高音“1”的频率1046Hz

#defineh_re1175//将“h_re”宏定义为高音“2”的频率1174Hz

#defineh_mi1318//将“h_mi”宏定义为高音“3”的频率1318Hz

#defineh_fa1397//将“h_fa”宏定义为高音“4”的频率1396Hz

#defineh_sao1568//将“h_sao”宏定义为高音“5”的频率1567Hz

#defineh_la1760//将“h_la”宏定义为高音“6”的频率1760Hz

#defineh_xi1967//将“h_xi”宏定义为高音“7”的频率1975Hz

voiddisplay(unsignedintm)

{

P0=tab[m];

}

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

函数功能:

软件延时子程序

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

voiddelay20ms(void)

unsignedchari,j;

for(i=0;

i<

100;

i++)

for(j=0;

j<

60;

j++);

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

节拍的延时的基本单位,延时200ms

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

voiddelay()

250;

j++)

;

输出音频

入口参数:

voidOutput_Sound(void)

C=(46083/f)*10;

TH0=(8192-C)/32;

TL0=(8192-C)%32;

TR0=1;

delay();

TR0=0;

sound=1;

keyval=0xff;

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

根据按键播出相应音频

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

voidxunyin(keyval)

switch(keyval)

case1:

f=dao;

Output_Sound();

display

(1);

break;

case2:

f=re;

display

(2);

case3:

f=mi;

display(3);

case4:

f=fa;

display(4);

case5:

f=sao;

display(5);

case6:

f=la;

display(6);

case7:

f=xi;

display(7);

case8:

f=h_dao;

display(8);

case9:

f=h_re;

display(9);

case10:

f=h_mi;

display(10);

case11:

f=h_fa;

display(11);

case12:

f=h_sao;

display(12);

case13:

f=h_la;

display(13);

case14:

f=h_xi;

display(14);

case15:

34;

{xunyin(music[i]);

}

主函数

voidmain(void)

EA=1;

//开总中断

ET0=1;

//定时器T0中断允许

ET1=1;

//定时器T1中断允许

TR1=1;

//定时器T1启动,开始键盘扫描

TMOD=0x10;

//分别使用定时器T1的模式1,T0的模式0

TH1=(65536-500)/256;

//定时器T1的高8位赋初值

TL1=(65536-500)%256;

while

(1)//无限循环

{xunyin(keyval);

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

voidTime0_serve(void)interrupt1using1

//可证明这是13位计数器TH0高8位的赋初值方法

//可证明这是13位计数器TL0低5位的赋初值方法

sound=!

sound;

//将P3.7引脚取反,输出音频方波

定时器T1的中断服务子程序,进行键盘扫描,判断键位

voidtime1_serve(void)interrupt3using2

TR1=0;

P1=0xf0;

if((P1&

0xf0)!

=0xf0)

delay20ms();

//延时一段时间、软件消抖

=0xf0)//确实有键按下

P1=0xfe;

if(P17==0)

keyval=1;

if(P16==0)

keyval=2;

if(P15==0)

keyval=3;

if(P14==0)

keyval=4;

P1=0xfd;

keyval=5;

keyval=6;

keyval=7;

keyval=8;

P1=0xfb;

keyval=9;

keyval=10;

keyval=11;

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

当前位置:首页 > 幼儿教育 > 唐诗宋词

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

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