基于单片机的电子琴的制作.docx

上传人:b****7 文档编号:8978841 上传时间:2023-02-02 格式:DOCX 页数:25 大小:450.13KB
下载 相关 举报
基于单片机的电子琴的制作.docx_第1页
第1页 / 共25页
基于单片机的电子琴的制作.docx_第2页
第2页 / 共25页
基于单片机的电子琴的制作.docx_第3页
第3页 / 共25页
基于单片机的电子琴的制作.docx_第4页
第4页 / 共25页
基于单片机的电子琴的制作.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

基于单片机的电子琴的制作.docx

《基于单片机的电子琴的制作.docx》由会员分享,可在线阅读,更多相关《基于单片机的电子琴的制作.docx(25页珍藏版)》请在冰豆网上搜索。

基于单片机的电子琴的制作.docx

基于单片机的电子琴的制作

1概述

1.1设计目的

通过对简易电子琴的课程设计,进一步加深对微机原理与单片机接口技术、模拟电子技术、数字电子技术等所学课程的了解和认识。

学习把理论知识运用于实践制作实物,锻炼自己独立动手能力,同时也要学会运用软件仿真,学习分析问题,解决问题的方法和途径。

了解电子琴发音原理,提升程序编写和运用的能力,充分利用自己专业知识,提高对本专业的学习兴趣。

1.2设计要求

结合单片机AT89C52和所提供元件,设计一个简易电子琴通过按键可以实现哆来咪发嗦啦嘻7种音阶高低音调的发音,音阶数字的显示,以及歌曲的自动播放功能。

1.3单片机发声原理

声音的产生是一种音频振动的效果,振动的频率高则为高音,频率低则为低音,音频的范围为20Hz~200kHz之间,人类耳朵比较容易辨别的声音大概是200Hz~20kHz。

一般的音响电路是以正弦波信号驱动扬声器,产生悦耳的音乐,在数字电路里,则是以脉冲信号驱动扬声器以产生声音,同样的频率,脉冲信号或正弦波信号产生的音效,单片机发声是使用定时器产生声音所需频率的方波(脉冲信号),经放大整形后送杨声器发出一个音,再按节拍送下一频率的声音,声音的节拍由延时程序给定,也就是说其发声的原理是:

音调由不同的频率产生,由延时程序产生节拍,由定时器定时产生方波频率,如1KHZ频率的声音,周期是1mS,正负半周各500μs,当用6MHZ晶体,定时方式1时,可计算定时器初值如下:

(216-X)*12/6=500μS,X=65535-250=65285=FF05H。

 

2系统总体方案及硬件设计

2.1总体方案

本设计是为了实现电子琴发声控制系统,结合单片机AT89C52,通过控制单片机定时器的定时时间可以产生不同的频率脉冲,再用按键通过高低电平来控制7个音阶的高低两种音调,并用软件延时程序的调用来控制发音时间的长短。

把音乐的音符和相应的节拍变换为定时常数和延时常数,分别来控制定时器产生的脉冲频率和发出该脉冲的持续时间,再运用三极管及电阻组成的放大电路来实现低音平功率的放大,利用蜂鸣器作为发声部件,数码管作为显示部件。

因此,可以先用单片机仿真软件Proteus连接设计好电路原理图,再从硬件与软件两部分进行分析与设计。

2.2单片机AT89S52介绍

 

AT89S52管脚

主要功能特性:

·兼容MCS51指令系统·8k可反复擦写(>1000次)FlashROM

·32个双向I/O口·256x8bit内部RAM

·3个16位可编程定时/计数器中断·时钟频率0-24MHz

·2个串行中断·可编程UART串行通道

·2个外部中断源·共6个中断源

·2个读写中断口线·3级加密位

·低功耗空闲和掉电模式·软件设置睡眠和唤醒功能

单片机AT89S52主要管脚的介绍:

VCC:

AT89S52电源正端输入,接+5V。

GND:

接地。

P0口:

P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。

当P1口的管脚第一次写1时,被定义为高阻输入。

P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。

在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时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编程和校验时接收高八位地址信号和控制信号。

在本设计中连接按键通过高低电平控制7个音阶。

P3口:

P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。

当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。

作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。

在本设计中连接控制按键。

控制高低两个音调以及自动播放乐曲。

RST:

复位输入。

当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。

XTAL1:

反向振荡放大器的输入及内部时钟工作电路的输入。

XTAL2:

来自反向振荡器的输出。

2.3硬件设计

 

 

电子琴实物图

单片机主程序对数码管编码是直接赋值的,而对声音信号则是通过中断程序进行控制的。

先读取键盘扫描程序信号,当系统扫描到键盘上有键被按下,通过数码管显示编码在数码管上显示音阶数字,此时高电平有效,单片机的定时器被启动,发出一定频率的脉冲,该频率的脉冲通过三极管放大电路输入到蜂鸣器后,就会发出相应的音阶声音。

如果在前一个按下的键发声的同时有另一个键被按下,则启用中断系统,前面键的发音停止,转到后按的键的发音程序,发出后按的键的音阶声音。

当键盘有键按下时,判断键值,启动计数器T0,产生一定频率的脉冲,驱动蜂鸣器,放出乐曲。

2.3.1按键接口电路

 

按键接口电路

按键接口电路采用独立式键盘,独立式键盘一般是指直接用I/O口线外接按钮构成,每个键单独占用一根I/O口线,I/O口线间的工作状态互不影响。

独立式键盘接口电路配置灵活,软件结构简单,但每个按键必须占用一更i/o口线,因此,在按键数较多时,I/O口浪费较大,故只有在按键数量不多时才采用这种键盘电路。

2.3.2显示电路

 

显示电路

LED显示器的显示方式采用了动态显示方式,它是把所有显示器的同名字段互相连接在一起,并把它们连到字形口上,为了防止各个显示器同时显示出相同的字符,每个显示器的公共端还要受另一组信号控制。

2.3.3发音电路

 

发音电路

发音电路是由蜂鸣器、三极管、上拉电阻构成,由于蜂鸣器工作电流一般比较大,以至于I/O口无法直接驱动,因此要用放大电路增强驱动电流来驱动蜂鸣器。

因为三极管为PNP型,所以当基极接入低电平时。

蜂鸣器发声。

2.4硬件调试

硬件调试主要是针对单片机部分进行的调试。

在上电之前,先确保电路中不存在断路或短路情况,这一工作是整个调试工作的第一步,也是非常重要的一个步骤。

在这部分调试中主要使用的工具是万用表,用来完成检测电路中是否存在断路或者短路情况的任务。

注意焊点之间,确保焊点没有短接在一起,同时注意焊点的美观,确保没有开路以及短路的现象出现。

在确保硬件电路正常且无异常情况(断路或短路)的情况下方可上电调试,上电调试的目的是检验电路是否接错,同时还要检验原理是否正确,在本次设计中,上电调试主要是检测单片机控制部分、数码管点亮部分、和音频转换电路硬件调试。

1、数码管LED电路调试:

接通电源,随机按下按钮可以看到数码管显示数字。

2、键盘单片机控制部分调试:

上电后,随机按动键盘可以发现各个按键对应的音正确。

3软件设计

3.1定时/计数器的计数初值计算

(1)要产生音频脉冲,只要算出某一音频的周期(1/音频),然后将此周期除以2,即为半周期的时间,利用定时器计时这个半周期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O口反相,就可在I/O脚上得到此频率的脉冲。

利用8051的内部定时器使其工作在计数器模式MODE1下,改变记数值TH0及TL0以产生不同频率的方法。

(2)计数初值T与频率的关系公式如下:

N=Fi/2/Fr

N:

记数初值

Fi:

Fi是机器频率(晶体振荡器为12MHz时,其频率为1MHz)

Fr;要产生的频率

计数初值T的求法如下:

T=65536-N=65536-Fi/2/Fr

例如:

设K=65536,F=1000000=Fi=1MHZ,求中音D0(523HZ),高音的D0(1046HZ)的记数值。

T=65536-N=65536-Fi/2/Fr=65536-500000/Fr

中音D0的T=65536-500000/523=64580

高音D0的T=65536-500000/1046=65059

单片机12MHZ晶振,高中低音符与计数T0相关的计数值如表所示:

音符

频率(HZ)

计数值(T值)

THTL

音符

频率(HZ)

计数值(T值)

THTL

低1DO

262

63777

F921

#4FA#

740

64913

FD91

#1DO#

277

63872

F980

中5SO

784

64948

FDB4

低2RE

294

63969

F9E1

#5SO#

831

64981

FDD5

#2RE#

311

64054

FA36

中6LA

880

65012

FDF4

低3MI

330

64140

FA8C

#6LA#

932

65042

FE12

低4FA

349

64216

FAD8

中7SI

968

65060

FE24

#4FA#

370

64291

FB23

低1DO

1046

65095

FE47

低SO

392

64360

FB68

#1DO#

1109

65120

FE60

#5SO#

415

64426

FBAA

高2RE

1175

65144

FE78

低6LA

440

64489

FBE9

#2RE#

1245

65166

FE8E

#6LA#

466

64547

FC23

高3MI

1318

65186

FEA2

低7SI

494

64603

FC5B

高4FA

1397

65206

FEB6

中1DO

523

64655

FC8F

#4FA#

1490

65227

FECB

#1DO#

554

64704

FCC0

高5SO

1568

65242

FFDA

中2RE

587

64751

FCEF

#5SO#

1661

65259

FEEB

#2RE#

622

64795

FD1B

高6LA

1760

65274

FEFA

中3MI

659

64837

FD45

#6LA#

1865

65289

FF09

中4FA

698

64876

FD6C

高7SI

1967

65302

FF16

音符频率表

3.2音符的节拍

在一张乐谱中,我们经常会看到这样的表达式,如1=C

、1=G

……等等,这里1=C,1=G表示乐谱的曲调,和我们前面所谈的音调有很大的关联,4/4、3/4就是用来表示节拍的。

以3/4为例加以说明,它表示乐谱中以四分音符为节拍,每一小结有三拍。

比如:

其中1、2为一拍,3、4、5为一拍,6为一拍共三拍。

1、2的时长为四分音符的一半,即为八分音符长,3、4的时长为八分音符的一半,即为十六分音符长,5的时长为四分音符的一半,即为八分音符长,6的时长为四分音符长。

那么一拍到底该唱多长呢?

一般说来,如果乐曲没有特殊说明,一拍的时长大约为400—500ms。

我们以一拍的时长为400ms为例,则当以四分音符为节拍时,四分音符的时长就为400ms,八分音符的时长就为200ms,十六分音符的时长就为100ms。

可见,在单片机上控制一个音符唱多长可采用循环延时的方法来实现。

首先,我们确定一个基本时长的延时程序,比如说以十六分音符的时长为基本延时时间,那么,对于一个音符,如果它为十六分音符,则只需调用一次延时程序,如果它为八分音符,则只需调用二次延时程序,如果它为四分音符,则只需调用四次延时程序,依次类推。

3.3软件设计

3.3.1判断音阶(高中低音)子程序

在软件设计中采用yinjie代表音阶,如下图所示

音阶

Yinjie值

2

1

0

 

初始化状态为中音(yinjie=1),电路中设计高、低两个音阶键。

上电后,若无按键按下,则为中音模式。

若音阶键被按下,则如下流程图所示,初始化后进行按键扫描,在高音键按下,若初始yinjie不为2,则另yinjie=2,进入高音工作模式,若初始yinjie为2,则对yinjie进行初始化,即另yinjie=1,重新进入进入中音工作模式,这样即实现了高音键切换高、中音方式的转换。

同理,用低音键实现中、低音的切换。

3.3.2播放子程序

本设计共两种播放模式,包括自动播放存储音乐和按键发音。

上电后,首先开中断并设定定时器0为工作方式1,当自动播放键按下时,进入中断,根据乐谱在定义的音频数组中查找相应音律,然后给定时器赋初值,即开始播放音乐。

当DO、RE、MI、FA、SO、LA、SI七种音符键按下时,根据音阶值(如上表中高中低对应)和音符值在定义的音频数组中查找相应音律,然后给定时器赋初值,即按键发音。

本次课程设计我们准备了三首歌曲。

结合DO、RE、MI三个音符键,通过键盘扫描确定BEEP键按下,此时再用if语句判断,当按下第一个键时,按照相应程序乐谱依次读入音节,开始播放第一首歌,此时再通过if语句判断若再按BEEP键则跳出播放音乐,扬声器停止播放。

第二、三首歌曲同理进行播放。

通过重复使用按键不仅节省了原材料,还使得电路结构简单明了。

 

3.3.3程序流程图

4Proteus软件仿真

4.1仿真软件

Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。

是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年又增加了Cortex和DSP系列处理器,并持续增加其他系列处理器模型。

在编译方面,它也支持IAR、Keil和MPLAB等多种编译器。

Proteus是单片机课堂教学的先进助手。

使用Proteus软件进行单片机仿真设计,是虚拟仿真技术和计算机多媒体技术相结合的综合运用,有利于培养学生的电路设计能力及仿真的操作能力。

Proteus不仅可将许多单片机实例功能形象化,也可将许多单片机实例运行过程形象化。

前者可在相当程度上得到实物演示实验的效果,后者则是实物演示实验难以达到的效果。

它的元器件、连接线路等却和传统的单片机实验硬件高度对应。

这在相当程度上替代了传统的单片机实验教学的功能,例:

元器件选择、电路连接、电路检测、电路修改、软件调试、运行结果等。

4.2软件调试

调试主要方法和技巧:

通常一个调试程序应该具备至少四种性能:

跟踪、断点、查看变量、更改数值。

整个程序是一个主程序调用各个子程序实现功能的过程,要使主程序和整个程序都能平稳运行,各个模块的子程序的正确与平稳运行必不可少,所以在软件调试的最初阶段就是把各个子程序模块进行分别调试。

4.3仿真结果

电路仿真图

4.4结果分析

根据仿真结果可知,本次课程设计能够准确并彻底的完成设计要求。

左侧数码管可以显示a、b、c三种结果,分别代表低音、中音和高音。

右侧数码管可以显示1、2、3、4、5、6、7七个数字,分别代表DO、RE、MI、FA、SO、LA、SI七种音符。

下面以4.3为例具体进行分析:

当系统上电后,若按下高音键,则选定工作方式为高音模式,图中c即代表高音。

P1口连接数码管段选端,左侧数码管显示音符对应的数字。

5课程设计体会

通过本次设计,我们懂得了如何解决课程设计中出现的问题,从而能够使自己更好的学习并掌握一些软件,例如Keil,Proteus。

在本次设计中,我们又相当于把以前学过的知识再复习一遍,对以前学过的知识又加以巩固,它不仅仅让我们把学过的东西用于实践,更是一种提高能力的最好方法。

首先,我们先要焊接电路,在焊接过程中,要设计排版怎样才更加合理工整,焊接时,要注意焊点和熔锡等等一些焊接技术,而且我们并没有一次性焊接成功,所以还要学会检测再修整。

其次,使用C语言来编译程序。

系统的学习函数使用和单片机的联系,有时还要对一些电子元件有进一步的了解,例如电阻、电容、二极管和三极管等元件,才好对一些模块的功能进行更具体的认识。

最难的就是将音乐同单片机衔接起来,单片机的发声原理,音乐的音阶与节拍的具体计算和使用,还有键盘,发音等一些模块的设计,刚开始很不了解,之后通过上网学习,问问同学,才有了初步的设计思想,这些都是以前从未学过的新知识,新内容,能够接触到这些,无疑又是一种提高。

然后,软件仿真。

学习Proteus软件,以前没有接触过这个软件,所以不会使用,通过课本学习,网上学习以及和同学交流,才初步掌握该软件的使用方法,尤其是查找元器件不太容易,最后才知道有个元器件对照表,才解决了这个问题。

所以只有通过一次又一次实践,才能更好地掌握新知识。

总之,每次课程设计都有不同的提高。

我们目前已经是大三,还有一年就要毕业,能够在此之前知道自己的不足之处并提高自己的各方面能力,这都是一种提高。

还有就是课程设计是分组合作,我们同学之间互相帮助,增强团队合作意识,也是以后适应社会的需要。

在本次设计中,我们感受到电子信息工程这个专业以后所要学习的知识还有很多很多,社会发展和科技创新发展很快,只有通过自己的不断学习和提高,才能立足社会之上。

因此,课程设计使我们在今后更加踏实学习,努力提高自己!

 

参考文献

[1]沈庆阳,郭庭吉编著,《8051单片机实践与应用》清华大学出版社,2001

[2]赵建领编著,《51系列单片机开发宝典》电子工业出版社,2007

[3]《微机原理与单片机接口技术》河南理工大学,2012

[4]胡汉才编著,《单片机原理及其接口技术》清华大学出版社,2004

[5]汪道辉编著,《单片机系统设计与实践》电子工业出版社2005

 

附1源程序代码

#include

#defineucharunsignedchar

#defineuintunsignedint

#definekP2//P2^0--P2^6用来存放1--7七个音节

sbitgao=P3^6;

sbitdi=P3^5;

sbitBEEP=P3^7;//P3^7端口连接按键用来控制扬声器工作与否

ucharn=0;//n是播放歌曲时用到

ucharhigh,low;//定时器预装值的高8位和低8位

uchartime,s1,L;

ucharyinjie=1;//yinjie=1,2,3表示低音,中音,高音

sbitspeak=P3^2;//P3^2端口接扬声器

codeucharTable[]={0x40,0x06,0x5b,0x4f,0x66,0x6d,0x7d,

0x07,0x7f,0x6f,0x77,0x7c,0x39,0x40};//数码管

codeucharfayin[][2]={

0xf9,0x21,

0xf9,0xe1,

0xfa,0x8c,

0xfa,0xd8,

0xfb,0x68,

0xfb,0xe9,

0xfc,0x5b,//低音:

高八低八

0xfc,0x8f,

0xfc,0xef,

0xfd,0x45,

0xfd,0x6c,

0xfd,0xb4,

0xfd,0xf4,

0xfe,0x24,//中音:

高八低八

0xfe,0x47,

0xfe,0x78,

0xfe,0xa2,

0xfe,0xb6,

0xfe,0xda,

0xfe,0xfa,

0xff,0x16//高音:

高八低八

};

ucharcodeMusic1[]={//粉刷匠144

5,2,1,3,2,1,5,2,1,3,2,1,5,2,1,3,2,1,1,2,2,

2,2,1,4,2,1,3,2,1,2,2,1,5,2,4,5,2,1,3,2,1,

5,2,1,3,2,1,5,2,1,3,2,1,1,2,2,2,2,1,4,2,1,

3,2,1,2,2,1,1,2,4,2,2,1,2,2,1,4,2,1,4,2,1,

3,2,1,1,2,1,5,2,2,2,2,1,4,2,1,3,2,1,2,2,1,

5,2,4,5,2,1,3,2,1,5,2,1,3,2,1,5,2,1,3,2,1,

1,2,2,2,2,1,4,2,1,3,2,1,2,2,1,1,2,4

};

ucharcodeMusic2[]={//小星星126

1,2,1,1,2,1,5,2,1,5,2,1,6,2,1,6,2,1,5,2,2,

4,2,1,4,2,1,3,2,1,3,2,1,2,2,1,2,2,1,1,2,2,

5,2,1,5,2,1,4,2,1,4,2,1,3,2,1,3,2,1,2,2,2,

5,2,1,5,2,1,4,2,1,4,2,1,3,2,1,3,2,1,2,2,2,

1,2,1,1,2,1,5,2,1,5,2,1,6,2,1,6,2,1,5,2,2,

4,2,1,4,2,1,3,2,1,3,2,1,2,2,1,2,2,1,1,2,2,

};

ucharcodeMusic3[]={//荷塘月色369

1,2,1,1,2,2,6,1,1,5,1,2,6,1,2,1,2,2,1,2,1,2,2,1,

3,2,4,2,2,1,2,2,2,1,2,1,2,2,2,2,2,1,5,2,1,5,2,1,

3,2,1,3,2,1,2,2,1,3,2,4,1,2,1,1,2,2,6,1,1,5,1,2,

5,2,2,3,2,1,2,2,1,3,2,1,2,2,1,1,2,4,2,2,1,2,2,2,

1,2,1,2,2,1,2,2,2,3,2,1,2,2,1,1,2,1,6,1,1,2,2,1,

1,2,4,1,2,1,1,2,2,6,1,1,5,1,2,6,1,2,1,2,1,1,2,2,

2,2,1,3,2,4,2,2,1,2,2,2,1,2,1,2,2,2,2,2,1,5,2,1,

5,2,1,3,2,1,3,2,1,2,2,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1