简易电子琴设计与实现.docx
《简易电子琴设计与实现.docx》由会员分享,可在线阅读,更多相关《简易电子琴设计与实现.docx(12页珍藏版)》请在冰豆网上搜索。
![简易电子琴设计与实现.docx](https://file1.bdocx.com/fileroot1/2023-4/2/5d0761e1-4217-41d7-bc2b-58a44d16ecde/5d0761e1-4217-41d7-bc2b-58a44d16ecde1.gif)
简易电子琴设计与实现
简易电子琴设计与实现
一、概述
1.1课题设计目的及其意义
单片机(单片微型计算机)是大规模集成电路技术发展的产物,具有高性能、高速度、体积小、价格低廉、稳定可靠等特点。
单片机的应用相当广泛,从平常的家用电器到航空航天系统和国防军事、尖端武器都能找到它的身影。
因此,单片机的开发应用已成为高科技和工程领域的一项重大课题。
随着社会的发展进步,人们的生活水平也逐步提高,音乐已经成为了我们生活中很重要的一部分,在工作和学习之余,欣赏音乐不仅使身心得到放松,同时也提高人们的精神品质和个人素养。
当代,爱好音乐的年轻人越来越多,也有不少人自己练习弹奏乐器,作为业余爱好和一种放松的手段,鉴于一些乐器学习难度大需花费太多精力,且其价格太过于高昂,使得一部分有这种想法的人不得不放弃这种想法,而电子琴又是一种新型的键盘乐器,它是现代电子科技与音乐结合的产物,价格相对便宜,能够满足一般爱好者的需求,因此,在现代音乐中扮演着重要的角色。
故简易电子琴的研制具有一定的社会意义。
1.2课题设计的任务与主要内容
本文的主要内容是用AT89C51单片机为核心控制元件,设计一个简单的电子琴。
以单片机作为主控核心,与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有16个按键和扬声器。
定时器按设置的定时参数产生中断,由于定时参数不同,就会发出不同频率的脉冲,不同频率的脉冲经喇叭驱动电路放大滤波后,就会发出不同音调。
先根据要求设计硬件电路和编写相应的程序,然后进行仿真调试,最后细心焊接硬件电路图,将程序烤入芯片中,最终达到设计目的。
本系统运行稳定,其优点是硬件电路简单,软件功能完善,控制系统可靠,性价比较高等,具有一定的实用和参考价值。
具体实现的功能:
按下音符键可以发出相应的音符。
二、基本组成和原理
2.1音乐相关知识
在人类还没有产生语言时,就已经知道利用声音的高低、强弱等来表达自己的思想和感情。
声带、琴弦等物体振动时会发出声波,声波通过空气传播进入人耳,人们就听到了声音。
声音有噪音和乐音之分振动有规律的声音是乐音,音乐中所用的声音主要是乐音。
乐音听起来有的高、有的低,这就叫做音高。
音高是由发声物体振动频率的高低决定的,频率高声音就高,频率低声音就低。
音持续时间的长短即时值,一般用拍数表示。
休止符表示暂停发音。
一首音乐是由许多不同的音符组成的,而每个音符对应着不同的频率,这样就可以利用不同的频率组合,加以拍数对应的延时,构成音乐。
如果单片机要自己播放音乐就必须考虑到节拍的设置。
对于AT80C51而言要产生一定频率的方波一般是先将某口线输出高电平,延迟一段时间后再输出低电平。
通过改变延迟时间可以改变单片机的输出频率。
单片机的延时主要有两种方式,即软件延时和使用定时/计数器延时。
其中软件延时不是很精确,而电子琴电路由于每个音符的频率值要求比较严格,因此我们选用定时/计数器延时。
由于本课程设计是由用户通过键盘输入弹奏乐曲的,所以节拍由用户掌握,不由程序控制。
因此,我们只需弄清楚音乐中的音符和对应的频率,利用单片机的定时/计数器来产生方波频率信号即可。
要产生相应的音频脉冲,只需要计算出某音频的周期,再除以2。
利用计数器计时半周期,计满时使P2.0反向,然后重复计时再反向。
本例中,单片机工作在12MHz时钟,使用定时器/计数器T0,工作模式为1,改变计数初值TH0、TL0就可产生不同频率的脉冲信号。
例如低3MI音,频率为330Hz,其周期T=1/f=1/330=3030us,计数值N=3030/2=1515,所以每计数1515次P2.0反向。
计数初值T=65536-N=64021。
C调的各音符频率与计数值T的对照表如表1所示。
表1C调各音符频率与计数值T对照表
音符
频率(HZ)
简谱码(T值)
音符
频率(HZ)
简谱码(T值)
低1DO
262
63628
#4FA#
740
64860
#1DO#
277
63731
中5SO
784
64898
低2RE
294
63853
#5SO#
831
64934
#2RE#
311
63928
中6LA
880
64968
低3M
330
64021
#6
932
64994
低4FA
349
64103
中7SI
988
65030
#4FA#
370
64185
高1DO
1046
65058
低5SO
392
64260
#1DO#
1109
65085
#5SO#
415
64331
高2RE
1175
65110
低6LA
440
64400
#2RE#
1245
65134
#6
466
64463
高3M
1318
65157
低7SI
494
64524
高4FA
1397
65178
中1DO
523
64580
#4FA#
1480
65198
#1DO#
554
64633
高5SO
1568
65217
中2RE
587
64684
#5SO#
1661
65235
#2RE#
622
64732
高6LA
1760
65252
中3M
659
64777
#6
1865
65268
中4FA
698
64820
高7SI
1967
65283
2.2简易电子琴基本原理及其框图
1、基本思想:
简易的电子琴系统主要是采用AT89C51单片机,单片机工作于12MHZ的时钟频率,使用其定时/计数器T0,工作模式为1,设计4*4键盘矩阵,设置成16个音,可随意弹奏想要表现的音乐,因为单片机产生的音频脉冲没有足够的驱动能力,所以用三极管放大电路实现音频的放大,保证扬声器能产生所要实现的音符声音。
2、硬件框图:
3、软件设计流程图:
本设计采用AT89C51单片机作为核心处理器件,按下复位键,进入初始化,调用键盘扫面子程序,获得键值,查询音阶表,获取定时初值,向喇叭输入相应频率的脉冲驱动,发出相应的音调,若按键没有释放,则一直发声;若按键松开,则停止发声。
当读到结束符时,停止播放音乐。
具体软件流程图如下:
1)中断服务子程序流程图:
2)主程序流程图:
三、系统的硬件结构
硬件电路的设计主要包括芯片89C51,、4*4键盘电路、振荡电路、复位电路及音频电路组成。
简易电子琴硬件电路图:
3.1单片机89C51的简介
AT89C51是一个低功耗,高性能CMOS8位单片机,片内含4kBytesISP(In-systemprogrammable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。
AT89S51具有如下特点:
40个引脚,4kBytesFlash片内程序存储器,128bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。
此外,AT89S51设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。
空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。
同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式,以适应不同产品的需求。
该系列单片机引脚与封装如下图所示:
主要引脚功能:
1、RST(9):
复位输入。
当振荡器复位时,要保持RST引脚2个机器周期的高电平时间;
2、XTAL1(19):
反向振荡器放大器的输入及内部时钟工作电路的输入;
3、XTAL2(18):
来自反向振荡器的输出;
4、P1口(1-8):
P1口是从内部提供上拉电阻器的8位双向I/O口,P1口缓冲器能接收和输出4个TTL门电流;
5、
/
:
当
保持低电平时,单片机只访问外部程序存储器。
为高电平时,单片机只访问内部程序存储器。
3.2键盘电路
键盘是最常用的单片机输入设备,大致可以分为独立连接式键盘和矩阵式。
独立连接式键盘是最简单的键盘电路,每个键独立接入一根数据线。
这种键盘结构简单,使用方便,但是占用的I/O口线较多。
矩阵式键盘由行线和列线组成,按键位于行列的交叉点上,行列式键盘可节省I/O口,适合按键数较多的场合。
所以本设计的4*4键盘采用矩阵式键盘。
3.3振荡电路
单片机的时钟信号用来提供单片机内各种位操作的时间基准,时钟信号通常有两种电路形式得到:
内部振荡方式和外部振荡方式。
在引脚XTAL1和XTAL2外接晶体振荡器(简称晶振)或陶瓷谐振器,就构成了内部震荡方式。
由于单片机内部有一个高增益反相放大器,当外接晶振后,就构成了自激振荡器并产生振荡时钟脉冲。
晶振通常选用6MHz、12MHz或者24MHz。
本设计中采用的是12MHz。
电容器C1、C2起稳定振荡频率、快速起振的作用,电容值一般5~30pF。
内部振荡方式所得的时钟信号比较稳定,电路中使用较多。
振荡方式如下图:
3.4复位电路
复位操作完成单片机内电路的初始化,是单片机从一种确定的状态开始运行。
当单片机的复位引脚RET出现5ms以上的高电平时,单片机就完成了复位操作。
如果RST持续为高电平,单片机就处于循环复位状态,而无法执行程序。
因此要求单片机复位后能脱离复位状态。
根据应用要求,复位操作通常有2种基本形式:
上电复位、开关复位。
上电复位要求接通电源后,自动实现复位操作。
开关复位要求在电源接通的条件下,在单片机运行期间,如果发生死机,用按钮开关操作使单片机复位。
上电后,由于电容要充电,是RST持续一段时间高电平时间。
当单片机已经在运行之中时,按下复位键也能使RST持续一段时间的高电平,从而实现上电且开关复位的操作。
通常选择C=10~30uF,R=10~1kᾨ
常用的复位电路如下图所示:
在单片机启动后,电容C两端的电压持续充电为5V,这是时候10K电阻两端的电压接近于0V,RST处于低电平所以系统正常工作。
当按键按下的时候,开关导通,这个时候电容两端形成了一个回路,电容被短路,所以在按键按下的这个过程中,电容开始释放之前充的电量。
随着时间的推移,电容的电压从5V释放到变为了1.5V,甚至更小。
根据串联电路电压为各处之和,这个时候10K电阻两端的电压为3.5V,甚至更大,所以RST引脚又接收到高电平。
单片机系统自动复位。
3.5音频放大电路
使用PNP管来放大,其中发射极接5V电源,集电极接喇叭,电路中的电容是用来隔离直流电用的。
PNP管放大原理:
当PNP管的VC即,基极电流可以控制集电极电流,这种控制作用就称为管子的放大作用。
本课程设计的音频放大电路图(三极管型号为9015):
四、系统软件的设计
4.1系统的软件主程序:
#include
#include
#defineuintunsignedint
#defineucharunsignedchar
sbitP20=P2^0;//P2.0外接扬声器
uintFTemp;
unsignedintcodetab[]={//定时半周期的初始值
64021,64103,64260,64400,//低音3456
64524,64580,64684,64777,//低音7,中音123
64820,64898,64968,65030,//中音4567
65058,65110,65157,65178};//高音1234
/*************************************************************
*函数功能:
用扫描法读P1外接4×4键盘
**************************************************************/
ucharKeyscan(void)
{
uchari,j,temp,Buffer[4]={0xfe,0xfd,0xfb,0xf7};
for(j=0;j<4;j++)//循环四次,扫描四行
{P1=Buffer[j];//在低四位分别输出一个低电平
_nop_();
temp=0x80;//计划先读出P1.7位
for(i=0;i<4;i++)//循环四次,检查四列
{if(!
(P1&temp))//从高四位,截取1位
{return(i+j*4);//返回取得的按键值
}
temp>>=1;//换右边一位
}}
return16;//没有键按下就返回16
}
主函数
***************************************************************/
voidMain(void)
{
ucharKey_Value=16,Key_Temp1,Key_Temp2;//读出的键值
TMOD=0x01;//T0定时方式1
ET0=1;//允许T0中断
EX0=1;//允许INT0中断
EA=1;//开总中断
while
(1)
{TR0=0;//T0工作停,暂不发音
Key_Temp1=Keyscan();//第一次读入按键
if(Key_Temp1!
=16){//有键按下
Key_Temp2=Keyscan();//再读一次
if(Key_Temp1==Key_Temp2)//两次相等
{Key_Value=Key_Temp1;//就确认下来
FTemp=tab[Key_Value];//根据键值,取出定时半周期的初始值
TR0=1;//启动定时器T0,发音
while(Keyscan()<16);//等待释放
P20=1;//停止发音
}}}}
//==============================================================
voidT0_INT(void)interrupt1
{
TL0=FTemp;//载入定时半周期的初始值
TH0=FTemp>>8;
P20=~P20;//发音
}
4.2系统的软件的调试仿真
硬件电路制作完成并调试好后,便可将程序编译好下载到单片机试运行。
这里我们使用Proteus软件进行仿真,加载编译好的.HEX即
文件到单片机后,
点击运行按钮
即可,仿真电路图如下:
(当我们按键时如果成功就会听到我们想要的音乐)
5、全文总结
本次课程设计制作简易电子琴,虽然花费了我们很多精力,但收获颇丰,一方面,将自己的理论知识与实践相结合起来,进一步巩固了专业基础知识和相关专业课程知识;另一方面,也培养了自己独立自主、综合分析的思维与创新能力,更让我知道了团队的力量是巨大的。
设计的过程不是一帆风顺,遇到过各种各样的问题。
特别是设计软件时,一些很细小的问题都可能导致功能性的错误,修改了多次才通过仿真。
在设计过程中我发现自己对以前所学过的知识理解得不够深刻,掌握得不够牢固,所以也利用图书馆、网络资源查阅了大量文献资料,也请教了老师和同学。
同时在具体的制作过程中我们发现一些书本上的知识与实际的应用存在着一定的差距,书本上的知识很多都是理想化后的结论,忽略了很多实际的因素,或者涉及的不全面,可在实际的应用时这些是不能被忽略的,我们不得不考虑这方面的问题,这也让我更深刻地体会到在今后的学习工作中也要注重理论联系实际。
六、指导老师意见
七、参考书目
[1]李群芳,肖看,《单片机原理、接口及应用》,北京,清华大学出版社,2005年
[2]戴佳,戴卫恒,《51单片机C语言应用程序设计实例精讲》,电子工业出版社,2005年
[3]刘海成,《单片机及应用系统设计原理与实践》,北京,北京航空航天大学出版社,2009年
[4]楼然苗,李光飞,《单片机课程设计指导》,北京,北京航空航天大学出版社,2007年
[5]吴金戌,沈庆阳,郭庭吉,《8051单片机实践与应用》,北京,清华大学出版社,2002年
[6]吴国经,《单片机应用技术》,北京,中国电力出版社,2004.年
[7]高天康《音乐知识词典》甘肃人民出版社2003.08