电子琴设计报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

电子琴设计报告

院系:计算机科学学院专业:计算机科学与技术学号:201003784

姓名:张林峰

班级:计科1002

设计时间:2012.10.22

设计地点:4#2号机房

指导教师:严圣华

目录

一、总体方案

二、硬件介绍

三、音乐产生原理

四、软件设计

五、电子琴演示

六、实验体会

一、总体方案

1.1设计要求

1.要求达到电子琴的基本功能,可以用弹奏出简单的乐曲。

2.用键盘作出电子琴的按键,每键代表一个音符。

3.各音符按一定的顺序排列,必须符合电子琴的按键排列顺序。

4.固定音乐播放有按键控制。

1.2电子琴系统的组成

STC89C52单片机设计微型电子琴的方法,仅需STC89C52最小系统,扩展一组矩阵键盘,再接一组发光二极管用来指示电子琴的工作状态。

本系统分为两个部分,一个是音乐另一个是电子琴。

音乐播放部分:音乐实际上是有固定周期的信号。本文介绍用STC89C52的两个定时器(如T0,T1)控制,在P1.3脚上输出方波周期信号,产生乐音

电子琴弹奏部分:实际上就是把每个按键所对应的值经过处理后发给单片机,再在单片机内把数字当作指针指向所对应的音符。

二、硬件介绍

2.1 STC89C52

STC89C52是一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash 存储器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用

系统提供高灵活、超有效的解决方案。具有以下标准功能:8k字节Flash,512字节RAM,32 位I/O 口线,,内置4KB EEPROM,MAX810复位电路,三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口。

2.2 STC89C52引脚图

2.3引脚功能介绍

在这里就只介绍一下制作电子琴所用到的一些引脚功能。

VCC:供电电压。

GND:接地。

P3.2 /INT0(外部中断0)

P3.3 /INT1(外部中断1)

P3.4 T0(记时器0外部输入)

P3.5 T1(记时器1外部输入)

P3口连接矩阵键盘用来控制音符输出及音乐播放。

P0口控制数码管,以显示音符。

P2.6连接锁存器U6控制数码管的段选。

P2.7连接锁存器U7控制数码管的位选。

P2.0控制蜂鸣器

2.4矩阵键盘工作原理

列线通过电阻接正电源,并将行线所接的单片机的I/O口作为输出端,而列线所接的I/O口则作为输入。这样,当按键没有按下时,所有的输出端都是高电平,代表无键按下。行线输出是低电平,一旦有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可得知是否有键按下了。具体的识别及编程方法如下所述。

2.5矩阵键盘的按键识别方法

1、判断键盘中有无键按下将全部行线Y0-Y3置低电平,然后检测列线的状态。只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。若所有列线均为高电平,则键盘中无键按下。

2、判断闭合键所在的位置在确认有键按下后,即可进入确定具体闭合键的过程。其方法是:依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。

三、音乐产生原理

3.1不同频率产生原理

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

若要产生音频脉冲,只要算出某一音频的周期(1/频率),再将此周期除以2,即为半周期的时间。利用定时器计时半周期时间,每当计时终止后就将P2.0反相,然后重复计时再反相。就可在P1.3引脚上得到此频率的脉冲。利用STC89C52的内部定时器使其工作计数器模式(MODE1)下,改变计数值TH0及TL0以产生不同频率的方法产生不同音阶。

3.2 计数值TH0及TL0的计算方法

例如,频率为523Hz,其周期T=1/523=1912μs,因此只要令计数器计时956μs/1μs=956,每计数956次时将I/O反相,就可得到中音DO(523Hz)。

要是计数器记956次,就要设定此时的TH0、TL0的值。

TH0=(65536-956)/256=(11111100)2=0xfc

TL0=(65536-956)%256=(01000100)2=0X44

3.3音节频率表

四、软件设计

4.1数组的运用

为数码管写了一个显示0~F的数组,便于直接调用,来显示不同音符表示的数字,代码如下:

uchar code

shuma[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x 83,0xc6,0xa1,0x86,0x8e,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0 ,0xc0,0xc0,0xc0,0xc0,};

不同频率声音的TH0、TL0值也分别存在两个数组中,便于直接运用,如下:

codeunsignedcharFREQH[]={ 0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0x F8,

0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC,

0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE

相关文档
最新文档