简易7按键电子琴的设计.docx
《简易7按键电子琴的设计.docx》由会员分享,可在线阅读,更多相关《简易7按键电子琴的设计.docx(12页珍藏版)》请在冰豆网上搜索。
![简易7按键电子琴的设计.docx](https://file1.bdocx.com/fileroot1/2023-1/1/2bec1df6-7485-4c43-82fa-4479994fd25c/2bec1df6-7485-4c43-82fa-4479994fd25c1.gif)
简易7按键电子琴的设计
目录
第1章概述1
1.1设计的目的1
第2章系统设计2
2.1简易电子琴设计方案2
2.2系统总框图2
2.3系统工作原理3
第3章硬件电路的设计4
第4章软件的设计5
4.1程序流程图5
4.2程序设计说明6
4.2.1对声音的控制6
4.2.2对演奏的控制6
第5章总结7
参考文献8
附录1系统电路图9
附录2源代码错误!
未定义书签。
第1章概述
我们生活在一个信息时代,各种电子产品层出不穷,作为一个计算机专业的学生,了解这些电子产品的基本组成和设计原理是十分必要的,我们学习的是计算机组成的理论知识,而课程设计正是对我们学习的理论的实践与巩固。
本设计主要介绍的是一个用超高速硬件描述语言VHDL设计的一个具有若干功能的简易电子琴,其理论基础来源于计算机组成原理的时钟分频器。
1.1设计目的
(1)能够对电子电路、电子元器件、印制电路板等方面的知识有进一步的认识,独立对其进行测试与检查。
(2)熟悉8051单片机的内部结构和功能,合理使用其内部寄存器,能够完成相关软件编程设计工作。
(3)为实现预期功能,能够对系统进行快速的调试,并能够对出现的功能故障进行分析,及时修改相关软硬件。
(4)对软件编程、排错调试、焊接技术、相关仪器设备的使用技能等方面得到较全面的锻炼和提高。
第2章系统设计
2.1简易电子琴设计方案
设计一简易电子琴,要求能够发出1、2、3、4、5、6、7等七个音符。
使用元件:
AT89C51、LM324,喇叭,按键等
1.能够实现基本的琴键功能
即每按下一个琴键,单片机能够检测到键盘的按键,并根据按键的位置通过程序来控制,使蜂鸣器发著不同频率的声音,声音延迟延迟一段时间,等到按键放开后,声音停止。
然后再继续扫描,看是否有键按下,如此循环下去,即实现基本的琴键功能。
2.能够实现调节电子琴银色功能
在键盘上设置功能键,通过按键选择不同的因素。
3.能够实现通过按键自动播放歌曲的功能
在键盘上设置几个功能键,按下之后会根据功能键跳转到自动播放歌曲的程序,来播放相应的歌曲。
2.2系统的总框图
2.3系统工作原理
乐音实际上是有固定周期的信号。
我们可以用AT89C51的一个定时器(如T1)控制,在P3.4脚上输出方波周期信号,产生乐音。
根据不同的按键,调节T1的溢出时间,可输出不同频率的乐音,这样就做出了一台微型电子琴。
每个乐音的音高(频率)是固定的,表1列出了一个8度以及其上下共16个音的音名、频率及定时器T1初值对照(设晶体频率为6MHz)
音乐产生原理及硬件设计由于一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。
本次设计中单片机晶振为12MHZ,那么定时器的计数周期为1MHZ,假如选择工作方式1,那T值便为T=216--5﹡105/相应的频率,那么根据不同的频率计算出应该赋给定时器的计数值,电子琴的具体工作原理图如下图所示。
简易电子琴的工作原理图
第3章硬件电路的设计
由于一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。
本次设计中单片机晶振为12MHZ,那么定时器的计数周期为1MHZ,假如选择工作方式1,那T值便为T=216--5﹡105/相应的频率,那么根据不同的频率计算出应该赋给定时器的计数值,列出不同音符与单片机计数T0相关的计数值如下表所示:
音符
频率(HZ)
简谱码(T值)
中1DO
523
64580
中2RE
587
64684
中3M
659
64777
中4FA
698
64820
中5SO
784
64898
中6LA
880
64968
中7SI
988
65030
采用查表程序进行查表时,可以为这个音符建立一个表格,有助于单片机通过查表的方式来获得相应的数据:
TABLEDW64580,64684,64777,64820,64898,64968,65030
第4章软件设计
4.1程序流程图
图3.2简易电子琴的工作流程图
4.2程序设计说明
4.2.1对声音的控制
①对音调的控制:
根据不同的按键,对定时器T1送入不同的初值,调节T1的溢出时间,这样就可以输出不同音调频率的方波。
不同音调下各个音阶的定时器
②对音长的控制:
先向定时器T0送入一个固定初值,控制中断循环的次数,从而得到成倍数关系的时间间隔。
按一拍0.64S计算,取1/16拍为最小间隔,即0.04S,为此设定T0的初值为63C0。
③乐谱的编码规则:
对于每个音符,定义用8位二进制数表示。
其中,最高位为1的字符为结束符,当读到最高位为1时,停止播放;低3位存储音阶码,即音阶表的列数,可为000B~111B(1~7和休止符),休止符表示停顿,不发音,只有时间长短属性;第3位和第4位存储音高码,即音阶表的行数,可为00B~10B;第5位和第6位存储音长码,即中断次数,可为00B~10B。
4.2.2对演奏的控制
在手动演奏时,规定先按音调键,后按音阶键。
每次音阶键按下时,调用键盘扫描子程序,获得键值,查询音阶表,获取定时器T1的计时初值,向喇叭输入相应频率的驱动脉冲,发出相应的声音,若按键没有松开,则一直发声;若按键松开,则停止发声。
在自动演奏时,通过选曲键来确定要播放的音乐,根据键值查询曲目表获取所点歌曲的首地址,依次读取歌曲的代码,获得音阶、音调和音长信息,播放相应的音乐。
当读到结束符时,停止播放音乐。
第5章总结
通过一周的紧张工作,终于完成了简易电子琴的设计,这个课程设计使我受益匪浅,他使我了解了硬件设计的整个流程,并且加深了我对计算机组成原理这门的课内容的理解,通过这个课程设计,不仅使我了解了组成原理的脊髓,而且使我对单片机从陌生到初步理解,扩充的我的知识面。
这个课程设计也培养了我们的耐心和毅力,一个小小的错误就会导致结果的不正确,而对错误的检查要求我要有足够的耐心,由于这个课程设计也使我积累了一些经验,相信这些经验在我以后的学习工作中会有很大的作用。
此课程设计也使我了解了单片机设计的方便灵活性,这是我们跨入计算机硬件行业很好的一次锻炼。
参考文献
【1】单片微型计算机接口技术及应用 张淑清姜万录等著编(国防工业出版社 2003年1月)
【2】8051单片机实践与应用 吴金戌沈庆阳郭庭吉编著(清华大学出版社 2001年8月)
【3】微型计算机原理与接口技术 冯博琴主编(清华大学出版社 2004年4月)
【4】新颖实用电子设计与制作 张友汉主编(福建科学技术出版社 2000年1月)
【5】C语言程序设计教程(第二版) 谭浩强等著编(高等教育出版社)
【6】数字电子技术基础简明教程(第二版)余孟尝主编
附录
(一)硬件电路图:
附录
(二)源代码
1.方案一:
产生按键音符
ORG0000H
LJMPMAIN
ORG000BH
LJMPBREAK
MAIN:
MOVTMOD,#01H ;设置定时器0的工作方式
SETBEA
SETBET0 ;设置定时器0中断
SETBTR0 ;启动定时器0
WAIT1:
LCALLKEY ;调用KEY子程序,判断有键按下否?
第几个键?
CLREA ;屏蔽中断
CJNER3,#00H,WAIT1 ;如果R3=0,表示有键按下
MOVA,22H ;将22H里存放的按键号送给A
RLA ;因为查表里都是字,所以得乘2查得数据
MOVDPTR,#TABLE ;指向表头
MOVCA,@A+DPTR ;查表
MOVTH0,A ;将数据高位送TH0
MOV21H,A ;将高位备份
MOVA,22H ;将22H里存放的按键号送给A
RLA ;因为查表里都是字,所以得乘2查得数据
INCA ;取低位数据
MOVCA,@A+DPTR
MOVTL0,A
MOV20H,A
WAIT2:
LCALLKEY
SETBEA
CJNER3,#00H,WAIT1
JMPWAIT2
KEY:
MOVR3,#00H ;KEY子程序,判断有键按下否?
第几个键?
MOVR1,#0FFH
MOVR0,#00H
MOVA,R1
MOVP2,A
MOVA,P2
CLRC
CPLC ;利用标志位CY来判断是哪个键按下
MOVR2,#08H
WAIT3:
RLCA ;移位判断
JNCSTORE
INCR0
DJNZR2,WAIT3
STORE:
MOV22H,R0 ;将按键号存22H,R3=0有键按下
MOVR3,#00H
RET
BREAK:
PUSHACC ; 中断产生方波,从P1.0口输出
PUSHPSW
MOVTL0,20H
MOVTH0,21H
CPLP1.0
POPPSW
POPACC
RETI
TABLE:
DW65030,64968,64898,64820,64777,64684,64580;7,6,5,4,3,2,1
END
方案二:
产生按键音符
ORG0000H
SJMPSTART
ORG000BH
AJMPINT_0
ORG0030H
START:
MOVP1,#00H
SETBEA
SETBET0 ;计数器0
MOVTMOD,#02H
MOVTH1,#09CH
MOVTL1,#09CH ;定时器初植
CLRTR0 ;定时器不允许
SCAN:
;键盘扫描
MOVA,P2 ;判断键盘按下,跳到SCAN_1,若未按,继续扫描
CJNEA,#0FFH,SCAN_1
NOP
SJMPSCAN
SCAN_1:
ACALLDELAY;是不是真的要按下?
如果是,则跳转SU_KEY查询是哪个按下?
MOVA,P2
CJNEA,#0FFH,SU_KEY
NOP
SJMPSCAN
SU_KEY:
JNBP2.1,MU_1 ;判断是哪个键按下?
JNBP2.2,MU_2
JNBP2.3,MU_3
JNBP2.4,MU_4
JNBP2.5,MU_5
JNBP2.6,MU_6
JNBP2.7,MU_7
SJMPSCAN
;R1信号周期
MU_1:
MOVR1,#19 ;如果第一个按键按下,则R1=19,同时程序转NEXT
SJMPNEXT
MU_2:
MOVR1,#17
SJMPNEXT
MU_3:
MOVR1,#15
SJMPNEXT
MU_4:
MOVR1,#14
SJMPNEXT
MU_5:
MOVR1,#13
SJMPNEXT
MU_6:
MOVR1,#11
SJMPNEXT
MU_7:
MOVR1,#10
SJMPNEXT
NEXT:
MOVA,R1
MOVR0,A
SETBTR0 ;启动定时器0
NEXT_1:
MOVA,P2 ;没键按下继续执行,有键按下,返回读引脚
CJNEA,#0FFH,NEXT_1
ACALLDELAY
MOVA,P2 ;真的没键按下?
CJNEA,#0FFH,NEXT_1
CLRTR0 ;不响
AJMPSCAN ;扫描键盘去
INT_0:
;中断程序
DJNZR0,RE ;R0不等于0时,返回
CPLP1.0
MOVA,R1
MOVR0,A
RE:
RETI
DELAY:
MOVR7,#100 ;延长时间等待,键盘消抖
D1:
MOVR6,#10
D2:
DJNZR6,D2
DJNZR7,D1
RET
END
大庆石油学院课程设计成绩评价表
课程名称
单片机原理及应用课程设计
题目名称
基于51单片机简易电子琴设计
学生姓名
高尚
学号
060901140501
指导教师姓名
职称
序号
评价项目
指标
满分
评分
1
工作量、工作态度和出勤率
按期圆满的完成了规定的任务,难易程度和工作量符合教学要求,工作努力,遵守纪律,出勤率高,工作作风严谨,善于与他人合作。
20
2
课程设计质量
课程设计选题合理,计算过程简练准确,分析问题思路清晰,结构严谨,文理通顺,撰写规范,图表完备正确。
45
3
创新
工作中有创新意识,对前人工作有一些改进或有一定应用价值。
5
4
答辩
能正确回答指导教师所提出的问题。
30
总分
评语:
指导教师:
年月日