基于51单片机的电子琴设计-基于51单片机的简易电子琴设计Word格式文档下载.docx
《基于51单片机的电子琴设计-基于51单片机的简易电子琴设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《基于51单片机的电子琴设计-基于51单片机的简易电子琴设计Word格式文档下载.docx(23页珍藏版)》请在冰豆网上搜索。
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.1Proteus软件简介 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与扬声器之间连接
21
一个上拉电阻和三极管,驱动扬声器响应,以此来设计硬件电路。
总体框图如图
1-1所示。
数码管
键盘矩阵
扬声器
1-1总体框图
2硬件设计
2.1电路图
硬件电路图如图2-1所示。
图2-1电路图
2.2单片机AT89C51简介
AT89C51是51系列单片机的一个型号,它是STC公司生产的。
AT89C51是一
个低电压,高性能CMOS8位单片机,片内含8kbytes的可反复擦写的Flash只读程序存储器和256bytes的随机存取数据存储器(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的阳极连接到
VCC
共同接点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所示。
图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所示。
3
2
图2-6 单片机与数码管连接图
2.6声音电路
喇叭在数字电路中的应用,可以通过不断的给喇叭通断电,使其产生声音,且通电断电时间的间隔不同其声音的音色就不同,所以通过控制通断时间就可以控制不同的音阶产生。
这里我们选用单片机的P1.0口来控制喇叭的通断电。
一首音乐是由许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T1来产生这样方波频率信号,因此,我们只需将不同的音阶对应不同频率的中断即可。
单片机与喇叭接线图如图2-7所示。
图2-7单片机电子琴放音控制系统
3系统软件设计
一首乐曲是由多个音符构成的。
每一个音符都对应着一个确定的频率。
另外,每一个音符根据乐曲的要求和设定一个确定的节拍。
声音的产生就是是单片机产生一定的延时,所以延时不同,生成的音乐就不同。
我们利用定时器计数的方式产生延时的效果,就可以将歌曲中每一个音符所对应的音率换算成相应的计数初值。
然后,将这首乐曲所有音符的计数初值编成一个表,并把每一个音符的计数初值。
然后,将这首乐曲所有音符的计数初值编成一个表,并把每一个音符的计数初值与一个确定的数字码来联系。
这个数组码为简谱码。
这里我们选用播放的
歌曲为祝你平安和八月桂花遍地开。
软件设计流程图如图3-1所示。
开始
初始化
N
有键按下
Y
延时
再次重新扫描
确认有键按下