带存储播放功能的简易电子琴设计.docx
- 文档编号:8280725
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:32
- 大小:182.12KB
带存储播放功能的简易电子琴设计.docx
《带存储播放功能的简易电子琴设计.docx》由会员分享,可在线阅读,更多相关《带存储播放功能的简易电子琴设计.docx(32页珍藏版)》请在冰豆网上搜索。
带存储播放功能的简易电子琴设计
1.前言
1.1.课题背景
随着社会的发展进步,音乐逐渐成为我们生活中很重要的一部分,有人曾说喜欢音乐的人不会向恶。
我们都会抽空欣赏世界名曲,作为对精神的洗礼。
本论文设计一个基于单片机的简易电子琴。
电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。
它在现代音乐扮演着重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。
电子科技也在不断的前进,电子技术正在以不同的方式改变着我们的生活,本系统的电子琴设计也是希望给人们带来一些生活的乐趣。
本系统可以应用在很多方面,比如一些简易的玩具上或手机上。
单片机技术使我们可以利用软硬件实现电子琴的功能,从而实现电子琴的微型化,也可以对本系统进行一些扩展的加入一些其他功能。
本系展统的简易电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器,它在现代音乐扮演着重要的角色。
简单是因为旋律与和声缺乏音量变化,过于协和、单一;在模仿各类馆、弦乐器时,音色还不够逼真,模仿提琴类乐器的音色时,失真度更大,还需要不断改进。
本文的主要内容是用AT89C51单片机为核心控制元件,设计一个电子琴。
以单片机作为主控核心,与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有16个按键和扬声器。
本文主要对使用单片机设计简易电子琴进行了分析,并介绍了基于单片机电子琴统硬件组成。
利用单片机产生不同频率来获得我们要求的音阶,最终可随意弹奏想要表达的音乐。
并且本文分别从原理图,主要芯片,各模块原理及各模块的程序的调试来详细阐述。
1.2.电子琴系统设计的意义
单片微型计算机是大规模集成电路技术发展的产物,属第四代电子计算机,它具有高性能、高速度、体积小、价格低廉、稳定可靠、应用广泛的特点。
它的应用必定导致传统的控制技术从根本上发生变革。
因此,单片机的开发应用已成为高科技和工程领域的一项重大课题。
电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。
它在现代音乐扮演着重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。
本文的主要内容是用AT89S51单片机为核心控制元件,设计一个电子琴。
以单片机作为主控核心,与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有16个按键和扬声器。
本文主要对使用单片机设计简易电子琴进行了分析,并介绍了基于单片机电子琴统硬件组成。
利用单片机产生不同频率来获得我们要求的音阶,最终可随意弹奏想要表达的音乐。
并且本文分别从原理图,主要芯片,各模块原理及各模块的程序的调试来详细阐述。
本系统是简易电子琴的设计,按下键盘矩阵中的按键会使数码管显示当前按键,扬声器播放器对应的音符。
本系统电子琴设计,设计简单,所需器件价格便宜,总体价格比较便宜,功能健全,能够满足一般消费者,或爱好音乐的人的基本需求。
因此本系统设计既实用又便宜。
对于人们的业余生活意义较大。
单片机是在一块芯片内集成了计算机的各个功能部件,构成一种单片式的微型计算机。
通过单片机电子琴这个选题,更深层次的了解了单片机技术,以前只是有理论,实践的机会不是很多,在作单片机电子琴这个选题的过程中,更加熟练的掌握了一些单片机芯片的应用,也解决了很多以前理论和实践脱节的问题,可谓对单片机的认识有了一个小的飞跃。
目的:
掌握单片机与行列式键盘接口电路的工作原理与使用方法
掌握单片机总线扩展的基本原理及操作时序
掌握通过C51操作外部扩展RAM程序的设计方法
掌握利用单片机内部定时器产生不同频率声音的方法
软件的介绍(keilProteus)
Keil是德国开发的一个51单片机开发软件平台,最开始只是一个支持C语言和汇编语言的编译软件。
Keil的μVision3可以进行纯粹的软件仿真(仿真软件程序、不接硬件电路),也可以利用硬件仿真器,搭接上单片机硬件系统,在仿真器中载入项目程序后进行实时仿真,在不需要额外的硬件仿真器的条件下,搭接单片机硬件系统对项目程序进行实时仿真。
Proteus是英国LabcenterElectronics公司开发的多功能EDA软件。
Proteus是目前较先进的单片机和嵌入式系统的设计与仿真平台。
它实现了在计算机上完成从原理图与电路设计、电路分析与仿真、单片机代码级调试与仿真、系统测试与功能验证到形成PCB的完整的电子设计、研发过程。
由于Proteus软件包逼真、真实的协同仿真功能,得到了包括剑桥在内的众多大学用户,作为电子学或嵌入式系统的课程教学、实验和水平考试平台。
利用Proteus与Keil整合构建单片机虚拟实验室,为解决电路设计以及仿真提供了很好的发展平台。
本设计是在Keil使用89C51单片机及单片机C语言,在Proteus仿真平台上实现基于单片机的简易电子琴。
对于提高和改进电子琴功能的设计有着重要参考意义。
1.3.简易电子琴功能概述
单片机因体积小、功能强、价格低廉而得到广泛应用。
AT89C51单片机设计微型电子琴的方法,仅需AT89C51最小系统,扩展一组矩阵键盘,再接一组发光二极管用来指示电子琴的工作状态。
本系统分为两个部分,一个是音乐,另一个就是电子琴。
1.单片机并行连接4*4矩阵键盘和一位数码管
2.利用单片机内部定时器T0的定时功能产生音符所对应的音调
3.经功率放大器后输出至音箱
4.在弹奏音乐的同时将音符显示与数码管
5.具备存储在播放所弹奏的音乐的功能
2.系统总体设计方案
2.1.系统的组成
嵌入式电路,按键电路,LED显示电路和三个功能键组成,通过功能键可以选择播放音乐。
(按键一:
是否录音;按键二:
是否播放;按键三:
复位键)
该系统通过电子琴按键随意键入所要表达的音符,作为电平送给主体电路,中央处理器通过识别,解码输出音符,在扬声器中发出有效的声音。
通过这样可以不断的弹奏音乐。
2.2.工作原理
打开电子琴电源开关后,电子琴默认为弹奏状态(录音LED灯亮表示按键弹奏录音,不亮则普通按键弹奏功能),弹奏/播放显示灯点亮。
此时可以进行弹奏音乐,按下矩阵键盘中的任意键,扬声器发相应的音调,数码管显示对应的数字。
按下播放按钮,电子琴处于自动播放状态,弹奏/播放显示灯不亮,就会播放刚才弹走过的音乐,并循环进行播放,如果按下录音按键,将录音灯灭掉,此时播放的音乐改变,播放电子琴内置的音乐,并显示相应音符,循环播放。
此时,如果按下复位键,数码管显示0,清楚录音,此时系统又处于弹奏状态。
3.硬件电路设计
3.1.总体设计软件模型
连线:
P3^7————蜂鸣器
P2^0————连接LED0(模式指示灯:
弹奏--亮,播放--不亮)
P2^1————连接LED1和独立开关(录音指示灯:
弹奏保存--亮,弹奏不保存--不亮)
P3^2————独立按键,外部中断控制复位键
P3^3————独立按键,外部中断播放/弹奏切换按键
P1————连接数码管显示
P0————连接矩阵键盘
此设计模块实现的功能有:
1.把不同的频率也就是节拍的声音输入到放大器,播放弹奏的声音;
2.在弹奏音乐的同时将音符显示于数码管;
3.弹奏音乐的时候要将音符输入到数码管;
4.播放内置储存的音乐时要显示此时播放的音乐音符;
5.具备存储在播放所弹奏的音乐的功能;
6.复位功能,模式复位、录音清楚,数码管显示为0。
3.2.AT89C51单片机相关介绍
3.2.1.AT89C51简介
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FlashProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。
AT89C51它是一个低功耗高性能单片机,40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,2个16位可编程定时计数器,2个全双工串行通信口,AT89C51可以按照常规方法进行编程,也可以在线编程。
AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
外形及引脚排列如图3.2所示。
3.2.2.
AT89C51管脚说明
·VCC:
供电电压。
·P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
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口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
·P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
·RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
·ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
·PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次
有效。
但在访问外部数据存储器时,这两次有效的
信号将不出现。
·EA/VPP:
当
保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,
将内部锁定为RESET;当
端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
·XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
·XTAL2:
来自反向振荡器的输出。
另外,P3口也可作为AT89C51的一些特殊功能口,如下所示。
口管脚备选功能
P3.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2/INT0(外部中断0)
P3.3/INT1(外部中断1)
P3.4T0(记时器0外部输入)
P3.5T1(记时器1外部输入)
P3.6/WR(外部数据存储器写选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
AT89C51主要特性
·与MCS-51兼容
·4K字节可编程闪烁存储器
·寿命:
1000写/擦循环
·数据保留时间:
10年
·全静态工作:
0Hz-24MHz
·三级程序存储器锁定
·128×8位内部RAM
·32可编程I/O线
·两个16位定时器/计数器
·5个中断源
·可编程串行通道
·低功耗的闲置和掉电模式
·片内振荡器和时钟电路
3.2.3.芯片擦除
整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电平10ms来完成。
在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。
此外,AT89C51设有稳态逻辑,可以在零频率的条件下静态逻辑,支持两种软件可选的掉电模式。
在闲置模式下,CPU停止工作。
但RAM、定时器、计数器、串口和中断系统仍在工作。
在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。
3.3.矩阵式键盘的识别和显示
3.3.1.矩阵式键盘的结构与工作原理
矩阵用法方面,节省材料。
矩阵式结构的键盘显然比直接法要复杂一些,识别也要复杂一些,本系统中的矩阵键盘中,列线通过电阻接正电源,并将行线所接的单片机的I/O口作为输出端,而列线所接的I/O口则作为输入。
当按键没有按下时,所有的输出端都是高电平,代表无键按下。
行线输出是低电平,一旦有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可得知是否有键按下了。
矩阵式键盘如图所示。
矩阵式键盘
3.3.2.矩阵式键盘的按键识别方法
矩阵扫描法:
行扫描法,是一种最常用的按键识别方法,如上图所示键盘,介绍过程如下。
1、判断键盘中有无键按下。
将全部行线置低电平,然后检测列线的状态。
只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。
若所有列线均为高电平,则键盘中无键按下。
2、判断闭合键所在的位置。
在确认有键按下后,即可进入确定具体闭合键的过程。
其方法是:
依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。
在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。
若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。
相关代码:
P0=0xff;
Line=1;
Mask=0x01;
for(i=0;i<4;i++)
{
Col=0;
P0=~Mask;
ScanCode=P0&0xf0;
if(ScanCode!
=0xf0)delay();
ScanCode=P0&0xf0;
switch(ScanCode)
{
case0xe0:
Col=1;break;
case0xd0:
Col=2;break;
case0xb0:
Col=3;break;
case0x70:
Col=4;break;
default:
Col=0;break;
}
if(Col>0)
{
num=(Line-1)*4+Col;
if(SAVE==0)//保存,灯亮
{
save[a]=num;
a++;
}
if(num==0)
{
TR0=0;
SPK=1;//在未按键时,防止长期高电平损坏喇叭
}
else
{
P1=CharCode[num-1];
High=tab[num-1][0];
Low=tab[num-1][1];
TR0=1;
while
(1)
{
ScanCode=P0&0xf0;
if(ScanCode==0xf0)
{
TR0=0;
SPK=1;
break;
}
}
}
}
Mask<<=1;
Line++;
}
3.3.3.键盘接口必须具有的4个基本功能
(1)去抖动:
每个按键在按下或松开时,都会产生短时间的抖动。
抖动的持续时间与键的质量相关,一般为5—20mm。
所谓抖动是指在识别被按键是必须避开抖动状态,只有处在稳定接通或稳定断开状态才能保证识别正确无误。
(2)被按键识别:
如何识别被按键是接口解决的主要问题,一般可通过软硬结合的方法完成。
(3)键码产生:
为了从键的行列坐标编码得到反映键功能的键码,一般在内存区中建立一个键盘编码表,通过查表获得被按键的键码。
如下为键盘编码表:
unsignedcharcodetab[][2]=
{
0x00,0x00,
0xf8,0x8c,
0xf9,0x5b,
0xfa,0x15,
0xfa,0x67,
0xfb,0x04,
0xfb,0x90,
0xfc,0x0c,
0xfc,0x44,
0xfc,0xac,
0xfd,0x09,
0xfd,0x34,
0xfd,0x82,
0xfd,0xc8,
0xfe,0x06,
0xfe,0x22,
0xfe,0x56,
0xfe,0x85,
0xfe,0x9a,
0xfe,0xc1,
0xfe,0xe4,
0xff,0x03
};
这是个二维数组,第一列是高位(THx),第二列是地位(TLx),一共有16行,第一行对应休止符。
用AT89C51的并行口P0接4×4矩阵键盘,以P0.0-P0.3作输入线,以P0.4-P0.7作输出线;
(4)在数码管上显示每个按键的“0-F”序号。
3.4.按键显示模块
3.4.1.数码管的分类
本设计用的是七段码。
可显示0-F。
还可以用八段码。
按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。
1.共阳数码管:
是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。
共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。
当某一字段的阴极为高电平时,相应字段就不亮。
共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。
2.共阴数码管:
在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。
当某一字段的阳极为低电平时,相应字段就不亮。
数码管相关代码:
unsignedcharcodeCharCode[]=
{
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e
};
3.4.2.数码管的驱动方式
数码管的驱动方式分为:
静态式和动态式两类。
①静态显示驱动:
静态驱动也称直流驱动。
静态驱动是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动。
优点是:
编程简单,显示亮度高,缺点是占用I/O端口多。
②动态显示驱动:
动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。
通过分时轮流控制各个数码管的COM端,就使各个数码管轮流受控显示,这就是动态驱动。
在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。
显示模块如图所示。
3.5.功能显示灯模块
当按下弹奏/播放功能键时,LED0灯亮(P2^0)表示弹奏模式,再次按下LED0熄灭表示播放模式;当独立开关控制LED1亮时表示弹奏保存录音或者播放录音歌曲,不亮时则表示弹奏不会保存录音或者播放内置音乐。
3.6.音乐播放装置
本次设计很简陋,没有MP3那样优美的音乐,但此次设计分成“音调”和“节拍”两部分,听起来还是不错的。
音调:
表示一个音符唱多高的频率
节拍:
表示一个音符唱多长的时间。
音乐相关知识与频率的联系:
在音乐中常把中央C上方的A音定为标准音高,其频率f=440Hz。
当两个声音信号的频率相差一倍时,也即f2=2f1时,则称f2比f1高一个倍频程,在音乐中1(do)与
,2(来)与
……正好相差一个倍频程,在音乐学中称它相差一个八度音。
在一个八度音内,有12个半音。
以1—i八音区为例, 12个半音是:
1—#1、#1—2、2—#2、#2—3、3—4、4—#4,#4—5、5一#5、#5—6、6—#6、#6—7、7—i。
这12个音阶的分度基本上是以对数关系来划分的。
如果我们只要知道了这十二个音符的音高,也就是其基本音调的频率,我们就可根据倍频程的关系得到其他音符基本音调的频率。
知道了一个音符的频率后,若要产生音频脉冲,只要算出某一音频的周期(1/频率),再将此周期除以2,即为半周期的时间。
利用定时器计时半周期时间,每当计时终止后就将P3.7反相,然后重复计时再反相。
就可在P3.7引脚上得到此频率的脉冲。
为了让单片机发出不同频率的声音,我们只需将定时器预置不同的定时值就可实现。
利用AT89C51的内部定时器使其工作计数器模式(MODE1)下,改变计数值TH0及TL0以产生不同频率的方法产生不同音阶。
计数脉冲值与频率的关系式是:
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相关的计数值如表2所示。
表2音符频率表
音符
频率(HZ)
简谱码(T值)
音符
频率(HZ)
简谱码(T值)
休止
0
0
中4FA
698
64820
低1DO
262
63628
中5SO
784
64898
低2RE
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
高5
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 存储 播放 功能 简易 电子琴 设计
![提示](https://static.bdocx.com/images/bang_tan.gif)