单片机电子琴课程设计报告.docx
《单片机电子琴课程设计报告.docx》由会员分享,可在线阅读,更多相关《单片机电子琴课程设计报告.docx(35页珍藏版)》请在冰豆网上搜索。
单片机电子琴课程设计报告
1课程设计的意义
单片机自20世纪70年代问世以来,已对人类社会产生了巨大的影响。
尤其是美国Intel公司生产的MCS-51系列单片机,由于其具有集成度高、处理功能强、可靠性高、系统结构简单、价格低廉、易于使用等优点,在工业控制、智能仪器仪表、办公室自动化、家用电器等诸多领域得到广泛的应用。
20世纪80年代中期以后,Intel公司已把精力集中在CPU芯片的开发、研制上,并逐渐放弃了单片机芯片的生产,但是以MCS-51内核技术为主导的单片机已经成为许多厂家及公司竞相选用的对象。
因此,Intel公司以专利转让或技术交换的形式把MCS-51的内核技术转让给了许多国际上著名的半导体芯片生产厂家,如ATMEL、PHILIPS、Cygnal等公司。
这些厂家生产的与MCS-51系列单片机兼容的各种增强型、扩展型单片机,已成为世界上8位单片机市场的主流产品。
估计在今后若干年内,它们仍是我国8位单片机应用领域的主流机型。
音乐已经成为现代人们生活所不可缺少的艺术,美妙的音乐可以让人放松,使人愉悦,电子琴作为一种乐器已经得到很多音乐人的重视和应用,一个质量好的电子琴可以做出让人欣赏的美好音乐,所以作为从事电子技术领域的我们来说,能做出质量优越的电子琴是我们的义务和责任,虽然今天我们做的是简易电子琴,但其已经具有电子琴的基本功能,为以后的进一步开发研究奠定一个良好的基础。
本课程设计的目的是为了深入了解MCS-51系列单片机的功能以及应用,学会制作简单的电子琴。
会使用LCD显示屏,对其有进一步的了解。
2方案论证
2.1设计的任务
本课程设计的任务是应用单片机制作一个简易的电子琴,能够准确发出基本的音符,并且同时能将音符在显示屏上现实出来。
2.2设计的要求
利用所给键盘的1,2,3,4,5,6,7,8八个键,能够发出8个不同的音调,并且要求按下键发声,松开延时一段时间停止,中间再按别的键则发另外一音调的声音。
当系统扫描到有按键被按下,则快速检测出是哪一个键被按下,然后单片机的定时器被启动,发出一定频率的脉冲,该频率的脉冲经喇叭驱动电路放大滤波后,就回发出相应的音调。
如果在前一个按下的键发声的同时有另一个键被按下,则启用中断系统,前面键的发音停止,转到后按的键发音程序,发出后按的键的音调。
2.3创新部分
1.用一个诺基亚5110显示屏来显示当前所发出的音符,便于使用者对音符的识别,还可以编辑一首歌并同时显示歌词和时间。
2.可播放音乐。
2.4各部分元器件选用方案论证
2.4.1单片机的选用
STC单片机是一款增强型5l单片机,完全兼容MCS-51。
STC89C52可以代替AT89C51,而且功能更强,速度更快,寿命更长,价格更低。
该单片机具有40个引脚,采用双列直插DIP-40封装。
STC89C52可以完成ISP在线编程功能,而AT89C51则不能。
因此,将AT89C51中的程序直接烧录到STC89C52中后,STC89C52就可以代替AT89C51直接工作。
STC推出的系列51单片机芯片全面兼容其它51单片机。
STC89C52内部有E2PROM,可以在程序中修改,而且断电不丢失数据。
此外,还增加了两级中断优先级等等。
2.4.2显示元件的选用
液晶显示模块采用的是NOKIA公司生产的LCD5110液晶显示模块。
该液晶屏为48*84点阵的格式,每个英文字符占用6*8个点阵,一行可以显示14个字符,可以显示六行。
汉字可以采用两种点阵方式显示,一种是12*12点阵,一种是16*16点阵,一共可以显示3行汉字。
LCD5110有10个引脚,原理图如图1所示:
图1LCD5110模块引脚图
引脚1为LCD5110的复位键,由软件控制即可。
引脚2为片选端,引脚3用于控制输入的数据是命令还是普通数据。
引脚5为液晶显示器的时钟输入,引脚6为电源输入端,引脚8为电源地。
引脚7为背光控制开关,低电平打开背光。
引脚9、10用于扩展。
2.4.3键盘的选用
常用键盘分为独立式键盘接口和行列式键盘接口。
本次课题设计使用的是独立式键盘接口。
独立式键盘接口就是各键是相互独立的,每个按键各接一条输入线,检验输入线电平的高低可以很容易判断哪个按键被按下。
这种键盘适用于按键较少后操作速度较高的场合。
我们共用了9个按键,其中8个按键控制1、2、3、4、5、6、7、i的发音。
还有一个按键控制LCD屏的显示。
2.4.4电源的选用
要想使单片机正常运行,可靠、稳定的电源必不可少,在以往的电子设计中,我们一般制作5V电源,这样做的目的是通过变压器变压,将民用220V电直接转为5V电供单片机使用,在没有电脑USB时可以直接找一个插座接上便可使用。
但缺点是制作成本较高,且体积较大,烧录程序时还需要另配烧录器。
由于我们在课程设计过程中时刻都要使用笔记本电脑,且程序需要在线烧写,故我们选择使用了USB烧录器,既可以在线烧写程序也可以当作电源使用,方便快捷。
2.4.5其他元器件的选用
在确定了单片机芯片、诺基亚5110显示屏、电源模块和按键后,我们还确定选用排针、排阻、导线若干以及用于单片机最小系统的电容、晶振、电阻等。
3系统硬件设计
3.1总体设计
本设计采用STC89C50032RC单片机作为系统控制芯片,单片机对P0口的按键进行查询,如果有按键按下,则产生相应频率的脉冲通过P2.0口输出,再经过放大电路驱动扬声器,发出相应的音调。
在显示系统中对当前的音符进行显示。
系统的总体框图如图2所示:
3.2单片机最小系统
最小系统包括晶振电路、复位电路和电源部分。
最小系统电路图如图3所示:
图3最小系统电路图
3.3按键的连接
一共有八个按键,分别和单片机的P1口相连,并分别连接一个上拉电阻。
电路图如图4所示:
图4按键连接电路图
3.4蜂鸣器的连接
蜂鸣器经过一个放大电路和单片机的P2.0口相连,选用无源蜂鸣器。
电路图如图5所示:
3.5显示屏的连接
显示屏总共有八个引脚,其中VCC和GND分别接3.3V电源和接地,其他引脚与单片机的P0口相连。
电路图如图6所示:
图6显示屏连接电路图
3.6整体电路
综合上面所介绍的各个模块的电路图的连接情况,最后总结出整体的电路图。
整体电路图如图7所示:
图7整体连接电路图
4系统软件设计
4.1主程序的设计
设计软件应从设计主程序着手开始,而设计程序应从流程图开始,经过考察论证,查阅资料,再根据所学的单片机编程的知识,最后总结出主程序的流程图如图8所示:
初始化设置
开始
判断是否有按键按下
延时10ms
判断是否仍然有按键按下
查看是哪个按键按下,并跳转到相应的程序段
设置相应的指针偏移量
调用显示子程序,调用定时子程序,开始定时
进入定时服务子程序
结束
N
Y
Y
N
图8主程序流程图
4.2显示子程序的设计
指令格式分为两种模式:
如果D/C(模式选择)置为低,当前字节解释为命令字节(见表1)。
如果D/C置为高,接下来的字节将存储到显示数据RAM。
每一个数据字节存入之后,地址计数自动递增。
在数据字节最后一位期间会读取D/C信号的电平。
每一条指令可用任意次序发送到PCD8544。
首先传送的是字节的MSB(高位)。
当SCE为高时,串行接口被初始化。
在这个状态,SCLK时钟脉冲不起作用,串行接口不消耗电力。
SCE上的负边缘使能串行接口并指示开始数据传输。
4.3定时子程序的设计
定时子程序只需将TAB中对应的数值送给定时器的初值寄存器,然后开始定时。
5软硬件联调
5.1调试步骤
第一:
按照整体电路图焊接硬件,硬件实物图如图9所示:
第二:
编辑软件程序,用Uv4对程序进行编译,编译无误后保存,再用protuse对软件进行仿真。
图10硬件运行结果图
第三:
将硬件通过USB与RS-232串口转换线与电脑连接,用STC下载软件将编译完成后的程序下载烧录到硬件中,观察硬件的运行结果。
硬件运行结果如图10所示:
5.2软硬件联调过程中出现的问题和解决办法
◎问题1:
将USB烧写器尾部的短路帽子摘掉后插上电脑,程序无法烧写进芯片。
解决措施:
将STC中单片机的设置更改为STC89C52型号的,再将波特率改小一点,端口设置正确即可。
◎问题2:
程序烧录进去后显示屏不显示任何数字。
解决措施:
将USB口从电脑上拔下然后再插入即可。
◎问题3:
按键按下之后扬声器的声音抖动。
解决措施:
将放大电路检查一遍再将每个焊点焊实即可。
6课设计总结
6.1收获
通过一个多星期的课程设计,从选题到查资料,从完善原理图到写报告文档,让我明白了课程设计是名副其实的综合性训练,不仅要运用学过的单片机技术及应用,数字电路、模拟电路以及电子技术实验等知识,还要学会查阅各种图书资料和工具书,并将新知识和所学的结合起来为自己所用。
在做整个课程设计的过程中,我进一步熟悉使用了protuse仿真软件和Uv4软件编辑软件,能较好的应用这些软件,不管是文本程序的编写还是在顶层原理图的设计都有所提高,还增强了动手能力。
应用软件的时候,要注意积累每次的体会和错误,下次碰到该注意的地方就要小心点,碰到出过错误的地方就要格外注意不要再犯同样的错误,这种方法应该适用做任何一件事吧。
在设计中遇到一些困难和问题,在向老师请教和与同学的讨论中,解决了问题,觉得很有收获。
6.2心得体会
一个星期很快就过去了,这一周我收获了很多。
在过去的一周里,我和耿勇杰、张兴旺、张扬组成的小组,经过大家一起坚持不懈的努力,最终完成了我们选择的单片机课题设计——电子琴设计。
在原设计的基础上,我们还加入了显示模块。
用诺基亚5110的液晶显示屏,完成弹奏音符的显示,使设计更加完美。
在这一个星期里,我们先把以前收集的资料进行了整理。
在做课设之前,我们已经通过学校的图书馆和网络,进行了资料的收集,对基于单片机的电子琴设计有了大体的了解和认识。
并且在这学期得课余时间,我们经过研究和讨论,制定了设计的基本思路,并焊接完成了硬件电路。
这个星期我们的任务安排主要是完成电子琴的程序和5110液晶显示的程序,进行程序调试,使之在硬件上实现,最后完成任务书。
在最初的两天里,先进行的是电子琴的程序设计,了解的音乐产生的原理。
音乐的产生是通过单片机的I\O端口输出高低不同的脉冲信号来控制蜂鸣器发声。
不同的音频信号的周期不同,通过单片机的定时器,给定时器设置不同的初值,通过定时器中断,中断过程中对I\O端口取反,就得到了音频信号的脉冲。
通过这次课设,我掌握了单片机设计单子琴的工作原理,又复习了单片机定时器的工作原理,熟练了计数初值的计算。
把自己感兴趣的电子琴和学习的单片机知识联系到了一起,设计过程中,既再次学习了单片机的知识,对学习的知识有了更深刻的认识和理解;又获得了快乐,自己设计了简易的电子琴。
用自己的设计弹奏出简单的音乐,还挺有成就感的。
兴趣是最好的老师,把自己的兴趣和所学的知识结合起来,学以致用,理论应用于实践,这是我最大的收获。
完成电子琴的发音程序后,我们开始编写5110液晶显示屏的程序。
5110液晶屏与一般课本上介绍的液晶显示屏不太一样。
我们用的5110液晶显示屏,只有8个引脚,引脚越少,电路的连接越简单。
可是看着越简单的东西,实际上要弄明白它的工作和使用就越难。
由于5110液晶显示屏的资料比较少,我们又没有接触过。
一开始我们先从其它的液晶显示屏资料开始研究,希望可以通过类比,了解5110液晶显示屏。
再弄明白了其它液晶显示屏以后,我们开始编写5110的显示程序,编写完成后,与硬件进行调试却失败了。
改程序,与硬件连接调试,失败;再改程序,再与硬件连接调试,再失败……这样的过程重复了不知多少遍。
调试了两天以后,我们又把5110液晶显示屏的资料拿出来认真的研究,把指令集看了又看,这次我们注重分析了5110液晶屏与其它液晶屏的区别。
放弃了通过其它液晶屏来认识5110,而是直接分析5110液晶屏。
因为通过学习我们发现,两样东西即使它是类似的,可是在汇编的过程中,一点微小的区别也是不同的。
后来在网上我们找到了5110液晶显示驱动PCD8544的使用手册,经过讨论和研究,我们再次编写了程序,结果和硬件连接了几次,还是失败了。
最后我们只得求助于柳老师,刘老师编写完程序后,一开始也没有显示,老师把硬件断电再接电后,显示成功。
于是我们也把自己写的程序下载到硬件中,断电再接电,显示也成功了。
再郁闷了这么长时间后,发现只是因为这个小动作,所以一直没有显示,我们在显示成功高兴的同时,也有点小无奈。
真是细节决定成败啊。
通过对5110液晶显示屏的使用,锻炼了我的自学能力。
对一个从来没有接触过的器件,通过自己的学习,分析和研究,最终完成任务。
这对我来说还是第一次,在这第一次的过程中,我走了很多弯路。
一开始不知道如何下手,先是研究错了方向,学习和研究了许多其他的液晶显示屏。
而后又拿着5110的资料不知道从哪看起,不知道那是编程要用的重点,只好把资料都看了。
再后来又对5110的资料有不少不理解的地方,对引脚的控制和它的工作有许多模糊的地方,只好在编程时,一次次的实验,验证那种理解是正确的。
虽然这个过程曲折,而又让我觉得无奈。
但是,在最后显示成功后,通过自己的努力而获得的喜悦,是无以言表的。
并且,通过这次学习,我初步学会了看器件的使用手册,看指令表。
学会了要想使用一个你不了解的器件,应该看什么,应该注意什么。
你要看器件的参数,看各个引脚的连接和作用,看指令表。
在编程的过程中,要严格按照指令表编写程序,不能自己想当然。
大学教育和课题设计的目的,就是教会我们如何自学,锻炼我们独立思考的能力,在这次课设中,我有了切身的体会。
老师在编写5110显示程序时,本身老师也没有接触过5110的汇编。
老师根据资料,通过简单的阅读,就把C语言的5110的显示程序,改成了汇编,并且显示成功。
我们的资料和老师看的差不多,却折腾了两三天才把程序编写出来。
我们一定会通过努力向老师看齐。
最后,我们还发现了蜂鸣器的问题,一开始我们用的蜂鸣器是有源的,声音小,把分压电阻短路后,声音大了,可是一直“滴滴”响个不停。
上网查证后,发现蜂鸣器分为有源和无源的,电子琴设计要用无源的蜂鸣器。
虽然是个小问题,但是也增加了一个小知识点。
通过这次课题设计,我的收获很大。
我们获得了知识,完成了设计,锻炼了独立思考能力,和动手能力。
我也体会到无论是硬件设计还是软件编程,细节决定成败,一定要认真对待每一个小步骤。
最后,谢谢柳延领老师的指导和帮助。
参考文献
1.《基于Proteus的8051单片机实例教程》李学礼主编电子工业出版社
2.《Proteus教程——电子线路设计、制版与仿真》朱清慧张凤蕊翟天嵩王志奎编著清华大学出版社
3.《单片机原理及应用技术》陈益飞主编国防工业出版社
4.《单片机控制实训指导及综合应用实例》张大明主编机械工业出版社
附录
电子琴课程设计程序源代码
SCEEQUP2.1
RESEQUP2.2
DCEQUP2.3
SDINEQUP3.0
SCLKEQUP3.1
RXDATA55H
RYDATA56H
;单片机初始化
ORG0000H
LJMPMAIN
ORG0003H
LJMPPNT0
ORG000BH
LJMPINT_T0
ORG001BH
LJMPTIME1
;设置定时器0\1工作方式0,开中断
MAIN:
MOVSP,#70H
MOVTMOD,#11H
SETBEA
SETBET0
SETBET1
SETBF0
;LCD5110复位,清屏,初始化功能
SRART:
SETBRES
SETBSCE
SETBSCLK
CALLCLEAR
CLRRES
NOP
SETBRES
NOP
LCALLLCDRST
LCALLLCD
;判断是否有键按下
KEY:
MOVP1,#0FFH
MOVA,P1
XRLA,#0FFH
JZKEY2
LCALLDE10MS
MOVA,P1
MOVR5,A
XRLA,#0FFH
JNZTKEY
SJMPKEY
KEY2:
MOVA,P2
JNBACC.5,L1
L2:
SJMPKEY
L1:
LCALLDE10MS
MOVA,P2
JBACC.5,L2
LJMPFLCD
;判断那个键按下了
TKEY:
MOVA,R5
JNBACC.0,K1
SJMPK2
K1:
MOVR2,#0
MOVDPTR,#TLCD1;设置LCD5110显示字的表格位置
MOV51H,DPH
MOV50H,DPL
LCALLSLCD
LJMPMUSIC
K2:
JNBACC.1,KK2
SJMPK3
KK2:
MOVR2,#2
MOVDPTR,#TLCD2
MOV51H,DPH
MOV50H,DPL
LCALLSLCD
LJMPMUSIC
K3:
JNBACC.2,KK3
SJMPK4
KK3:
MOVR2,#4
MOVDPTR,#TLCD3
MOV51H,DPH
MOV50H,DPL
LCALLSLCD
LJMPMUSIC
K4:
JNBACC.3,KK4
SJMPK5
KK4:
MOVR2,#6
MOVDPTR,#TLCD4
MOV51H,DPH
MOV50H,DPL
LCALLSLCD
LJMPMUSIC
K5:
JNBACC.4,KK5
SJMPK6
KK5:
MOVR2,#8
MOVDPTR,#TLCD5
MOV51H,DPH
MOV50H,DPL
LCALLSLCD
LJMPMUSIC
K6:
JNBACC.5,KK6
SJMPK7
KK6:
MOVR2,#10
MOVDPTR,#TLCD6
MOV51H,DPH
MOV50H,DPL
LCALLSLCD
LJMPMUSIC
K7:
JNBACC.6,KK7
SJMPK8
KK7:
MOVR2,#12
MOVDPTR,#TLCD7
MOV51H,DPH
MOV50H,DPL
LCALLSLCD
LJMPMUSIC
K8:
JNBACC.7,KK8
LJMPKEY
KK8:
MOVR2,#14
MOVDPTR,#TLCD8
MOV51H,DPH
MOV50H,DPL
LCALLSLCD
;取按键对应音符,设置定时器0的初值
MUSIC:
MOVA,R2
MOVDPTR,#TAB
MOVCA,@A+DPTR
MOVR7,A
MOVTH0,R7
INCR2
MOVA,R2
MOVCA,@A+DPTR
MOVR6,A
MOVTL0,R6
SETBTR0
;判断按键是否释放
LOOP:
MOVP1,#0FFH
MOVA,P1
XRLA,#0FFH
JNZLOOP
;按键释放后再响一段时间
DETY:
MOVR4,#200
LP1:
MOVR3,#126
DJNZR3,$
DJNZR4,LP1
CLRTR0
LJMPKEY
;消除抖动延时10MS
DE10MS:
MOVR1,#10
LP2:
MOVR0,#248
DJNZR0,$
DJNZR1,LP2
RET
;片P2.0口取反,提供音乐脉冲
INT_T0:
PUSHPSW
PUSHACC
MOVTH0,R7
MOVTL0,R6
CPLP2.0
POPACC
POPPSW
RETI
PNT0:
PUSHPSW
PUSHACC
JNBTR0,RE2
KEY1:
CLRTR0
MOVP1,#0FFH
MOVA,P1
XRLA,#0FFH
JZKEY1
LCALLDE10MS
MOVP1,#0FFH
MOVA,P1
MOVR5,A
XRLA,#0FFH
JNZRE3
RE3:
POPPSW
POPACC
LJMPTKEY
RE2:
POPPSW
POPACC
RETI
;LCD5110清屏
CLEAR:
MOV52H,#6
CLR1:
MOV53H,#84
CLR2:
MOVA,#0
CALLWR_D
DJNZ53H,CLR2
DJNZ52H,CLR1
RET
;LCD5110初始化
LCDRST:
MOVA,#21H
LCALLWR_C
MOVA,#0C8H
LCALLWR_C
MOVA,#20H
LCALLWR_C
MOVA,#0CH
LCALLWR_C
RET
;LCD5110显示“电子琴设计”
LCD:
SETBF0
MOVRY,#40H
MOVRX,#80H
LCALLSET_XY
MOVDPTR,#LCD0
LCALLWDATA
MOVRY,#41H
MOVRX,#80H
LCALLSET_XY
MOVDPTR,#LCD1
LCALLWDATA
MOVRY,#40H
MOVRX,#90H
LCALLSET_XY
MOVDPTR,#LCD2
LCALLWDATA
MOVRY,#41H
MOVRX,#90H
LCALLSET_XY
MOVDPTR,#LCD3
LCALLWDATA
MOVRY,#40H
MOVRX,#0A0H
LCALLSET_XY
MOVDPTR,#LCD4
LCALLWDATA
MOVRY,#41H
MOVRX,#0A0H
LCALLSET_XY
MOVDPTR,#LCD5
LCALLWDATA
MOVRY,#40H
MOVRX,#0B0H
LCALLSET_XY
MOVDPTR,#LCD6
LCALLWDATA
MOVRY,#41H
MOVRX,#0B0H
LCALLSET_XY
MOVDPTR,#LCD7
LCALLWDATA
MOVRY,#40H
MOVRX,#0C0H
LCALLSET_XY
MOVDPTR,#LCD8
LCALLWDATA
MOVRY,#41H
MOVRX,#0C0H
LCALLSET_XY
MOVDPTR,#LCD9
LCALLWDATA
RET
;LCD5110写指令子程序
WR_C:
CLRSCE
CLRDC
CALLSENT
SETBSCE
RET
;LCD5110写数据子程序
WR_D:
CLRSCE
SETBDC
CALLSENT
SETBSCE
RET
;LCD5110