电子琴课程设计.docx
《电子琴课程设计.docx》由会员分享,可在线阅读,更多相关《电子琴课程设计.docx(37页珍藏版)》请在冰点文库上搜索。
电子琴课程设计
单片机课程设计
报
告
书
学院:
电气工程与自动化
专业班级:
指导老师:
团队成员:
王勇孙显宇
本案作者:
王勇
学号:
完成日期:
2013年4月5日
摘要
本设计是用AT89S52单片机为核心控制元件,设计一个模拟电子琴发声控制系统。
以单片机作为主控核心,与键盘、扬声器、LED显示器等模块组成核心主控制模块。
在主控模块上设有11个按键,其中7个按键控制7个音符,1个作为功能转换键使用,具有手动随意弹奏和自动播放乐曲的功能,另外3个按键用来实现高、中、低音的音符发音。
下面具体介绍一下单片机各端口的分配功能:
单片机的P2.0-P2.6为输入端口,用来控制7个音符的选择弹奏;P2.7为功能转换键,它能切换手动随意弹奏和自动播放乐曲的功能;P2.0-P2.2为单片机控制电子琴实现弹奏高、中、低的功能切换键;P0端口通过上拉电阻接到+5V上,然后接LED共阴数码管;P1.0为单片机的输出端口,它通过限流电阻R与三极管级基极相接,三极管的集电极接有接蜂鸣器。
本设计通过控制单片机定时器的定时时间产生不同频率的音频脉冲,经三极管放大信号后驱动蜂鸣器发出不同音节的声音。
要实现7个音符的各自的高、中、低音,需要建立三个表,分别存储高音、中音和低音的频率值;当三个拨码开关中某一个按下,通过软件选择相应的音频。
按下弹奏键就可弹奏出不同的声音。
另外用软件延时来控制发音时间的长短,来控制节拍。
通过把乐谱中的音符和相应的节拍变换为定时常数和延时常数,作为数据表格存放在存储器中。
由程序查表得到定时常数和延时常数,分别用来控制定时器产生的脉冲频率和发出该音频脉冲的持续时间,这样就可以实现乐曲的演奏。
为了实现按键的准确判断和完善电子琴发声的效果,本设计采用了软件防抖的方法,有效的解决了按键抖动的问题。
另外当按下功能切换键,切换至音乐自动播放功能时,本系统能实现七首歌曲的有选择播放,另附带数码管显示提醒。
这样使得电子琴的功能变的更加强大。
本设计为实物电路板设计开发,报告中详细的阐述了电子琴设计的方法和过程。
并经过软硬件的调试,该音乐发生器不但能通过键盘弹奏出很好的音调,而且还可以通过键盘选择播放不同的音乐。
除此之外,本电子琴还带有显示功能,能显示哪个按键按下,而且相当准确。
本系统运行稳定,其优点是硬件电路简单,软件功能完善,控制系统可靠,性价比较高等,具有一定的实用和参考价值。
目录
第一章概述3
1.设计的目的意义3
2.设计任务3
3.设计要求3
第二章系统总体方案及硬件设计4
1.任务分析设计4
2.方案比较及原理框图与功能模块介绍4
2.1方案比较4
2.2原理框图4
2.35
2.单片机电路设计7
第三章软件设计9
1.系统分析9
2.参数计算10
3.程序设计11
第四章实验测试13
1.仿真图14
2.实验结果分析14
第五章课程设计体会14
参考文献15
第一章概述
1.设计的目的意义
1、进一步熟悉和掌握单片机的内部结构和工作原理,了解单片机应用系统设计的基本方法和步骤;
2、掌握单片机仿真软件Proteus的使用方法;
3、掌握键盘和显示器在的单片机控制系统中的应用;
4、掌握撰写课程设计报告的方法。
2.设计任务
基于单片机的电子琴设计
3.设计要求
综合利用所学单片机知识完成一个单片机应用系统设计并仿真实现,从而加深对单片机软硬知识的理解,获得初步的应用经验,为走出校门从事单片机应用的相关工作打下基础。
采用两人一组进行设计,共同协作完成设计。
1、首先按设计题目要求制订方案。
2、设计出硬件原理图。
3、焊接电路。
4、对设计的硬件、软件调试,直至正确地实现系统功能。
5、要求学生最终提供:
设计说明书一份,焊好且调试好与核心板配套电路板一块。
6、统一进行答辩考试。
第二章系统总体方案及硬件设计
1.任务分析设计
硬件设计的任务是根据总体设计要求,在选择的机型的基础上,具有确定系统中所要使用的元器件,设计出系统的原理框图、电路原理图。
该设计要实现一种有单片机控制的电子琴,单片机工作于12MHZ时钟频率,使用其定时/计数器T0,工作模式为1,改变计数值TH0和TL0可以产生不同频率的脉冲信号.该设计具有11个音节键盘,用户可以根据乐谱在键盘上进行演奏,音乐发生器会根据用户的弹奏,通过扬声器将音乐播放出来,本设计可以实现用户自由弹奏音乐。
用单片机产生的音频脉冲直接驱动扬声器并不能产生所要实现的音乐,因为它没有足够的驱动能力,这就需要音频功率放大器,本设计采用三极管就可以实现信号放大功能。
2.方案比较及原理框图与功能模块介绍
2.1方案比较
传统电子琴可以用键盘上的“1”到“A”键演奏从低So到高Do等11音。
该设计有11个按钮矩阵,设计成21个音阶,可以实现音阶在低音1-高音7之间。
比传统音阶范围大,弹奏效果好。
2.2原理框图
基于单片机系统的电子琴的原理框图如图
(1)所示:
图
(1)
2.3功能模块介绍
1、AT89S52
功能特性:
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内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
8位微控制器8K字节在系统可编程FlashAT89S52。
主要性能:
与MCS-51单片机产品兼容、8K字节在系统可编程Flash存储器、1000次擦写周期、全静态操作:
0Hz~33Hz 、 三级加密程序存储器 、32个可编程I/O口线 、三个16位定时器/计数器八个中断源、全双工UART串行通道、低功耗空闲和掉电模式、掉电后中断可唤醒、看门狗定时器、双数据指针、掉电标识符。
2、三极管
晶体三极管也称三极管,是通过一定的工艺,将两个PN结结合在一起的器件.由于PN结之间的相互影响,使三极管变现出不同于单个PN结的特性而具有电流放大功能,从而使PN结的应用发生了质的飞跃。
本设计采用了S8050三极管,它是小功率、NPN型的信号放大器。
它的外型与封装如下图
(2)所示:
图
(2)
3、LED数码管
本次设计的显示电路采用LED数码管显示,LED(Light-EmittingDiode)是一种外加电压从而渡过电流并发出可见光的器件。
LED是属于电流控制器件,使用时必须加限流电阻。
LED有单个LED和八段LED之分,也有共阴和共阳两种。
常用的七段显示器的结构如图下图所示。
发光二极管的阳极连在一起的称为共阳极显示器(如图b所示),阴极连在一起的称为共阴极显示器(如图c所示)。
1位显示器由八个发光二极管组成,其中七个发光二极管a~g控制七个笔画(段)的亮或暗,另一个控制一个小数点的亮和暗,这种笔画式的七段显示器能显示的字符较少,字符的开头有些失真,但控制简单,使用方便。
此外,要画出电路图,首先还要搞清楚他的引脚图的分布,在了解了正确的引脚图后才能进行正确的字型段码编码。
才能显示出正确的数字来。
(a)外形(b)共阳极(C)共阴极
图(3)数码管引脚
2.单片机电路设计
2.1AT89S52模块电路原理图
2.2键盘扫描模块电路原理图
2.3数码管显示模块电路原理图
2.3.4音频处理模块电路原理图
第三章软件设计
1.系统分析
该程序设计思路比较清晰既从开始到声明变量与函数再到读取按钮开关,判断是否按下,然后就是一个一个按钮的动作。
其主程序框图如下:
2.参数计算
乐音听起来有的高,有的低,这就叫音高,音高是由发音物体振动频率的高低决定的,频率高声音就高,频率低声音就低,不同音商的乐音是用C、D、E、F、G、A、B表示的,这7个字母就是乐音的音名,它们一般依次唱成DO、RE、MI、FA、SO、LA、SI,这是唱曲时乐音的发音,所以叫唱名。
音持续时间的长短即时值,一般用拍数表示,休止符表示暂停发音。
一首音乐是由许多不同的音符组成的,而每个音符对应着不同的频率,这样就可以利用不同频率的组合,加以与拍数对应的延时,构成音乐。
除了音符以外,节拍也是音乐的关键组成部分。
节拍实际上就是音持续时间的长短,在单片机系统中可以用延时来实现,如果1/4拍的延时是0.4秒,则1拍的延时是1.6秒,只要知道1/4拍的延时时间,其余的节拍延时时间就是它的陪数。
如果单片机要自己播放音乐,那么必须在程序设计中考虑到节拍的设置,由于本例实现的音乐发生器是由用户通过键盘输入弹奏乐曲的,所以节拍由用户掌握,不由程序控制。
对于不同的曲调我们也可以用单片机的另外一个定时/计数器来完成。
音乐的音拍,一个节拍为单位(C调)具体如下表:
表3-1音乐节拍表
曲调值
DELAY
曲调值
DELAY
调4/4
125ms
调4/4
62ms
调3/4
187ms
调3/4
94ms
调2/4
250ms
调2/4
125ms
了解音乐的一些基本知识后可知,产生不同频率的音频脉冲即能产生音乐,对于单片机而言,产生不同频率有脉冲非常方便,可以利用它的定时/计数器来产生这样的方波频率信号,因此,需要弄清楚音乐中的音符和对应的频率,以及单片机定时计数的关系。
在本设计中,单片机工作于12MHZ时钟频率,使用其定时/计数器T0,工作模式为1,改变计数值TH0和TL0可以产生不同频率的脉冲信号,在此情况下,C调的各音符频率与计数值T的对照如下表:
表3-2音符频率与计数值T的对照表
音符
频率(HZ)
计数值(T值)
音符
频率(HZ)
计数值(T值)
低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的对照表
T的值决定了TH0和TL0的值,其关系为:
TH0=T/256,TL0=T%256
3.程序设计
第四章实验测试
1.仿真图
本设计系统的仿真图如下所示:
2.实验结果分析
本次实验可以准确的完成实验要求,按键1、2、3、4、5、6、7分别可以发出do、re、mi、fa、so、la、si音。
按键8进入程序切换,按键9发高音,按键10发中音,按键11发低音。
第五章课程设计体会
通过各方面的努力,本次设计任务顺利完成,系统部分功能已完全实现课程的要求。
可以随意演奏一首喜欢的曲子,并能显示在数码管上;而且还能通过切换功能键实现弹奏和播放音乐功能的切换,进入播放功能时,可以通过按键任意选择七首音乐,并能通过数码管进行显示,因而基本达到预定的要求和良好的效果。
通过这次比较系统的项目设计提高了我们运用所学的专业基础知识来解决面临实际问题的能力,同时也提高了我们查阅各种文献资料、设计手册、设计规范以及软件编程的水平。
参考文献
[1]余发山,王福忠,杨凌霄.单片机原理及应用技术.中国矿业大学出版社.2008.6
[2]王守中.51单片机开发入门与典型实例.北京:
人民邮电出版社,2007.8
[3]胡辉.单片机应用系统设计与训练.北京:
中国水利水电出版社,2004.8
附1源程序代码
KEYBUFEQU30H;列号保存单元
STH0EQU31H;定时器T0初值高8位存放单元
STL0EQU32H;定时器T0初值低8位存放单元
TEMPEQU33H;定时器初值偏移地址存放单元
SPKEQUP1.0;发声器所在端口
ORG0000H
LJMPSTART;上电转向主程序
ORG000BH;定时器T0中断向量地址
LJMPINT_T0;转向定时器T0中断服务子程序
START:
MOVDPTR,#TABLE2;默认为中音模式
MOVTMOD,#11H;设置定时器的工作方式,定时器T0和T1都是方式1,作为16为定时计数器使用(定时方式)
SETBET0;开各中断开关
SETBEA;开放中断总允许和源允许
ZAICI:
ACALLSAOMIAO;进入手动弹奏程序
SJMPZAICI
;********手动弹奏程序********
SAOMIAO:
;********高中低音模式选择*******
MOVP3,#0FFH;判断P3口模式键是否有键按下
MOVA,P3
XRLA,#0FFH
CJNEA,#00H,MOSHI;有键按下,转向模式转换子程序
AJMPTANZOU;没有按下模式不变
MOSHI:
LCALLDELY10MS;延时消抖
JBP3.0,ZHONGYIN;高音键没有按下,转向中音
MOVDPTR,#TABLE1;高音键按下将模式设定为高音
LJMPTANZOU;转向扫描音符键
ZHONGYIN:
JBP3.1,DIYIN;中音键没有按下,转向低音
MOVDPTR,#TABLE2;中音键按下将模式设定为中音
LJMPTANZOU;转向扫描音符键
DIYIN:
JBP3.2,TANZOU;低音键没有按下,转向扫描音符键
MOVDPTR,#TABLE3;低音键按下将模式设定为低音
LJMPTANZOU;转向扫描音符键
;手动弹奏程序
;*******音符键扫描********
TANZOU:
MOVP2,#0FFH;先将键盘的列全部置为高电平
MOVA,P2
XRLA,#0FFH
CJNEA,#00H,NEQ;有键按下转向NEQ
CLRP1.0;没有键按下,蜂鸣器不发声
LJMPNOKEYS;没有按键按下即跳转到NOKEYS
NEQ:
LCALLDELY10MS;延时10ms消抖
MOVA,P2;消除扰动和干扰
XRLA,#0FFH
CJNEA,#00H,NK1
LJMPNOKEYS;为扰动信号没有键按下转NOKEYS
NK1:
MOVA,P2;判断是否按下#1键
CJNEA,#0FEH,NK2;按下#1键即顺序执行程序,否则跳到NK2检查下一键位
MOVKEYBUF,#0;保存列号#0
MOVP0,#06H;让LED显示为1
LJMPDK1
NK2:
CJNEA,#0FDH,NK3;判断是否按下#2键
MOVKEYBUF,#1;保存列号#1
MOVP0,#5BH;让LED显示为2
LJMPDK1
NK3:
CJNEA,#0FBH,NK4;判断是否按下#3键
MOVKEYBUF,#2;保存列号#2
MOVP0,#4FH;让LED显示为3
LJMPDK1
NK4:
CJNEA,#0F7H,NK5;判断是否按下#4键
MOVKEYBUF,#3;保存列号#3
MOVP0,#66H;让LED显示为4
LJMPDK1
NK5:
CJNEA,#0EFH,NK6;判断是否按下#5键
MOVKEYBUF,#4;保存列号#4
MOVP0,#6DH;让LED显示为5
LJMPDK1
NK6:
CJNEA,#0DFH,NK7;判断是否按下#6键
MOVKEYBUF,#5;保存列号#5
MOVP0,#7DH;让LED显示为6
LJMPDK1
NK7:
CJNEA,#0BFH,NK08;判断是否按下#7键
MOVKEYBUF,#6;保存列号#6
MOVP0,#07H;让LED显示为7
LJMPDK1
NK08:
CJNEA,#7FH,NK8;判断是否按下#8功能切换键
NK8:
LJMPCHOICE;转向功能转换程序
DK1:
MOVA,KEYBUF;取列号
MOVB,#2;初值为双字节,乘以2
MULAB;对应读取表格TABLE1的数据
MOVTEMP,A;保存初值高八位偏移地址
MOVCA,@A+DPTR;取初值高八位
MOVSTH0,A;保存值高八位
MOVTH0,A;装初值高八位
INCTEMP;初值高八位偏移地址加一得到初值低八位偏移地址
MOVA,TEMP
MOVCA,@A+DPTR;取初值低八位
MOVSTL0,A;保存值低八位
MOVTL0,A;装初值低八位
SETBTR0;开启定时器T0,T0开始计数
DK1A:
;判断音符键是否松开
MOVA,P2
XRLA,#0FFH
JNZDK1A;没有松开,等待
CLRTR0;松开,定时器T0停止计数
NOKEYS:
RET;返回
;*******功能转换程序********
CHOICE:
MOVP2,#0FFH
MOVA,P2
CJNEA,#7FH,NEXT1111;按下了P1.7功能转换键后,顺序执行,否则则跳转到NEXT1111
NEXT111:
MOVP2,#0FFH
MOVA,P2
XRLA,#0FFH
JNZNEXT111;如果A不为0,即按键有变化,等待键释放
ACALLDISPLAY;如果没有键按下,即调用DISPLAY
MOVSP,#60H;设定堆栈指针指向60H
MOV40H,#00H;歌谱偏移地址存储单元清零
ACALLDIANGE;转向点歌程序
NEXT1111:
LJMPSAOMIAO;返回弹奏程序
;*******点歌播放音乐程序********
DIANGE:
MOVP2,#0FFH;先将键盘的列全部置为高电平
MOVA,P2
XRLA,#0FFH
CJNEA,#00H,NNEQ;判断有没键按下,
CLRP1.0;没有键按下,蜂鸣器不发声
LJMPDIANGE;等待点歌
NNEQ:
;有按键按下即跳到NNEQ
LCALLDELY10MS;延时10ms消抖
MOVA,P2
XRLA,#0FFH
CJNEA,#00H,NNEQ1;有键按下转向NNEQ1
LJMPDIANGE;没有键按下等待点歌
NNEQ1:
MOVA,P2;判断是否按下#1键
CJNEA,#0FEH,NNK2;按下#1键即顺序执行程序,否则跳到NNK1检查下一键位
MOVDPTR,#TABLE10;DPTR指向第一首歌歌谱
MOVP0,#06H;让LED显示为1
LJMPMUSIC;转向歌曲播放程序
NNK2:
CJNEA,#0FDH,NNK3;判断是否按下#2键
MOVDPTR,#TABLE20;DPTR指向第二首歌歌谱
MOVP0,#5BH;让LED显示为2
LJMPMUSIC;转向歌曲播放程序
NNK3:
CJNEA,#0FBH,NNK4;判断是否按下#3键
MOVDPTR,#TABLE30;DPTR指向第三首歌歌谱
MOVP0,#4FH;让LED显示为3
LJMPMUSIC;转向歌曲播放程序
NNK4:
CJNEA,#0F7H,NNK5;判断是否按下#4键
MOVDPTR,#TABLE40;DPTR指向第四首歌歌谱
MOVP0,#66H;让LED显示为4
LJMPMUSIC;转向歌曲播放程序
NNK5:
CJNEA,#0EFH,NNK6;判断是否按下#5键
MOVDPTR,#TABLE50;DPTR指向第五首歌歌谱
MOVP0,#6DH;让LED显示为5
LJMPMUSIC;转向歌曲播放程序
NNK6:
CJNEA,#0DFH,NNK7;判断是否按下#6键
MOVDPTR,#TABLE60;DPTR指向第六首歌歌谱
MOVP0,#7DH;让LED显示为6
LJMPMUSIC;转向歌曲播放程序
NNK7:
CJNEA,#0BFH,NNK08;判断是否按下#7键
MOVDPTR,#TABLE70;DPTR指向第七首歌歌谱
MOVP0,#07H;让LED显示为7
LJMPMUSIC;转向歌曲播放程序
NNK08:
CJNEA,#07FH,DIANGE;判断是否按下#8功能切换键
;*********判断功能切换键释放*******
SHIFANG:
MOVP2,#0FFH;将键盘的列全部置为高电平
MOVA,P2
XRLA,#0FFH
CJNEA,#00H,SHIFANG;判断键有没有松开,
LCALLDELY10MS;延时10ms消抖
MOV