当前位置:文档之家› 基于51单片机的电子琴设计

基于51单片机的电子琴设计

随着社会的发展进步,音乐逐渐成为我们生活中很重要的一部分,有人曾说喜欢音乐的人不会向恶。

我们都会抽空欣赏世界名曲,作为对精神的洗礼。

本论文设计一个基于单片机的简易电子琴。

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

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

本文的主要内容是用AT89C51单片机为核心控制元件,设计一个电子琴。

以单片机作为主控核心,与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有8个按键和扬声器。

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

关键词:AT89C51单片机;数码管;电子琴1 系统方案设计 (1)1.1 设计指标 (1)1.2 系统方案综述 (1)1.3 系统设计思路 (1)2 硬件设计 (2)2.1 电路图 (2)2.2 单片机AT89C51简介 (2)2.3 单片机的工作过程 (4)2.4 键盘电路 (5)2.5 显示电路 (5)2.6 声音电路 (7)3 系统软件设计 (7)3.1延时程序设计 (9)3.2定时器初始化及其中断函数 (9)3.3示例音乐播放程序 (10)3.4单独按键中断处理函数 (10)4 实验结果与分析 (10)4.1 Proteus软件简介 (10)4.2仿真调试 (12)5 设计心得 (13)6 参考文献 (14)附录 (15)附录A 元件清单、器件识别与检测 (15)附录B 程序源代码 (16)1 系统方案设计1.1 设计指标①设计一个简易的八音符电子琴,它可通过按键输入来控制音响。

②演奏时可以选择是手动演奏(由键盘输入)还是自动演奏已存曲目,并且在演奏完已存曲目后可自动复位。

1.2系统方案综述从系统实现的功能上来看,电子琴的设计主要利用所给键盘的1,2,3,4,5,6,7,8八个键,能够发出八个不同的音调,并且要求按下按键发声,松开延时一段时间停止,中间再按别的键再发出另外一种音调的声音。

从系统硬件结构上来看,我们主要使用到AT89C51单片机,复位电路以及开关等。

将这些硬件电路有机的结合起来使之满足电子琴的实现硬件需要。

从音乐产生的原理方面来看,通过控制单片机的定时器的定时时间产生不同频率的音频脉冲,经放大驱动发出不同音乐的声音。

用软件延时来控制发音时间的长短。

把音乐的音符和相应的节拍变换为定时常数和延时常数,分别来控制定时器产生的脉冲频率和发出该音频脉冲持续时间。

因此,我们可以综合上述方案设计原理,从软件和硬件两部分进行有计划有步骤的分析和设计。

1.3 系统设计思路当系统扫描到键盘上有键被按下,则快速检测是哪一个键被按下,然后单片机的定时器被启动,发出一定频率的脉冲,该频率的脉冲输入到蜂鸣器后,就会发出相应的音调,如果在前一个按下的键发声的同时有另一个键被按下,则启动中断系统,前面键的发音停止,转到后按得键的发音程序,发出后按的键的音调。

这样,设计一个时钟方式的电路来产生11.0592MHZ的振荡频率产生时钟脉冲,一个按键电平复位电路对AT89C51单片机进行复位,8个开关分别从P2.0,P2.1,P2.2,P2.3,P2.4,P2.5,P2.6,P2.7输出,用于产生八个不同频率的音,一个扬声器电路,从P3.2连接一个开关播放已存曲目,从P3.3与扬声器之间连接一个上拉电阻和三极管,驱动扬声器响应,以此来设计硬件电路。

总体框图如图1-1所示。

数码管键盘矩阵扬声器1-1 总体框图2 硬件设计2.1 电路图硬件电路图如图2-1所示。

图2-1电路图2.2 单片机AT89C51简介AT89C51是51系列单片机的一个型号,它是STC公司生产的。

AT89C51是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash 只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用STC公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,功能强大的STC89C51单片机可提供许多较复杂系统控制应用场合。

AT89C51有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,STC89C51可以按照常规方法进行编程,但不可以在线编程(S系列的才支持在线编程)。

其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本AT89C51有PDIP、PQFP/TQFP及PLCC等三种封装形式,以适应不同产品的需求。

其封装及引脚图如图2-2。

图2-2单片机外封装及单片机引脚图AT89C51具体介绍如下:①主电源引脚(2根)VCC(Pin40):电源输入,接+5V电源GND(Pin20):接地线②外接晶振引脚(2根)XTAL1(Pin19):片内振荡电路的输入端XTAL2(Pin20):片内振荡电路的输出端③控制引脚(4根)RST/VPP(Pin9):复位引脚,引脚上出现2个机器周期的高电平将使单片机复位。

ALE/PROG(Pin30):地址锁存允许信号PSEN(Pin29):外部存储器读选通信号EA/VPP(Pin31):程序存储器的内外部选通,接低电平从外部程序存储器读指令,如果接高电平则从内部程序存储器读指令。

④可编程输入/输出引脚(32根)AT89C52单片机有4组8位的可编程I/O口,分别为P0、P1、P2、P3口,每个口有8位(8根引脚),共32根。

P0口(Pin39~Pin32):8位双向I/O口线,名称为P0.0~P0.7。

P1口(Pin1~Pin8):8位准双向I/O口线,名称为P1.0~P1.7。

P2口(Pin21~Pin28):8位准双向I/O口线,名称为P2.0~P2.7。

P3口(Pin10~Pin17):8位准双向I/O口线,名称为P3.0~P3.7。

2.3 单片机的工作过程单片机自动完成赋予它的任务的过程,也就是单片机执行程序的过程,即一条条执行的指令的过程,所谓指令就是把要求单片机执行的各种操作用的命令的形式写下来,这是在设计人员赋予它的指令系统所决定的,一条指令对应着一种基本操作;单片机所能执行的全部指令,就是该单片机的指令系统,不同种类的单片机,其指令系统亦不同。

为使单片机能自动完成某一特定任务,必须把要解决的问题编成一系列指令(这些指令必须是选定单片机能识别和执行的指令),这一系列指令的集合就成为程序,程序需要预先存放在具有存储功能的部件——存储器中。

存储器由许多存储单元(最小的存储单位)组成,就像大楼房有许多房间组成一样,指令就存放在这些单元里,单元里的指令取出并执行就像大楼房的每个房间的被分配到了唯一一个房间号一样,每一个存储单元也必须被分配到唯一的地址号,该地址号称为存储单元的地址,这样只要知道了存储单元的地址,就可以找到这个存储单元,其中存储的指令就可以被取出,然后再被执行。

程序通常是顺序执行的,所以程序中的指令也是一条条顺序存放的,单片机在执行程序时要能把这些指令一条条取出并加以执行,必须有一个部件能追踪指令所在的地址,这一部件就是程序计数器PC(包含在CPU中),在开始执行程序时,给PC 赋以程序中第一条指令所在的地址,然后取得每一条要执行的命令,PC在中的内容就会自动增加,增加量由本条指令长度决定,可能是1、2或3,以指向下一条指令的起始地址,保证指令顺序执行。

单片机最小应用系统如2-3所示。

图2-3 单片机最小应用系统2.4 键盘电路用AT89C51的并行口P1接键盘,在数码管上显示每个按键的对应的音符号。

如图2-4。

图2-4单片机与键盘的连线图本实验还用到单独的一个按键用于控制播放音乐。

该键与单片机的P3.2口连接可见主电路图单片机电子琴硬件连接图。

2.5 显示电路8段LED数码管是利用8个LED(发光二极管)外加一个小数点的LED组合而成的显示设备,可以显示0—9等10个数字和小数点,使用非常广泛。

这类数码管可以分为共阳极与共阴极两种,共阳极就是把所有LED的阳极连接到共同接点com,而每个LED的阴极分别为a、b、c、d、e、f、g及dp(小数点);共阴极则是把所有LED的阴极连接到共同接点com,而每个LED的阳极分别为a、b、c、d、e、f、g及dp(小数点),如下图所示。

图中的8个LED分别与上面那个图中的A—DP各段相对应,通过控制各个LED的亮灭来显示数字,如图2-5所示。

VCC图2-5 数码管共阳极与共阴极原理图选用单片机的P0口P0.0到P0.7分别接在LED端的a—dp上来控制LED各个段码灯的控制,来实现数字,例如要显示低音符3,只需将共阴极的数码管的a、b、e、f接高电平即可显示“c”共阳极的对应的接低电平。

这里我们选用共阳极的LED数码管,对于中音音符3,则需要将数码管的b、c、d、e、g置于低电平。

数码管就会显示“3”。

具体可参考数码管相关的书籍。

LED数码管与单片机连接图如图2-6所示。

23图2-6 单片机与数码管连接图2.6 声音电路喇叭在数字电路中的应用,可以通过不断的给喇叭通断电,使其产生声音,且通电断电时间的间隔不同其声音的音色就不同,所以通过控制通断时间就可以控制不同的音阶产生。

这里我们选用单片机的P1.0口来控制喇叭的通断电。

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

单片机与喇叭接线图如图2-7所示。

图2-7 单片机电子琴放音控制系统3 系统软件设计一首乐曲是由多个音符构成的。

每一个音符都对应着一个确定的频率。

另外,每一个音符根据乐曲的要求和设定一个确定的节拍。

声音的产生就是是单片机产生一定的延时,所以延时不同,生成的音乐就不同。

我们利用定时器计数的方式产生延时的效果,就可以将歌曲中每一个音符所对应的音率换算成相应的计数初值。

然后,将这首乐曲所有音符的计数初值编成一个表,并把每一个音符的计数初值。

然后,将这首乐曲所有音符的计数初值编成一个表,并把每一个音符的计数初值与一个确定的数字码来联系。

这个数组码为简谱码。

这里我们选用播放的歌曲为祝你平安和八月桂花遍地开。

软件设计流程图如图3-1所示。

图3-1 软件设计流程图3.1延时程序设计因程序设计中很多都要用到延时程序所以延时程序用delay()函数来实现,其程序如下:void Delay_xMs(unsigned int x){unsigned int i,j;for(i=0;i<x;i++) //1ms延时{for(j=0;j<3;j++);}}3.2定时器初始化及其中断函数//定时器1的初始化void Time1_Init(){TMOD=TMOD|0x10; //定时器1,方式1 EA=1;ET1=1;TH1=0xD8;TL1=0xEF;}//定时器中断函数void Time1_Int() interrupt 3 //外部中断1{TH1=0xD8;TL1=0xEF;Count++;}3.3示例音乐播放程序while(!eg_music){P0=0xc6; //C表示播放示例音乐Time1_Init();Play_Song(0); // 调用示例音乐函数TR0=0;}3.4单独按键中断处理函数void init_interrupt(void ) interrupt 1{TR0=0;TH0=table[key]/256;TL0=table[key]%256;speak=~speak;TR0=1; }4 实验结果与分析4.1 Proteus软件简介Proteus ISIS是英国Labcenter公司开发的电路分析与实物仿真软件。

相关主题