基于单片机的电子琴设计报告.docx
《基于单片机的电子琴设计报告.docx》由会员分享,可在线阅读,更多相关《基于单片机的电子琴设计报告.docx(28页珍藏版)》请在冰豆网上搜索。
基于单片机的电子琴设计报告
基于单片机的电子琴设计与制作
摘要:
电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。
它在现代音乐扮演着重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经成为现代人们的生活中不可替代的一部分。
微型电子琴的设计以STC89C52单片机作为系统的核心控制部分,通过制作硬件电路和软件的设计编写,然后进行软硬件的调试运行,最终达到设计电路的乐器演奏、点歌及显示功能。
设计中应用中断系统和定时/计数原理控制扬声器发声,对音乐发生所必须确定的音符和节拍分别用程序语言实现,可以用它来弹奏和播放乐曲。
本系统运行稳定,其优点是硬件电路简单,软件功能完善,控制系统可靠,性价比较高等,具有一定的实用和参考价值。
关键词:
单片机、电子琴、显示、演奏、播放
Abstract:
Electronicorganisamodernelectronicmusictechnologyandtheproductisanewtypeofkeyboardinstruments.Itmodernmusicplayedanimportantroleinsinglechipisapowerfulcontrolfunctionsandflexibleprogrammingcharacteristics,Ithasconvergedwithmodernpeople'slives,becomeanirreplaceablepart.ThedesigntakesSTC89C52asthecoreofsystem'scontrolsection.Inordertoachievetheeffectofthecircuitthatplaythemusicalinstrument,requestingasonganddemonstration,wecancarryonsoftwareandhardware'sdebuggingthroughmanufacturinghardwarecircuitandcompilingthesoftware'sdesign.Thedesignappliestheprincipleoftheinterruptionsystemandfixedtimeandthecountingtoperformancesoundproductionandaccordingtotheprogramlanguagetorealizetheseparationofthenoteandtimeatthesametime.Wecanuseittoplaywiththebroadcastmusic.
Keywords:
singlechip,electronicorgan,display,play
1前言
1.1系统开发背景及意义
单片微型计算机是大规模集成电路技术发展的产物,它具有高性能、高速度、体积小、价格低廉、稳定可靠、应用广泛的特点。
它的应用必定导致传统的控制技术从根本上发生变革。
因此,单片机的开发应用已成为高科技和工程领域的一项重大课题。
基于当前市场上的玩具市场需求量大,其中电子琴就是一个很好的应用方面。
单片机技术使我们可以利用软硬件实现电子琴的功能,从而实现电子琴的微型化,可以用作玩具琴、音乐转盘以及音乐童车等等,并且可以进行一定的功能扩展。
一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了。
利用单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器来产生这样方波频率信号,因此,我们只要把音阶与频率的对应关系设置好即可[1]。
本文主要对使用单片机设计简易电子琴进行了分析,并介绍了基于单片机电子琴统硬件组成。
利用单片机产生不同频率来获得我们要求的音阶,最终可随意弹奏想要表达的音乐。
并且本文分别从原理图,主要芯片,各模块原理及各模块的程序的调试来详细阐述。
该设计具有以下优点:
(1)可以随意弹奏想要表达的音乐;
(2)制作简单,成本低;
(3)比传统电子琴功能更完善。
1.2设计目标
本设计作品拟实现功能如下:
1.将8个按键设计成8个音对应音乐音符。
每按一个键,单片机检测按下的那个键并查表查找相应的音符,输出到音频处理模块驱动喇叭发出音符。
2.设计一个数码管用来显示音符,每按下一个按键,数码管则显示对应音符的数字。
3.设置两个按键,按下一个按键,按顺序自动播放各音符。
设计一首歌曲,内置于单片机,按下另一个按键,自动播放所存歌曲。
4.设计一个液晶显示屏幕,显示一定内容,内容随音乐播放节奏移动。
由于本设计主要用于人们娱乐方面,因此在设计上尽量使其安全以及简单易操作。
其次,在这次设计可行性上进行分析如下:
1、经济可行性:
所谓经济可行性,即在这次设计上需要投入资金的多少,由于毕业设计是没有项目资金,没有开发经费,因此在经济上必须能够承受,比较理想化的项目对于我们毕业设计来说是不可行的。
通过分析后,无论是在器件价格或是常见度上均是可行的。
2、技术可行性:
技术可行性主要是分析技术条件上是否能够顺利开展并完成开发工作,硬件、软件能否满足设计者的需要等。
通过分析各种软件环境,硬件仿真环境等均已经具备。
综上所述,本系统设计目标已经明确,在经济与技术上均可行,因此本系统的开发是完全可行的。
2系统硬件设计及说明
2.1系统组成及总体框图
硬件设计的任务是根据总体设计要求,在选择的芯片的基础上,具体确定系统中所要使用的元器件,设计出系统的原理框图、电路原理图。
该设计要实现一种由单片机控制的电子琴,单片机工作于12MHZ时钟频率,使用其定时/计数器T0,工作模式为1,改变计数值TH0和TL0可以产生不同频率的脉冲信号。
该设计具有8个音节的键盘,用户可以根据乐谱在键盘上进行演奏,音乐发生器会根据用户的弹奏,通过扬声器将音乐播放出来,并且利用数码管显示对应音符的数值。
另外设置两个按键,实现音乐自动播放功能。
由于本设计实现的音乐发生器是由用户通过键盘输入弹奏乐曲的,所以节拍由用户掌握,只有内置音乐才由程序控制。
用单片机产生的音频脉冲直接驱动扬声器并不能产生所要实现的音乐,因为它没有足够的驱动能力,这就需要设计放大电路。
图2-1系统结构图
2.2主要元器件简介
(1)控制芯片STC89C52
功能特性:
STC89C52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。
STC89C52使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
STC89C52具有以下标准功能:
具有以下标准功能:
8k字节Flash,512字节RAM,32位I/O口线,看门狗定时器,内置4KBEEPROM,MAX810复位电路,3个16位定时器/计数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级中断结构),全双工串行口。
另外STC89C52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。
空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
最高运作频率35MHz,6T/12T可选。
主要性能:
与MCS-51单片机产品兼容、8K字节在系统可编程Flash存储器、1000次擦写周期、全静态操作:
0Hz~33Hz 、三级加密程序存储器 、32个可编程I/O口线 、三个16位定时器/计数器八个中断源、全双工UART串行通道、低功耗空闲和掉电模式、掉电后中断可唤醒、看门狗定时器、双数据指针、掉电标识符[2]。
(2)LED数码管
本次设计的显示电路采用LED数码管显示,LED是一种外加电压从而流过电流并发出可见光的器件。
LED是属于电流控制器件,使用时必须加限流电阻。
通过单片机查表得出数码管显示编码,传送给数码管显示,以此来实现按键与显示程序的一致性。
常用的七段显示器的结构如图下图所示。
发光二极管的阳极连在一起的称为共阳极显示器(如图b所示),阴极连在一起的称为共阴极显示器(如图c所示)。
1位显示器由八个发光二极管组成,其中七个发光二极管a~g控制七个段的亮或暗,另一个控制一个小数点,这种笔画式的七段显示器能显示的字符较少,字符的开头有些失真,但控制简单,使用方便。
(a)外形(b)共阳极(C)共阴极
图3-6数码管引脚
(3)LCD1602液晶显示屏
1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。
如图所示其显示的内容为16X2,即可以显示两行,每行16个字符液晶模块。
它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用[3]。
图LCD1602
2.3各功能模块原理图
(1)STC89C52最小系统搭建
主控芯片为STC89C52型号单片机,电路设置的晶振为12MHz,晶振电路由两个30pF的电容和一个12M的晶振构成。
单片机复位电路由复位按键、10uF电容、10kΩ的电阻构成。
另外对P0口和P1口接上10kΩ的上拉电阻[4]。
单片机主程序模块通过对键盘扫描程序信号的读取,在通过对应的表,取出数码管显示编码和定时器初始值以产生不同的声音信号。
在这一过程中,对数码管和液晶屏编码是直接赋值,对声音信号则是通过中断程序进行控制。
系统功能的I/O口分配如下:
P1口分配给8个音符按键,P0口分配给液晶显示屏的8个数据口,P2口分配给数码管,P3.0和P3.1用来检测两个音乐播放按键,P3.2~P3.4分配给液晶屏的三个驱动引脚,P3.5口输出音频信号。
P30
图3-7STC89C52模块电路原理图
(2)键盘扫描模块电路原理图
8个音符按键直连到单片机的P1口,另一端直接接地。
每当按键按下,对应I/O口则会被置0。
通过检测P1口的数值就可以判断所按下的按键,单片机则对按键对应的功能进行处理。
图3-8键盘扫描模块电路原理图
(3)数码管显示模块电路原理图
数码管显示模块核心是共阴级数码管,通过来自单片机I/O口的电平高低来点亮和熄灭数码管上的发光二极管,通过单片机送来的数码管显示编码可以在数码管上显示数字和字符,使应用人员可以很容易的理解按键按下所对应的音符。
图3-9数码管显示模块电路原理图
(4)音频处理模块电路原理图
由于单片机驱动能力不够,在处理音符信号时,需进行信号放大,因A966型三极管具有低功耗、高增益的特点,这合适单片机低功耗输出,所以加装A966型三极管对信号进行放大。
图3-10音频输出模块电路原理图
(5)电源模块电路原理图
由于本次设计的芯片的工作电压都为5V,因为USB输出端口的电压为5V左右,且最大输出电流为0.5A,完全能够驱动本文所设计的电路。
本文加了一个电源指示灯和一个电源开关,电路图如图所示:
图3-11电源模块电路原理图
(6)液晶显示模块电路原理图
液晶屏的数据口D0~D7都接上330Ω的限流电阻,然后直接连接单片机的P0口。
液晶屏的三个驱动引脚4~6直接连接单片机的P3.4~P3.6口,VEE口接一个电位器,调节液晶屏显示清晰度。
图液晶显示模块电路原理图
3系统软件设计
本软件设计关键是要实现一种由单片机控制的简单音乐发生器,它由16个音节组成的的键盘,用户可以根据乐谱在键盘上进行演奏,音乐发生器会根据用户的弹奏,通过扬声器将音乐播放出来。
3.1音乐相关知识
乐音听起来有的高,有的低,这就叫音高,音高是由发音物体振动频率的高低决定的,频率高,声音就高,频率低,声音就低,不同音调的乐音是用1~7表示的,这7个数字就是乐音的音名,它们一般依次唱成DO、RE、MI、FA、SO、LA、SI,这是唱曲时乐音的发音,所以叫唱名。
音持续时间的长短即时值,一般用拍数表示,休止符表示暂停发音。
一首音乐是由许多不同的音符组成的,而每个音符对应着不同的频率,这样就可以利用不同频率的组合,加以与拍数对应的延时,构成音乐。
3.2如何用单片机实现音乐的节拍
除了音符以外,节拍也是音乐的关键组成部分。
节拍实际上就是音持续时间的长短,在单片机系统中可以用延时来实现,如果1/4拍的延时是0.4秒,则1拍的延时是1.6秒,只要知道1/4拍的延时时间,其余的节拍延时时间就是它的倍数。
如果单片机要自己播放音乐,那么必须在程序设计中考虑到节拍的设置,所以在设计实现的音乐发生器中是由一个延时函数控制每个音符的发音的时间长短,达到实现节拍的目的[5]。
音乐的音拍,一个节拍为单位(C调)具体如下表:
表4-1音乐节拍表
曲调值
1/4拍延时
曲调值
1/8拍延时
调4/4
125ms
调4/4
62ms
调3/4
187ms
调3/4
94ms
调2/4
250ms
调2/4
125ms
3.3如何用单片机产生音频脉冲
了解音乐的一些基本知识后可知,产生不同频率的音频脉冲即能产生音乐,对于单片机而言,产生不同频率有脉冲非常方便,可以利用它的定时/计数器来产生这样的方波频率信号,因此,需要弄清楚音乐中的音符和对应的频率,以及单片机定时计数的关系[6]。
在本实验中,单片机工作于12MHZ时钟频率,使用其定时/计数器T0,工作模式为1,改变计数值TH0和TL0可以产生不同频率的脉冲信号,在此情况下,C调的各音符频率与计数值T的对照如下表:
表4-2音符频率与计数值T的对照表
音符
频率(HZ)
计数值
音符
频率(HZ)
计数值
低1DO
262
63628
#4FA#
740
64860
#1DO#
277
63737
中5SO
784
64898
低2RE
294
63835
#5SO#
831
94934
#2RE#
311
63928
中6LA
880
64968
低3MI
330
64021
#6LA#
932
64994
低4FA
349
64103
中7SI
968
65030
#4FA#
370
64185
低1DO
1046
65058
低SO
392
64260
#1DO#
1109
65085
#5SO#
415
64331
高2RE
1175
65110
低6LA
440
64400
#2RE#
1245
65134
#6LA#
466
64463
高3MI
1318
65157
低7SI
494
64524
高4FA
1397
65178
中1DO
523
64580
#4FA#
1490
65198
#1DO#
554
64633
高5SO
1568
65217
中2RE
587
64633
#5SO#
1661
65235
#2RE#
622
64884
高6LA
1760
65252
中3MI
659
64732
#6LA#
1865
65268
中4FA
698
64820
高7SI
1967
65283
T的值决定了TH0和TL0的值,其关系为:
TH0=T/256,TL0=T%256
3.4系统总体功能流程图
图4-1主程序框图
4电路仿真
4.1Protuse软件介绍
Proteus是英国Labcenter公司开发的电路分析与实物仿真软件。
它运行于Windows操作系统上,可以仿真、分析各种模拟器件和集成电路。
该软件的特点是:
(1)实现了单片机仿真和SPICE电路仿真相结合。
具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。
(2)支持主流单片机系统的仿真。
目前支持的单片机类型有:
68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各种外围芯片。
(3)提供软件调试功能。
在硬件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态,因此在该软件仿真系统中,也必须具有这些功能;同时支持第三方的软件编译和调试环境,如KeilC51uVision2等软件。
(4)具有强大的原理图绘制功能。
总之,该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大。
本章介绍ProteusISIS软件的工作环境和一些基本操作。
由于Protuse软件中没有STC89C52芯片,所以用AT89C51芯片进行代替,由于AT89C51芯片ROM较小,本设计的程序代码较大,所以不能下载。
为了进行正常仿真,只能将LCD1602显示的程序去掉,对其他模块进行仿真[7]。
4.2仿真图介绍
单片机:
P2口对应数码管编码输出端;
P1口做键盘扫描部分输入输出端。
P0口做LCD1602液晶显示的数据口
P3.3口做音乐信号输出端;
P3.5~P3.7做LCD1602液晶的驱动口
P3.0和P3.1做音乐播放按键口
键盘扫描:
将8位开关直接与单片机的P1口连接。
数码管显示:
在使用时一要接上拉电阻(这是有单片机P0口的物理特性决定的),二是要加限流电阻以使流进单片机的小于单片机所能承受的电流。
音乐处理:
单片机P1.0口送过来的信号经过三极管放大并送扬声器进行音乐的播出。
图仿真电路图
通过对电路图进行仿真,按下键S3,数码管正确显示了数值3,且电脑发出了mi的音调,证明了以上设计电路的可行性。
5实物制作
首先,按照设计的电路图上所需的电子元器件进行一一购买,然后,经过一段时间的电路焊接,边焊边调试,及时发现问题并解决问题,经过几天的努力,电路板最后正确完成。
如图所示。
6总结
经过几天的努力,从最开始的方案设计到最后电路板实物制作完成,过程还算比较顺利。
最后也圆满的完成了设计制作。
在制作过程中有一个小插曲就是晶振的一个引脚与单片机没有焊好,导致单片机不能工作。
当时数码管和液晶显示屏都没有装,所以结构比较简单。
首先我测试按键电路是否连接好。
排除问题后测试电源电路能否正常供电,然后就测试单片机的各个引脚电压值,检查单片机是否能够正常工作,结果单片机并不受程序控制。
将单片机用开发板测试,却是好的。
最后只剩下晶振电路了。
通过网上搜索如何检测晶振的好坏,结果是正常晶振两引脚的电压值为1.8~2.0V,并且可以测出一定的电阻值。
通过测试,发现其中一个引脚的电压值不对。
最初我以为是晶振坏了,通过测试电阻值,发现晶振是好的。
然后通过仔细检查电路,最后发现有个地方没有焊好。
通过这一折腾,白白花费了半天的时间,主要还是自己不够仔细。
虽然最后作品成功完成了,但是最后还是存在一些瑕疵:
(1)液晶屏装反了,因为当时是直接将其焊在电路板上,所以发现之后再改就比较麻烦了。
(2)原打算是用液晶屏显示歌曲歌词的,装上之后才发现LCD1602只能显示符号和字母,不能显示汉字,因为已经焊劳固了,在想拆下来换成LCD12864也比较困难了。
(3)因为制作电路板时是焊完一个模块就马上测试,没有进行总体布局,所以接线比较乱,跳线比较严重。
参考文献
[1]谭会生,张昌凡.EDA技术及应用[M].西安电子科技大学出版社,2001年9月第1版.
[2]徐志军,王金明,伊廷辉等.EDA技术与PLD设计[M].人民邮电出版社,2006年2月第1版.
[3]赵鑫,蒋亮,齐兆群等.数字电路设计[M].北京机械工业出版社,2005年6月第一版.
[4]苏家健,曹柏荣,汪志锋.单片机原理及应用技术[M].高等教育出版社.
[5]于海生.微型计算机控制技术选编[M].清华大学出版社,1999.
[6]李朝青.单片机原理及接口技术[M].北京:
北京航天航空大学出版色,2001.
[7]胡汉才.单片机原理及其接口技术[M].北京:
清华大学出版社,2004.
附录
#include
#include//此文件中调用了空指令_nop_()作为延时,该指令在头文件intrins.h
//中声明,所以需要包含该头文件;
#defineshumaguanP2
sbitSPK=P3^3;
sbitLED=P2^1;
sbitkey1=P3^0;
sbitkey2=P3^1;
unsignedinttone1,tone2;
unsignedchar*String1="ChinaUniversityofGeosciences(WuHan)";
unsignedchar*String2="FanYongFanYong";
/*****液晶管脚定义*****/
#defineLCD_DATAP0//定义数据口
sbitLCD_E=P3^5;//定义液晶1602的使能引脚
sbitLCD_RW=P3^6;//定义液晶1602的读/写选择引脚
sbitLCD_RS=P3^7;//定义液晶1602的数据/命令选择引脚
voidWriteCommand(unsignedcharcmd);//函数声明
unsignedcharcodeyinfu[]=
{
0x01,0x01,//用于停顿
0xfb,0xe9,//Do64489
0xfc,0x5c,//Re64604
0xfc,0xc1,//Mi64705
0xfc,0xef,//Fa64751
0xfd,0x45,//So64837
0xfd,0x92,//La64914
0xfd,0xd0,//Si64976
0xfd,0xee,//Do#65006
0xfe,0x2c,//re#
0xfe,0x5b//mi#
};
/*****音调*****/
unsignedcharcodexiaoge_tone[]=
{
5,1,0,3,5,2,3,1,0,
8,6,6,5,6,5,3,5,5,0,
1,8,0,6,8,5,3,2,0,
8,6,6,5,2,2,3,2,1,0,
5,8,6,5,10,9,8,9,9,0,
10,9,8,7,6,7,9,8,6,5,0,
5,3,2,1,2,3,6,5,5,0,
8,6,6,5,6,5,3,2,2,0,
1,2,3,5,7,6,5,8,9,0,
5,10,9,8,3,5,7,6,5,8
};
/*****节拍*****/
unsignedcharcodexiaoge_beat[]=
{
64,48,5,18,18,18,18,36,1