基于51单片机的简易电子琴设计说明书

您所在的位置:网站首页 gopro7silver电子说明书 基于51单片机的简易电子琴设计说明书

基于51单片机的简易电子琴设计说明书

2024-07-13 22:08| 来源: 网络整理| 查看: 265

设计了一个以AT89S52为主控核心的电子琴系统,系统由单片机AT89S52、独立按键模块、功率放大模块、扬声器、数码管组成,用C语言编写了51程序,该系统可以实现按键弹奏音乐和存储播放功能。该系统可以主要优点有硬件电路结构简单易实现,电子琴所需功能基本具备,系统稳定可靠。缺点是音量调节大小不明显,可加入多首音乐或者按键选择音乐的功能。 目    录 1. 设计背景 1.1单片机背景 1.2单片机电子琴应用 2.设计方案 3. 方案实施 3.1硬件设计 3.1.1总体电路设计 3.1.2单片机简介 3.1.3按键设计 3.1.4LED数码管 3.1.5扬声器 3.1.6电源电路 3.1.7时钟电路 3.2软件设计 3.3仿真与调试 3.3.1仿真软件介绍 3.3.2仿真结果 4. 结果与结论 4.1实现的功能 4.2设计结论 5. 收获与致谢 6. 参考文献 7. 附件 1. 设计背景1.1单片机背景

单片机是经典的嵌入式微控制器(Microcontroller Unit),缩写为MCU,最早是被利用于工业控制领域。因为在工业控制领域单片机有着广泛的应用,所以诞生了单片机开发板这样的系统使更多的产品开发人员、业内人士、学生来学习单片机这门技术,其中比较出名的单片机开发板有电子人DZR-01A。单片机是从芯片内部仅有的特殊处理器发展起来的,它最开始的设计思路是将CPU与大量的外围设备通过一个微处理器集成在一起,从而使得计算机系统变得更迷你,组装到繁杂的且对体积要求比较小的控制装备之中更简单。Zilog公司的Z80便是最早使用这种设计思想做出来的的cpu,自此以后,单片机和计算机CPU的发展便成为了两个不同的方向。

单片机相当于把一个复杂的计算机系统浓缩到一个微小的芯片上,它计算机相比只缺少了输入/输出设备,所以可以把它看作一个微型的计算机。可以概况的讲成:一块相当于一台计算机的芯片。它的质量轻、体积小、价格便宜、为开发、应用和学习提供了便利条件。所以,如果你想要了解计算机原理与结构,那么学习使用单片机是最简单的选择。

1.2单片机电子琴应用

电子琴是大规模集成电路和音乐结合的产物,它因为能模拟各种乐器的音色而受到群众们喜爱。本设计制作了一种除了有普通电子琴弹奏功能外,还拥有一种存储播放乐曲功能。本设计是以AT89S52单片机作为一个简单电子琴系统设计的核心部件,其原理是因为每个表有固定的振动频率,所以可以利用89S52单片机内部的定时/计数器改变计数值来产生各个音调对应的方波频率来驱动扬声器播放出不同音调。这仅仅只是单片机应用的一个点,希望能由点到面,更好的了解和应用单片机技术。

2.设计方案2.1方案一:采用CPLD外接扬声器、键盘、数码管等。

8个译码输出显示的数码管,以显示目标芯片的32 位输出信号,且8个发光管也能显示目标器件的8位输出信号。时钟为50MHz ,输出接扬声器。

具体过程:主系统可由两个模块组成:当系统检测到有按键按下时,对应音符的频率由模块1获得,这是一个数控分频器。由其clk端输入一具有较高频率的信号,分频后输出。

音符的持续时间须根据乐曲的速度及每个音符的节拍数决定,模块2的功能是为模块1提供决定所发音的分频预置值,而此数在模块1输入口停留的时间即为此音符的节拍值。

2.2方案二:采用单片机外接扬声器、键盘、数码管等。

采用AT89S52单片机的两个定时器(如T0,T1)控制频率,在P1.0引脚上输出方波周期信号,产生声音,按下不同的模拟按键就会产生不同的音符,所以使用者可以通过本电子琴系统畅所欲为的弹奏自己想要弹的乐曲。

具体过程:当系统扫描到键盘上有键子被按下,则快速检测出是那一个键子,然后单片机的定时器被启动,发出一定频率的脉冲,该频率的脉冲经喇叭驱动电路放大滤波后,就会发出相应的音调。。如果在前一个按下的键发声的同时有另一个键被按下,则启用中断系统,前面键的发音停止,转到后按的键的发音程序,发出后按键的音。

2.3方案对比

对比两套方案各有优缺点,方案一采用CPLD,工作速度快,系统稳定,效果好,但是其价格昂贵;而方案二在设计这样小型电子方面,无论是效果还是工作速度与方案一相差不大,而且价格较为便宜。因此,选择方案二即单片机加外设的方式设计该系统比较好。

3. 方案实施3.1硬件设计3.1.1总体电路设计

由AT89S52单片机、独立键盘、音频功率放大模块、扬声器、数码管、存储播放模块所组成。

图1 系统结构框架

3.1.2单片机简介

AT89S52 是一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash存储器。使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8 位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。 AT89S52具有以下标准功能: 8k字节Flash,256字节RAM, 32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位 定时器/计数器,一个6向量2级中断结构,全双工串行口。另外,AT89S52 可降至0Hz 静态逻 辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工 作。掉电保护方式下,RAM内容被保存,振荡器被结,单片机一切工作停止,直到下一个中断或硬件复位为止。

图2 AT89S52

3.1.3按键设计

本设计共含有10个按键,其中8个按键分别接着P2.0~P2.7引脚,代表着8个音符。当按下这八个按键其中一个按键时,数码管也会显示一个与音调对应的数字来指示用户所按下的按键。而另外两个按键为功能按键,按下可播放已存储的歌曲,另一个按下可中断播放音乐。这两个功能按键连接着的引脚分别是P3.2、P3.3。如图3所示。

图3按键图

3.1.4LED数码管

由于本次设计需要的单片机I/O端口不多,所以数码管显示方式采用了静态显示驱动,数码管将直接由单片机I/O端口驱动, 又因为LED数码管是电流控制元件,所以使用时要上一个加限流电阻。数码管显示是通过单片机查表得出编码,然后单片机再驱动端口决定数码管显示的数字,按键与数码管显示程序的一致性就是这么实现的。连接在P0.1-P0.3,4个引脚上,并加一个排阻。如图4所示。

图4数码管与单片机的连接图

3.1.5扬声器

扬声器采用两个三极管来放大音频,串连着一个可调节电阻,用来调节声音大小,整个模块由单片机P1.0引脚控制。如图5所示。

图5扬声器的连接图

3.1.6电源电路

经由电解电容和非极性电容构成的滤波网络和三端稳压器LM7805的稳压作用后,输出+5V的直流电压。

图6电源电路图

3.1.7时钟电路

时钟频率直接影响单片机的速度,时钟电路的质量也直接影响单片机系统的稳定性。常用的时钟电路有两种方式,一种是内部时钟方式,另一种是外部时钟方式。

AT89C51内部有一个用于构成振荡器的高增益反相放大器,输入端为芯片引脚XTAL1,输出端为引脚XTAL2。这两个引脚跨接石英晶体振荡器和微调电容,构成一个稳定的自激振荡器,图9是AT89S51内部时钟方式的电路,C1和C2的典型值通常选择为30pF,石英晶体常选6MHz或12MHz的。本设计采用内部时钟方式做时钟电路

图7时钟电路图

3.2软件设计

本设计的基本流程是对初始化的单片机进行键盘扫描,判断其有无按键按下,若有则需要继续判断按键的类别,判断它是功能选择键还是独立键盘上的音调键,若是独立键盘,则通过P1.0发生频率播放音调,通过P0显示数码管数字。若是功能选择键,则播放程序储存好的音乐歌曲,然后检测是否按下中断键,若是则停止播放,不是则一直播放到结束。此设计使用的语言选择中,汇编语言是面向特定机型的需要,在不同的计算机指令系统上和不同的微控制器上,指令结构有着云泥之别,就算指令大同小异,它也不能够移植。C语言是一种高级语言,可以结构化编程,还可以 移植。使用标准C语言的程序编程,完全可以不作任何修改就能够移植到不同的系统平台上。基于以上对比,本设计系统更适合C语言来进行编程。            

3.3仿真与调试3.3.1仿真软件介绍

Proteus是英国著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台。

3.3.2仿真结果

利用Proteus仿真软件将Keil软件中的C语言程序导入仿真电路中,灯泡D1亮,按下播放键,单片机存储的音乐可自动播放,按下停止键,音乐播放停止。复位键按下后,系统复位,八个按键可随按键者随意按下弹奏音乐,同时数码管显示相对应的节奏。

图6仿真结果图4. 结果与结论4.1实现的功能

     根据功能需求与电路结构得知,当开关按下时,将可有其连接的输入口读取到低电平,再次制作的一个八键的电子琴,若按下S1,则发出中音DO,如按下S2,则发中Re,以此类推,按下的同时数码管显示相对应的数字。此外,该电子琴不仅可以自己弹奏也可自动播放所存储的音乐,数码管显示相对应的音符。

4.2设计结论

本设计利用AT89S52单片机设计一个简易电子琴,具备电子琴的基本功能,分析了利用单片机简易电子琴设计的基本原理,并介绍了AT89S52单片机设计的电子琴统硬件系统。改变AT89S52的定时器里面的特殊功能寄存器TH0及TL0在模式1下的计数值,便会产生不同方波频率,然后通过扬声器产生对应的音调。最终将编写的源程序转换为机器码导入单片机芯片,仿真调试运行后,就可以实现利用按键弹奏想要的歌曲。与此同时仿真调试软件用的是protues,源程序编译软件用的是keil,所以对这两款软件的掌握熟练度也增加了许多。

5. 收获与致谢

     课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程,随着科学技术发展的日新月异,大规模芯片已经成为当今计算机运用中空前活跃的领域,在生活中可以说是无处不在。以此作为二十一世纪的大学生来说掌握开发技术是十分重要的。

     通过本次实验,我不仅可以巩固以前学过的知识,如数电知识,系统设计和C语言,而且学到了很多在书本上所没有学到的知识,如实践经验和操作技巧。我懂得了理论与实践相结合是很重要的,只有理论知识是远远不够的,光看书部进行相关的联系是行不通的,只有把所学的理论知识与实践结合起来,从而提高自己的实际动手能力和独立思考能力。在此次电子琴设计中也让我学会了Proteus和Keil这两个软件的基本应用,多掌握了两门技术,对自己以后要做此方面的设计打下了基础。于此同时也让我知道了,做任何事情都要学会团队合作要多学多问,知道请教,不能自己一味闷头去做,应该多请教老师和同伴的意见和建议。在设计过程难免会遇到各种各样的问题,同时在设计的的过程中发现了自己的不足之处,对以前学过的知识理解的不够深刻,掌握的不够牢固,通过这次课程设计之后,把以前学过的知识重新温故,全部整合,进一步深刻理解。我们要学会学习的能力,能够举一反三,触类旁通,这样对自己以后的发展有很大的帮助,因此我们需要在学习中学习,在实践中找出答案!

7. 附件

仿真图如下:

电路图如下:

PCB图如下:

实物图如下:

代码如下:

#include "reg51.h" #define shumaguan P0                           //定义数码管段码输出 sbit LED =P1^1 ; sbit SPK =P1^0  ; sbit K1= P3^2;      sbit K2= P3^3;                                  //定义方波输出口 unsigned int tone1,tone2; /*****标准音符表*****/ //用于使定时器初值变化以产生相应频率的定时 unsigned char code yinfu[]={0xfb,0xe9,      //Do                               0xfc,0x5c,      //Re                               0xfc,0xc1,      //Mi                               0xfc,0xef,      //Fa                               0xfd,0x45,      //So                               0xfd,0x92,      //La                               0xfd,0xd0,      //Si                               0xfd,0xee,      //Do#                               0x00,0x00     //音符之间的间隔,只要间隔时间小于65ms时,                                                         //喇叭不会发出声音,用作拍子之间的短暂停顿    }; /*****生日快乐歌音调表*****/ unsigned char code shengri_tone[]={   1,0,1,2,1,4,3,0,                                    1,0,1,2,1,5,4,0,                                                1,0,1,8,6,4,3,2,0,                                                7,0,7,6,4,5,4,0       //0代表不发声,即停顿;数字即为音调 }; /*****生日快乐歌节拍表*****/ unsigned char code shengri_beat[]={   24,1,24,48,48,48,72,5,                                    24,1,24,48,48,48,72,5,                                      24,1,24,48,48,48,48,72,5,                                       24,1,24,48,48,48,72,5    //节拍,即tone表各音调的延时 }; /*****15ms延时子程序,用于节拍*****/ void delay(void) {        unsigned char n=15;        while(n--)        {               unsigned char i;               for(i=0;i=33) return;      //数值是shengri相关表中的元素数量        }                    } /*****按键检测*****/ void check_key(void) {        P2=0xff;                                           P3=0xff;                      //设置为输入状态        switch(P2)                          //检测按键,输出数码管、载入定时器初值、允许中断        { case 0xfe:shumaguan=0xf9;tone1=0xfb;tone2=0xe9;EA=1;break;     case 0xfd:shumaguan=0xa4;tone1=0xfc;tone2=0x5c;EA=1;break;     case 0xfb:shumaguan=0xb0;tone1=0xfc;tone2=0xc1;EA=1;break; case 0xf7:shumaguan=0x99;tone1=0xfc;tone2=0xef;EA=1;break; case 0xef:shumaguan=0x92;tone1=0xfd;tone2=0x45;EA=1;break; case 0xdf:shumaguan=0x82;tone1=0xfd;tone2=0x92;EA=1;break; case 0xbf:shumaguan=0xf8;tone1=0xfd;tone2=0xd0;EA=1;break; case 0x7f:shumaguan=0x80;tone1=0xfd;tone2=0xee;EA=1;break; default: EA=0;SPK=0;shumaguan=0xff;//没有键按下则关闭中断和数码管              //                              改过已        }        switch(P3)        {               case 0xfb:play1();break;        } } /*****主程序*****/ void main(void) {        initTimer();        shumaguan=0xff;        TR0=1;        ET0=1;        SPK=0;        while(1)        {               check_key();        } } 复制代码

完整的Word格式文档51黑下载地址:

基于51单片机的简易电子琴设计.doc (5.11 MB, 下载次数: 71) 2019-1-26 19:02 上传 点击文件名下载附件 基于51单片机的简易电子琴设计下载积分: 黑币 -5



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3