电子琴的单片机设计.docx
《电子琴的单片机设计.docx》由会员分享,可在线阅读,更多相关《电子琴的单片机设计.docx(12页珍藏版)》请在冰点文库上搜索。
电子琴的单片机设计
单片机课程设计报告书
课题名称
电子琴设计
姓名
学号
院、系、部
电气系
专业
自动化
指导教师
玛丽焦永梅
2011年6月30日
电子琴设计
一、设计目的
单片机将存储、运算、通信、中断、定时等功能及于一身,“麻雀虽小五脏俱全”,这也正是单片机的优点所在。
控制功能强、可靠性好,非常易于根据应用系统要求进行扩展、功耗非常小、体积非常小、非常适用于各行各业,甚至“上天入地”。
具有很强的生命力。
所以掌握好应用好单片机,对以后的控制理念、软件、硬件等概念会有一个很好的理解。
此次,应用单片机来完成电子琴的设计,一方面要学习和掌握单片机中常用接口电路的应用和设计技术,充分认识理论知识对应用技术的指导性作用,进一步加强理论知识与应用相结合的实践和锻炼。
另一方面要了解计算机的发声原理,通过给定频率的改变来改变发出的声音,熟悉定时器编程方法,熟悉键盘扫描电路工作原理及编程方法。
通过这次设计实践能够进一步加深对专业知识和理论知识学习的认识和理解,使自己的设计水平和对所学的知识的应用能力以及分析问题解决问题的能力得到全面提高。
不但要掌握一些简单的理论,更要学会编程的思路,及于硬件相结合的能力。
通过焊接开发板,学习熟练技术并掌握一些电路的设计组成原理。
二、设计要求
1、设计一个电子琴,设计8个按键1,2,3,4,5,6,7,8,能够发出8个不同的音调,要求按下按键发声,松开延时一段时间停止,中间再按别的键则发另一音调的声音。
2、当系统扫描到有键被按下,则快速检测出是哪一个键被按下,然后单片机的定是被启动,发出一定频率的脉冲,该频率的脉冲输入到蜂鸣器后,就发出相应的音调。
如果在前一个按下的键发音的同时有另一个键被按下,则启用中断系统,前面间的发音停止,转到后按的键的发音程序,发出后按的键的音调。
3、做出实物。
三、硬件电路设计
四、使用说明
1、利用定时器,可以发出不同频率的脉冲,不同频率的脉冲经喇叭驱动电路放大滤波后,就会发出不同的音调。
2、定时器按设置的定时参数产生中断,这一次中断发出脉冲低电平,下一次反转发出脉冲高电平。
由于定时参数不同,就发出了不同频率的脉冲。
本设计的延时,由TO计数来实现,发出的频率与T0的中断入口相接,记电平跳变的个数。
记够五十个后,申请中断,关闭定时器T1和计数器T0,然后返回主程序,扫描键盘,等待下一次的按键。
如果键还按下,继续发音。
各音阶标称频率值:
音阶
1
2
3
4
5
6
7
8
频率(HZ)
440.00
493.88
554.37
587.33
659.26
739.99
830.61
1024
通过计算就可以得到不同频率,需要给定时器送计算的初值。
得到的值程序中已给出。
3、根据设计要求,在一个键按下音乐还没停止时,如果再按下另一键则向另一个键的音阶。
解决此问题,选用外部中断INT0。
设计键盘4行2列,将四个行接在与门的输入上,输出接到P3.2口(INTO的中断入口)。
外部中断INT0的中断子程序编有关闭计数和定时器,将用户标志位置1,然后返回主程序,扫描键盘,检测是哪一个按键,然后执行相应的子程序,是蜂鸣器发出相对应的音阶。
这个是必须有的,有键按下就可由此来返回主程序,来判断是那个键。
五、流程图设计
六、程序设计如下:
ORG0000H
AJMPMAIN
ORG0003H
AJMPKAI
ORG000BH
AJMPDUA
ORG001BH
AJMPZH
ORG0030H
MAIN:
MOVTMOD,#26H
MOVTL0,#206
MOVTH0,#206
SETBEA
SETBET0
SETBET1
SETBET0
SETBEX0
SETBIT0
MOVP1,#0FH
MOVA,P1
CJNEA,#0FH,LP1
AJMPMAIN
LP1:
ACALLDELAY
MOVA,P1
CJNEA,#0FH,LP2
AJMPMAIN
LP2:
MOVP1,#0FFH
MOVP1,#0EFH
MOVA,P1
JNBACC.0,K0
JNBACC.1,K1
JNBACC.2,K2
JNBACC.3,K3
MOVP1,#0DFH
MOVA,P1
JNBACC.0,K4
JNBACC.1,K5
JNBACC.2,K6
JNBACC.3,K7
AJMPMAIN
K5:
AJMPK55
K6:
AJMPK66
K7:
AJMPK77
K0:
MOVTL1,#114
MOVTH1,#114
SETBTR0
SETBTR1
MOVR0,#8
MOVA,R0
CLRF0
JNBF0,$
CLRTR0
CLRTR1
LJMPMAIN
K1:
MOVTL1,#3
MOVTH1,#3
SETBTR0
SETBTR1
MOVR0,#4
MOVA,R0
CLRF0
JNBF0,$
CLRTR0
CLRTR1
LJMPMAIN
K2:
MOVTL1,#30
MOVTH1,#30
SETBTR0
SETBTR1
MOVR0,#4
MOVA,R0
CLRF0
JNBF0,$
CLRTR0
CLRTR1
LJMPMAIN
K3:
MOVTL1,#43
MOVTH1,#43
SETBTR0
SETBTR1
MOVR0,#4
MOVA,R0
CLRF0
JNBF0,$
CLRTR0
CLRTR1
LJMPMAIN
K4:
MOVTL1,#65
MOVTH1,#65
SETBTR0
SETBTR1
MOVR0,#4
MOVA,R0
CLRF0
JNBF0,$
CLRTR0
CLRTR1
LJMPMAIN
K55:
MOVTL1,#87
MOVTH1,#87
SETBTR0
SETBTR1
MOVR0,#4
MOVA,R0
CLRF0
JNBF0,$
CLRTR0
CLRTR1
LJMPMAIN
K66:
MOVTL1,#105
MOVTH1,#105
SETBTR0
SETBTR1
MOVR0,#4
MOVA,R0
CLRF0
JNBF0,$
CLRTR0
CLRTR1
LJMPMAIN
K77:
MOVTL1,#122
MOVTH1,#122
SETBTR0
SETBTR1
MOVR0,#4
MOVA,R0
CLRF0
JNBF0,$
CLRTR0
CLRTR1
LJMPMAIN
ZH:
DJNZR0,LP3
MOVR0,A
CPLP0.7
LP3:
RETI
DUA:
CLRP0.7
SETBF0
CLRTR0
RETI
KAI:
SETBF0
RETI
DELAY:
MOVR5,#20
D:
MOVR6,#24
HERE:
DJNZR6,HERE
DJNZR5,D
RET
七、设计总结:
在这个小学期之间,根据我所选的题目,编出了实验的程序。
总体来讲,此次设计的题目比较简单。
通过键盘扫描来,再由定时器来发出不同的音调。
通过老师以前的讲解,基本上知道了键盘扫描的原理,通过这次的设计,又查阅了相关资料,于老师所讲的结合,基本上掌握了键盘扫描的原理。
在试验箱上模拟成功了,但是在将程序考到开发板上之后偶遇到了一些问题。
就是P0-P3那个口接键盘的问题,在接P口时总是扫描不成功,所以外接了一个键盘,用P1口来扩展,P3口还可继续用作自己的功能。
对于定时器、计数器的中断,有了进一步的掌握。
怎么算初值,怎么申请中断,怎么响应,返回到什么位置等更深层次的应用并学为己有。
并且学会了有多个等待多个中断返回时,怎么进行合理利用,使他们每个都能返回到该返回的位置,不出现错误。
这一点我觉得很有用。
开始调试程序的时候不能出现结果,通过单步执行,仔细检查程序之后发现,用错了定时和计数。
T0中断优先级高于T1,如果用T0作定时器,T1作计数器的话,蜂鸣器会一直响,不会按要求停止了。
这是由于计数器就算到时,也不会打乱定时器的定时,会一直反转下去。
出现错误结果。
在开始时还反了一个较低级的错误就是忘记开外部中断和选择它的触发方式。
对于以后的设计更要求自己仔细认真,不能大意。
焊接开发板的过程中,学会使用必须工具,提高了自己焊接的技术。
并且学到并掌握了其中电路图的连接方式及其原理。
在将程序考进80C52后,出现了音阶错误。
开始不知道是什么原因导致的,是开发板焊接有问题,还是程序出现了不对应的错误。
通过老师的分析帮助,进一步试验,在其他同学的帮助下,实验硬件与程序,最终找到了错误的原因所在。
感谢他们对于我的帮助。
这次设计,有程序,有硬件,有理论,有实践,通过它们的结合,我所学到的知识形成了一个系统,不再是孤立的,而是硬件与软件的结合,提高了自己的程序运用能力,对于编程的思路有了更进一步的悟性。
不再是一个机械的运用,而是根据具体情况来编写自己的程序,有了一定的灵活运用能力。
在此期间,每位同学都在尽自己最大的努力来完成设计任务,都认识到了设计的意义与目的。
指导老师们是最辛苦的了,炎炎酷暑,即使没有吃饭,汗流满面也在为同学们做着耐心的指导。
在此感谢老师们的无私的指导与帮助,您们辛苦了,祝您们工作顺利,万事如意!
八、参考文献:
[1]高峰.单片微型计算机原理与接口技术.科学出版社,2007
[2]马丽,焦咏梅.单片机仿真试验系统(使用说明书)
[3]张毅刚.单片机原理与应用设计