单片机电子琴课程设计.docx
- 文档编号:27734235
- 上传时间:2023-07-04
- 格式:DOCX
- 页数:21
- 大小:59.86KB
单片机电子琴课程设计.docx
《单片机电子琴课程设计.docx》由会员分享,可在线阅读,更多相关《单片机电子琴课程设计.docx(21页珍藏版)》请在冰豆网上搜索。
单片机电子琴课程设计
单片机技术及系统设计
题目:
基于单片机的电子琴制作专业:
自动化班级:
姓名:
学号
摘要:
随着电子技术的发展,尤其是大规模集成电路的出现,给人类生活带来了根本性的改变。
本文首先描述系统硬件工作原理,并附以结构框图加以说明。
着重介绍了本系统所应用的各硬件接口技术和各个接口模块的功能及工作过程,并且按照设计要求利用单片机设计微型电子琴。
完成电路原理图、程序,并进行相关分析。
关键词:
单片机,电子琴,程序
一、设计主要内容:
(1)键盘矩阵识别。
即矩阵扫描,显示当前按键。
(2)不同频率音符播放,可以通过按键控制16种发音。
(3)可弹奏想要表达的音乐;
(4)该电子琴包含1首示例音乐,接通电源可播放示例音乐。
二、设计要求
(1)按设计指标进行电路设计;
(2)列出音阶与单片机定时器输出频率关系表格;(3)制作符合设计指标的硬件电路。
三、设计说明
单片微型计算机是大规模集成电路技术发展的产物,属第
四代电子计算机,它具有高性能、高速度、体积小、价格低廉、
稳定可靠、应用广泛的特点。
它的应用必定导致传统的控制技
术从根本上发生变革。
因此,单片机的开发应用已成为高科技
和工程领域的一项重大课题。
电子琴是现代电子科技与音乐结合的产物,是一种新型的
键盘乐器。
它在现代音乐扮演着重要的角色,单片机具有强大
的控制功能和灵活的编程实现特性,它已经溶入现代人们的生
活中,成为不可替代的一部分。
本文的主要内容是用AT89S51
单片机为核心控制元件,设计一个电子琴。
以单片机作为主控
核心,与键盘、扬声器等模块组成核心主控制模块,在主控模
块上设有16个按键和扬声器。
本文主要对使用单片机设计简易电子琴进行了分析,并介
绍了基于单片机电子琴统硬件组成。
利用单片机产生不同频率
来获得我们要求的音阶,最终可随意弹奏想要表达的音乐。
并
且本文分别从原理图,主要芯片,各模块原理及各模块的程序
的调试来详细阐述。
。
设计简单原理介绍四、
一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。
若要产生音频脉冲,只要算出某一音频的周期(1/频率),再将此周期除以2,即为半周期的时间。
利用定时器计时半周期时间,每当计时终止后就将P1.0反相,然后重复计时再反相。
就可在P1.0引脚上得到此频率的脉冲。
利用AT89C51的内部定时器使其工作计数器模式(MODE1)下,改变计数值TH0及TL0以产生不同频率的方法产生不同音阶,例如,频率为523Hz,其周期T,1/523,1912μs,因此只要令计数器计时956μs/1μs,956,每计数956次时将I/O反相,就可得到中音DO(523Hz)。
计数脉冲值与频率的关系式(如式3-1所示)是:
N,fi?
2?
fr
3-1
式中,N是计数值;fi是机器频率(晶体振荡器为12MHz时,其频率为1MHz);fr是想要产生的频率。
其计数初值T的求法如下:
T,65536,N,65536,fi?
2?
fr
例如:
设K,65536,fi,1MHz,DO(523Hz)的计数值。
T,65536,N,65536,fi?
2?
fr,65536,1000000?
2?
fr,65536,500000/f
DO的T,65536,500000/523,64580
单片机12MHZ晶振,高中低音符与计数T0相关的计数值如表4-2所示
表3-2音符频率表
低音音符频率HZ中音音符频率HZ高音音符频率HZ1261.631523.2511045.52293.672587.3321174.663329.633659.4631318.51
4349.234698.4641396.925391.995738.9951567.986440.006880.0061760.007493.887987.7671975.52
我们要为这个音符建立一个表格,单片机通过查表的方式来
获得相应的数据
低音0,19之间,中音在20,39之间,高音在40,59之间
TABLE:
DW0,63628,63835,64021,64103,64260,64400,64524,0,0
DW0,63731,63928,0,64185,64331,64463,0,0,0
DW0,64580,64684,64777,64820,64898,64968,65030,0,0
0,64633,64732,0,64860,64934,64994,0,0,0DW
DW0,65058,65110,65157,65178,65217,65252,65283,0,0
DW0,65085,65134,0,65198,65235,65268,0,0,0
DW0
在这个程序中,弹奏音乐的程序是用定时/计数器T0来完成的,播
放音乐程序则是用定时/计数器T1来完成的。
五、软件总体方案及设计流程
(1)键盘扫描程序:
检测是否有键按下,有键按下则记录按下键的键值,并跳转至功
能转移程序;无键按下,则返回键盘扫描程序继续检测
(2)功能转移程序:
对检测到得按键值进行判断,是琴键则跳转至琴键处理程序,是
功能键则跳转至相应的功能程序,我们设计的功能程序有两种,
即音色调节功能和自动播放乐曲功能
(3)琴键处理程序:
根据检测到得按键值,查询音律表,给计时器赋值,使发出相应
频率的声音
(4)自动播放歌曲程序:
检测到按键按下的是自动播放歌曲功能键后执行该程序,电子琴
会自动播放事先已经存放好的歌曲,歌曲播放完毕之后自动返回
至键盘扫描程序,继续等待是否有键按下
程序简易流程图
开始
T0初始化并开中断允许T0中断
T1初始化并开中断允许T1中断
键盘扫描程序
有键按下否否
是
延时去抖动
识别按键功能
是否弹奏键否播放键
是
根据按键功能装入相应音符值到T0取相应的音符码装入T1
启动T0启动T1
按键释放成功否按键释放成功否
停止T0工作停止T1工作
弹奏程序流程图
弹奏子程序
开中断并允许中断设定
定时器工作方式
取键值
根据键值查音律
表
给定时器T0赋值
开始计
时
进入中断
CPLP3.0
P3.0
退出中断
延时
返回键盘扫描程序
自动播放歌曲程序流程图
自动播放音乐程序
A<<0,DPTR<<歌谱地址
开中断,设定定时器T1工作模式
取简谱码
取该音符的节拍码
YSTOPA=0
N
Y
YA=0FFH休止符返回键盘扫描
N
查音律表,给定时器赋值
INCDPTR
开始计时
进入中断
CPL3.0
退出中断
延时
六、硬件总体方案及说明
51单片机P1口通过连接4*4的矩阵键盘,作为琴键键盘;P2.0接播放音乐键;P3.0口接喇叭,通过执行相应的功能程序使电子琴发出不同音色的声音。
(一)芯片介绍:
在本次电子琴设计中,我们组成员单片机芯片选用了AT89C51芯片,而89C51系列的兼容性也比较好。
U11939XTAL1P0.0/AD038P0.1/AD137P0.2/AD21836XTAL2P0.3/AD335P0.4/AD434P0.5/AD533P0.6/AD6932RSTP0.7/AD7
21P2.0/A822P2.1/A923P2.2/A102924PSENP2.3/A113025ALEP2.4/A123126EAP2.5/A1327P2.6/A1428P2.7/A15
110P1.0P3.0/RXD211P1.1P3.1/TXD312P1.2P3.2/INT0413P1.3P3.3/INT1AT89C51514P1.4P3.4/T0615P1.5P3.5/T1716P1.6P3.6/WRP3口也可作为AT89C51的一些特殊功能口,如下表所示:
817P1.7P3.7/RDP3口引脚特殊功能
P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2(外部中断0)P3.3(外部中断1)P3.4T0(定时器0外部输入)P3.5T1(定时器1外部输入)
WR(外部数据存储器写P3.6选通)
RD(外部数据存储器读P3.7先通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
(二)硬件接线:
(1)利用P1口为按键接入口,形成4×4组成16个按键矩阵,设计成16个音,下图所示:
所对应的键码为:
0123
4567
89AB
CDEF
(2)p3.0口音频输出,接一个喇叭。
(3)复位电路我们本来在方案选择的时候有两种选择的,上电复位和按扭复位,上电复位是利用电容充电来实现的,而按扭复位是电源对外节电容的充电使RST为高电平,复位松开后,电容通过下拉电阻放电,使RST恢复低电平。
为了制作软件的方便我们还是选择用按扭复位,因为它比较直观。
(4)电路设计图如下:
七、设计仪器、设备和材料清单
主要仪器设备:
个人计算机和相关的软件
主要元器件:
独立按键16个
单片机芯片AT80C51一片
12MHz晶振一个
S8550三极管一个
不同阻值电阻数个
开关一个
USB电源插口一个
喇叭一个
10uF、30pF电容数个
电路板一块
电烙铁一个等
八、设计源程序
BUFFEQU30HSTH0EQU31HSTL0EQU32HTEMPEQU33H
ORG00H
LJMPSTART
ORG0BH
LJMPINT_T0
ORG001BH
LJMPTIM1
MOVTMOD,#01H;设置T0工作方式START:
SETBET0
SETBEA;启动T0
MAIN:
MOVP1,#0FFH;P1全置1
CLRP1.4;开始扫描第一行
MOVA,P1
ANLA,#0FH;屏蔽高四位
XRLA,#0FH;低位有”0”则有键按下,否则无
JZKKEY1;判断有无键按下,有则继续,没有则转移到KKEY1
LCALLDELY10MS;调用延时程序
MOVA,P1;重新开始判断有无键按下
ANLA,#0FH
XRLA,#0FH
JZKKEY1
MOVA,P1
ANLA,#0FH;求键值
CJNEA,#0EH,CKK1;相等说明该行第一列有键按下,不等则转移
MOVBUFF,#0;该键值为0
LJMPNDK1;跳到NDK1执行相应的功能程序CKK1:
CJNEA,#0DH,KK2;相等说明该行第二列有键按下,不等则转移
MOVBUFF,#1;该键值为1
LJMPNDK1;跳到NDK1执行相应的功能程序KK2:
CJNEA,#0BH,KK3;相等说明该行第三列有键按下,不等则转移
MOVBUFF,#2;该键值为2
LJMPNDK1;跳到NDK1执行相应的功能程序KK3:
CJNEA,#07H,KK4;相等说明该行第四列有键按下,不等则转移
MOVBUFF,#3;该键值为2
LJMPNDK1;跳到NDK1执行相应的功能程序KK4:
NOP
NDK1:
MOVA,BUFF
MOVDPTR,#TABLE
MOVCA,@A+DPTR
MOVP0,A
MOVA,BUFF
MOVB,#2
MULAB
MOVTEMP,A
MOVDPTR,#TABLE1
MOVCA,@A+DPTR
MOVSTH0,A
MOVTH0,A
INCTEMP
MOVA,TEMP
MOVCA,@A+DPTR
MOVSTL0,A
MOVTL0,A
SETBTR0
NDK1A:
MOVA,P1
ANLA,#0FH
XRLA,#0FH
JNZNDK1A
CLRTR0
KKEY1:
MOVP1,#0FFH;开始扫描第二行
CLRP1.5
MOVA,P1
ANLA,#0FH
XRLA,#0FH
JZKKEY2
LCALLDELY10MS
MOVA,P1
ANLA,#0FH
XRLA,#0FH
JZKKEY2
MOVA,P1
ANLA,#0FH
CJNEA,#0EH,KK5
MOVBUFF,#4
LJMPNDK2KK5:
CJNEA,#0DH,KK6
MOVBUFF,#5
LJMPNDK2KK6:
CJNEA,#0BH,KK7
MOVBUFF,#6
LJMPNDK2KK7:
CJNEA,#07H,KK8
MOVBUFF,#7
LJMPNDK2KK8:
NOP
NDK2:
MOVA,BUFF
MOVDPTR,#TABLE
MOVCA,@A+DPTR
MOVP0,A
MOVA,BUFF
MOVB,#2
MULAB
MOVTEMP,A
MOVDPTR,#TABLE1
MOVCA,@A+DPTR
MOVSTH0,A
MOVTH0,A
INCTEMP
MOVA,TEMP
MOVCA,@A+DPTR
MOVSTL0,A
MOVTL0,A
SETBTR0
NDK2A:
MOVA,P1
ANLA,#0FH
XRLA,#0FH
JNZNDK2A
CLRTR0
KKEY2:
MOVP1,#0FFH;开始扫描第三行
CLRP1.6
MOVA,P1
ANLA,#0FH
XRLA,#0FH
JZKKEY3
LCALLDELY10MS
MOVA,P1
ANLA,#0FH
XRLA,#0FH
JZKKEY3
MOVA,P1
ANLA,#0FH
CJNEA,#0EH,KK9
MOVBUFF,#8
LJMPNDK3KK9:
CJNEA,#0DH,KK10
MOVBUFF,#9
LJMPNDK3KK10:
CJNEA,#0BH,KK11
MOVBUFF,#10
LJMPNDK3KK11:
CJNEA,#07H,KK12
MOVBUFF,#11
LJMPNDK3KK12:
NOP
NDK3:
MOVA,BUFF
MOVDPTR,#TABLE
MOVCA,@A+DPTR
MOVP0,A
MOVA,BUFF
MOVB,#2
MULAB
MOVTEMP,A
MOVDPTR,#TABLE1
MOVCA,@A+DPTR
MOVSTH0,A
MOVTH0,A
INCTEMP
MOVA,TEMP
MOVCA,@A+DPTR
MOVSTL0,A
MOVTL0,A
SETBTR0
NDK3A:
MOVA,P1
ANLA,#0FH
XRLA,#0FH
JNZNDK3A
CLRTR0
KKEY3:
MOVP1,#0FFH;开始扫描第四行
CLRP1.7
MOVA,P1
ANLA,#0FH
XRLA,#0FH
JZKKEY4
LCALLDELY10MS
MOVA,P1
ANLA,#0FH
XRLA,#0FH
JZKKEY4
MOVA,P1
ANLA,#0FH
CJNEA,#0EH,KK13
MOVBUFF,#12
LJMPNDK4KK13:
CJNEA,#0DH,KK14
MOVBUFF,#13
LJMPNDK4KK14:
CJNEA,#0BH,KK15
MOVBUFF,#14
LJMPNDK4
KK15:
CJNEA,#07H,KK16
MOVBUFF,#15
LJMPNDK4KK16:
NOP
NDK4:
MOVA,BUFF
MOVDPTR,#TABLE
MOVCA,@A+DPTR
MOVP0,A
MOVA,BUFF
MOVB,#2
MULAB
MOVTEMP,A
MOVDPTR,#TABLE1
MOVCA,@A+DPTR
MOVSTH0,A
MOVTH0,A
INCTEMP
MOVA,TEMP
MOVCA,@A+DPTR
MOVSTL0,A
MOVTL0,A
SETBTR0
NDK4A:
MOVA,P1
ANLA,#0FH
XRLA,#0FH
JNZNDK4A
CLRTR0
KKEY4:
MOVA,#0FFH
MOVP2,A
MOVA,P2
JBACC.0,KKEY5
LCALLDELY10MS
MOVA,P2
JBACC.0,KKEY5
MOVBUFF,#16
LJMPSTART22
START22:
MOVA,BUFF
CJNEA,#16,KKEY5
LJMPSTART2
LJMPMAINKKEY5:
START2:
MOVTMOD,#10H;设T1在M1
MOVIE,#88H;中断使能
START0:
MOV30H,#00;取简谱码指针
NEXT:
MOVA,30H;简谱码指针载入A
MOVDPTR,#TAB;至TAB取简谱码
MOVCA,@A+DPTR;
MOVR2,A;渠道的简谱码暂存于R2
JZEND0;是否渠道00(结束码)
ANLA,#0FH;不是,则取低4位(节拍码)
MOVR5,A;将节拍码存入R5
MOVA,R2;将取到的简谱码再载入A
SWAPA;高低4位交换
ANLA,#0FH;取低4位(音符码)
JNZSING;取到的音符码是否为0,
CLRTR1;开始,则不发音
SJMPD1;跳至D1
SING:
DECA;取到的音符码减1(不含0)
MOV22H,A;存入(22H)
RLA;乘2
MOVDPTR,#TAB1;至TABLE1取相对的高位字节计数值
MOVCA,@A+DPTR;
MOVTH1,A;取到的高位字节存入TH0
MOV21H,A;取到的高位字节存入(21H)
MOVA,22H;在载入取到的音符码
RLA;乘2
INCA;加1
MOVCA,@A+DPTR;至TABLE1取相对的低位字节计数值
MOVTL1,A;取到的低位字节存入TL0
MOV20H,A;取到的低位字节存入(20H)
SETBTR1;启动TIMER0
D1:
LCALLDELAY;其本单位时间1/4拍187毫秒
INC30H;取简谱码指针加1
JMPNEXT;取下一个简谱码
END0:
CLRTR1;停止TIMER0
LJMPMAIN;重复循环
TIM1:
PUSHACC;将A的值暂存于堆栈
PUSHPSW;将PSW的值暂存于堆栈
MOVTL1,20H;重设计数值
MOVTH1,21H;
CPLP3.0;将P1.0位反相,控制蜂鸣器发声
POPPSW;至堆栈取回PSW的值
POPACC;至堆栈取回A的值
RETI
DELAY:
MOVR7,#02
D2:
MOVR4,#187
D3:
MOVR3,#248
DJNZR3,$
DJNZR4,D3
DJNZR7,D2
RET
DELY10MS:
MOVR6,#10
D10:
MOVR7,#248
DJNZR7,$
DJNZR6,D10
RET
INT_T0:
MOVTH0,STH0
MOVTL0,STL0
CPLP3.0
RETI
TABLE:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H
DB7FH,6FH,77H,7CH,39H,5EH,79H,71H
TABLE1:
DW64021,64103,64260,64400
DW64524,64580,64684,64777
DW64820,64898,64968,65030
DW65058,65110,65157,65178
TAB1:
;决定节拍
DW64260,64400,64521,64580
DW64684,64777,64820,64898
DW64968,65030,65058,65110
DW65157,65178,65217
TAB:
;乐曲
DB02H,82H,62H,52H,48H,02H,52H,32H,22H,18HDB83H,91H,72H,62H,51H,61H,71H,61H,83H,61HDB81H,51H,61H,71H,61H,51H,46H,82H,32H,52HDB22H,42H,16H,21H,41H,18H,0E4H,13H,21H,43HDB51H,21H,41H,12H,83H,81H,61H,81H,58H,53HDB61H,31H,22H,13H,21H,42H,52H,0E2H,42H,21H
DB11H,91H,41H,18H,63H,81H,32H,52H,21H,41HDB16H,0E4H,11H,21H,31H,51H,26H,11H,21H,43HDB51H,82H,62H,52H,61H,51H,42H,21H,11H,0E4HDB44H,21H,41H,21H,11H,0E1H,11H,21H,41H,18HDB61H,81H,51H,61H,51H,41H,32H,21H,41H,18HDB08H,0H,04H;曲子最后静音5拍长的时间
DB00H;乐曲结束
END
九、心得体会:
这次设计从软件方面来讲不是很难,程序相对长一点,但都是书本上所学的知识,主要是中端及其服务程序的编写。
在protues上仿真,则起到很好的效果,因为元器件都是理想状态的,但做出实物来却没有那么简单啦。
经过多次调试、修改才得以出结果。
将程序烧入芯片,调试成功后,可任意弹奏自己想要的旋律。
同时可以播放一首示例歌曲,但是也有不足之处的,声音杂音时而有点大,不稳定。
经过本次课程设计,我们比较好的把理论知识与实
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 电子琴 课程设计