单片机课程设计电子琴按键演奏.docx
- 文档编号:9730603
- 上传时间:2023-02-06
- 格式:DOCX
- 页数:18
- 大小:399.60KB
单片机课程设计电子琴按键演奏.docx
《单片机课程设计电子琴按键演奏.docx》由会员分享,可在线阅读,更多相关《单片机课程设计电子琴按键演奏.docx(18页珍藏版)》请在冰豆网上搜索。
单片机课程设计电子琴按键演奏
目录
一、课题名称1
二、设计内容概要1
三、设计任务和要求1
四、系统设计方案1
4.1系统设计思路1
4.2系统总体的组成框图1
五、系统硬件设计及说明2
5.1系统控制模块AT89C512
5.2琴键控制模块2
5.3播放模块3
六、系统软件设计及说明3
6.1设置单片机产生音频脉冲的初值3
6.2实验主要程序4
6.3系统总体功能流程图5
七、系统调试6
7.1使用的主要仪器和仪表6
7.2调试步骤6
7.3测试数据7
7.4故障与排除7
八、课设答辩7
九、课设小结8
参考文献8
附录9
一、课题名称
电子琴设计——按键演奏
二、设计内容概要
电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。
它在现代音乐扮演着重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。
本文的主要内容是用单片机为核心控制元件,设计一个电子琴。
以单片机作为主控核心,与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有8个按键和扬声器。
三、设计任务和要求
任务:
设计并实现按键演奏电子琴
要求:
利用数字键1、2、3、4、5、6、7、8作为电子琴键,按下数字键发出相应的音调。
四、系统设计方案
4.1系统设计思路
利用所给单片机实验仪中键盘的1,2,3,4,5,6,7,8八个键,能够发出8个不同的音调,并且要求按下按键发声,松开延时一段时间停止,中间再按别的键则发另一音调的声音。
当系统扫描到键盘上有键被按下,则快速检测出是哪一个键被按下,然后单片机的定时器被启动,发出一定频率的脉冲,该频率的脉冲经喇叭驱动电路放大滤波后,就会发出相应的音调。
4.2系统总体的组成框图
本系统采用AT89C51为电子琴控制中心,系统主要包括主控制模块、琴键控制模块、播放模块。
如图1所示:
五、系统硬件设计及说明
5.1系统控制模块AT89C51
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,俗称单片机。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
外形及引脚排列如图所示。
P0口:
漏极开路的双向I/O口。
当使用外部存储器时(ROM或RAM)时,作为地址和数据总线分时复用。
在程序效验时,输出指令字节(这时需加外部上拉电阻)。
作为总线时P0口能驱动8个LSTTL负载。
P1口:
准双向I/O口,具有内部上拉电阻,是通用的I/O口。
在编程/校验时,用作输入低位字节地址,P1口可驱动4个LSTTL负载。
P2口:
准双向I/O口,具有内部上拉电阻,是通用的I/O口。
让使用片外存储器(ROM或RAM)时,输出高8位地址。
在编程/校验时,接收高位字节地址。
P2口可驱动4个LSTTL负载。
P3口:
准双向I/O口,具有内部上拉电阻,是通用的I/O口。
P3口可驱动4个LSTTL负载。
同时P3口还具有第二个功能,在使用第二个功能时,其输出锁存器应由程序置1。
5.2琴键控制模块
琴键的按键选用的XL2000的JP37独立按键模块,此8个独立的按键开关按下为低电平。
如图3所示:
图3按键控制模块
5.3播放模块
扬声器是一种把电平转变为声信号的换能器件,扬声器和性能对音质的高低音响很大。
扬声器的种类很多,按其换能原理可分为电动式、静电式、电磁式、压电式等几种,后两种多用于农村有线广播网中,按频率范围可分为低音扬声器、中音扬声器,这些常在音箱中作为组合扬声器使用。
在本次课程设计使用XL2000中JP16小喇叭模块。
如图4所示:
六、系统软件设计及说明
6.1设置单片机产生音频脉冲的初值
音乐实际上是有固定周期的信号,通过单片机的定时器的设置可以产生相应音频的音调。
产生不同频率的音频脉冲即能产生音乐,对于单片机而言,产生不同频率有脉冲非常方便,可以利用它的定时/计数器来产生这样的方波频率信号,因此,需要弄清楚音乐中的音符和对应的频率,以及单片机定时计数的关系。
在本实验中,单片机工作于12MHZ时钟频率,使用其定时/计数器T1,工作模式为1,改变计数值TH0和TL0可以产生不同频率的脉冲信号,在此情况下,C调的各音符频率与计数值T的对照如下表1所示。
其计算方法如下:
计数脉冲值与频率的关系式是:
N=fi÷2÷fr
式中,N是计数值;fi是机器频率(晶体振荡器为12MHz时,其频率为1MHz);fr是想要产生的音调的频率。
其计数初值T的求法如下:
T=65536-N=65536-fi÷2÷fr
例如:
设K=65536,fi=1MHz,求低音DO(262Hz)、中音DO(523Hz)、高音DO(1046Hz)的计数值。
T=65536-N
=65536-fi÷2÷fr
=65536-1000000÷2÷fr
=65536-500000/fr
低音DO的T=65536-500000/262=63627;
中音DO的T=65536-500000/523=64580;
高音DO的T=65536-500000/1046=65058。
表1音符频率与计数值T的对照表
音符
频率(HZ)
计数值(T值)
TL
TH
音符
频率(HZ)
计数值(T值)
TL
TH
低1DO
262
63627
0x8B
0xF8
#4FA#
740
64859
0x5B
0xFD
#1DO#
277
63730
0xF2
0xF8
中5SO
784
64897
0x81
0xFD
低2RE
294
63835
0x5B
0xF9
#5SO#
831
64933
0xA5
0xFD
#2RE#
311
63927
0xB7
0xF9
中6LA
880
64967
0xC7
0xFD
低3MI
330
64020
0x14
0xFA
#6LA#
932
64999
0xE7
0xFD
低4FA
349
64102
0x66
0xFA
中7SI
968
65029
0x05
0xFE
#4FA#
370
64185
0xB9
0xFA
低1DO
1046
65057
0x21
0xFE
低SO
392
64259
0x03
0xFB
#1DO#
1109
65084
0x3C
0xFE
#5SO#
415
64330
0x4A
0xFB
高2RE
1175
65109
0x55
0xFE
低6LA
440
64399
0x8F
0xFB
#2RE#
1245
65133
0x6D
0xFE
#6LA#
466
64463
0xCF
0xFB
高3MI
1318
65156
0x84
0xFE
低7SI
494
64523
0x0B
0xFC
高4FA
1397
65177
0x99
0xFE
中1DO
523
64579
0x43
0xFC
#4FA#
1490
65197
0xAD
0xFE
#1DO#
554
64632
0x78
0xFC
高5SO
1568
65216
0xC0
0xFE
中2RE
587
64683
0xAB
0xFC
#5SO#
1661
65234
0x02
0xFE
#2RE#
622
64731
0xDB
0xFC
高6LA
1760
65251
0xE3
0xFE
中3MI
659
64776
0x08
0xFD
#6LA#
1865
65267
0xE3
0xFE
中4FA
698
64819
0x33
0xFD
高7SI
1967
65282
0x02
0xFF
6.2实验主要程序
1)音频输出引脚接入:
sbitBEEP=P1^7;//喇叭输出脚
2)按键控制引脚接入:
sbitK1=P2^0;
sbitK2=P2^1;
sbitK3=P2^2;
sbitK4=P2^3;
sbitK5=P2^4;
sbitK6=P2^5;
sbitK7=P2^6;
sbitK8=P2^7;
3)中断控制:
timer0()interrupt1
{
TL0=tl0_f;
TH0=th0_f;//调入预定时值
BEEP=~BEEP;//取反音乐输出IO
}
4)按键控制音阶声音输出(电子琴)
if(!
Ki)//i取值为1~8
{tl0_f=freq[f[0]*2];//置一个音符的值
th0_f=freq[f[0]*2+1];
TR0=1;
for(n=0;n<8000;n++);//延时
}
6.3系统总体功能流程图
在主程序流程图中,T0初始化后,首先要通过扫描键盘,判断是否有按键按下。
若没有按键按下,则要继续扫描,不断重复循环过程,直到发现按键按下,程序才能根据按键的功能,将相对应的音符T值装入到T0以后,T0就会开始启动。
程序随后继续扫描按键,若按键保持按下状态,则T0继续保持工作状态,直到按键松下,T0就会停止工作,返回初始状态,等待下一次的扫描按键结果。
如图5所示,为主程序流程图
当程序中断时,程序保存现场,并重装TH0、TL0的初值,然后将P1.7按位取反,重新送入到P1.7,最后中断返回。
如图6所示,为T0中断子程序图。
六、系统调试
7.1使用的主要仪器和仪表
PC(装有XLSP、keil软件)一台、XL2000实验仪、若干连接线等。
7.2调试步骤
根据系统设计方案,本系统的调试共分为三大部分:
硬件调试,软件调试和软硬件联调。
1)硬件调试
主要就是对课程设计中所需使用的每个实验仪器,进行调试,是各个硬件能够正常工作,并做好一些必要设置,确保在后续调试中正常工作。
2)软件调试
软件调试主要就是采用keil软件,将编写的程序进行调试,检查是否有语法错误。
图7是所设计的运行代码的调试结果。
3)综合调试
综合调试,是将软件和硬件联合在一起进行调试。
首先,将XL2000实验仪通过数据线与PC的USB相连。
接着,接将keil生成的.hex文件导入到软件XLSP中,进行运行。
使其加载到XL2000实验仪中的AT89C51中。
最后,通过XL2000实验仪中的JP37独立按键模块的8个按键,测试JP16小喇叭模块所产生的音频是否达到预先所设计的要求。
7.3测试数据
表2按键音符对应表
按键
频率(HZ)
音符
按键
频率(HZ)
音符
K1
440
do
K5
554
so
K2
466
re
K6
587
fa
K3
494
mi
K7
622
xi
K4
523
la
K8
659
do
7.4故障与排除
课设最重要环节是编码的设计,它的调试的成功与否,决定着本次课程设计结果。
而编码中对于每个音符多对应的T码值计算中,我们出现了错误,导致了所产生的音调达不到课设的要求。
但是通过书本上方式1中的计算方法,以及老师的帮助,我们很快的就将所有音符对应的正确的T码值计算完毕,并且通过调试达到了课设要求。
其他的一些就都是一些小的问题,像串口错误等,通过组内合作,也都各个击破了。
八、课设答辩
问题:
可不可以把工作方式1改成工作方式0?
答案:
可以,因为这里工作方式0的计数初值T=
-1*
/2/f也满足。
九、课设小结
我们大家都知道,课设、实训、实验等等的实践项目都是理论联系实际,让我们对所学的理论的知识有个比较客观,比较具体的了解。
本次课设的题目是电子琴设计——按键演奏,这次的课设老师要求我们以小组为单位分工合作完成任务。
对于课题的选择我们是觉得题目很新颖,觉得很好玩,就选了。
通过为期一周的课程设计,让我对于单片机原理及应用这门课程有了更深一层次的了解。
在课设的过程中,不管从查资料还是从对于课题的审题以及把握上,老实说,这是我做的最认真的一次,我觉得自己在很努力地把它做好。
通过本次的课设,不仅培养了我独立思考、动手操作的能力,在其它能力上也都有了很大的提高。
更重要的是,在课设课上,我学会了很多学习的方法,比如说应该怎样去查资料,应该去找什么样的资料来让自己对于这个课题有更好的了解,而这是日后最实用的。
虽然在最后答辩的时候,对于老师的提问,我没有完全答出来,但在事后我还是经过查阅书本,知道了正确的答案。
而这其实也在告诉我,课设还是要结合课本上的理论知识,这样才能知其然且知其所以然。
最后我要感谢老师的指导,也同样谢谢其他各组同学的无私帮助!
参考文献
[1]王浩全等.单片机原理及应用.北京:
人民邮电出版,2013.
[2]张毅刚,彭喜元.单片机原理与应用.北京:
高等教育出版社,2007
[3]刘乐喜.微机计算机接口技术及应用.湖北:
华中科技大学出版社,2005
[4]李群芳等.单片微型计算机原理与接口技术.北京:
电子工业出版社.2002
附录
源程序:
#include
#defineucharunsignedchar//定义一下方便使用
#defineuintunsignedint
#defineulongunsignedlongint
charcodedx516[3]_at_0x003b;//这是为了仿真设置的
sbitBEEP=P1^7;//喇叭输出脚
sbitK1=P2^0;
sbitK2=P2^1;
sbitK3=P2^2;
sbitK4=P2^3;
sbitK5=P2^4;
sbitK6=P2^5;
sbitK7=P2^6;
sbitK8=P2^7;
ucharth0_f;//在中断中装载的T0的值高8位
uchartl0_f;//在中断中装载的T0的值低8位//T0的值,及输出频率对照表
ucharcodefreq[36*2]=
{
0x8B,0xF8,//00262HZ,1//0
0xF2,0xF8,//00277HZ,1#
0x5B,0xF9,//00293HZ,2
0xB7,0xF9,//00311HZ,2#
0x14,0xFA,//00329HZ,3
0x66,0xFA,//00349HZ,4
0xB9,0xFA,//00370HZ,4#
0x03,0xFB,//00392HZ,5
0x4A,0xFB,//00415HZ,5#
0x8F,0xFB,//00440HZ,6
0xCF,0xFB,//00466HZ,6#
0x0B,0xFC,//00494HZ,7
0x43,0xFC,//00523HZ1
0x78,0xFC,//00553HZ1#
0xAB,0xFC,//00586HZ2
0xDB,0xFC,//00621HZ2#
0x08,0xFD,//00658HZ3
0x33,0xFD,//00697HZ4
0x5B,0xFD,//00739HZ4#
0x81,0xFD,//00783HZ5
0xA5,0xFD,//00830HZ5#
0xC7,0xFD,//00879HZ6
0xE7,0xFD,//00931HZ6#
0x05,0xFE,//00987HZ7
0x21,0xFE,//01045HZ'1
0x3C,0xFE,//01106HZ'1#
0x55,0xFE,//01171HZ'2
0x6D,0xFE,//01241HZ'2#
0x84,0xFE,//01316HZ'3
0x99,0xFE,//01393HZ'4
0xAD,0xFE,//01476HZ'4#
0xC0,0xFE,//01563HZ'5
0x02,0xFE,//01658HZ'5#
0xE3,0xFE,//01755HZ'6
0xE3,0xFE,//01860HZ'6#
0x02,0xFF,//01971HZ'7
};
//定时中断0,用于产生唱歌频率
timer0()interrupt1
{
TL0=tl0_f;
TH0=th0_f;//调入预定时值
BEEP=~BEEP;//取反音乐输出IO
}
//按键控制音阶声音输出(电子琴)
voidmain(void)//主程序
{
ulongn;
ucharcodef[8]={9,11,13,14,16,18,20,21};//1234567`1八个音符在频率表中的位置
TMOD=0x01;//使用定时器0的16位工作模式
TR0=0;
ET0=1;
EA=1;
while
(1)
{
if(!
K1)
{
tl0_f=freq[f[0]*2];//置一个音符的值
th0_f=freq[f[0]*2+1];
TR0=1;
for(n=0;n<8000;n++);//延时
}
if(!
K2)
{
tl0_f=freq[f[1]*2];//置一个音符的值
th0_f=freq[f[1]*2+1];
TR0=1;
for(n=0;n<8000;n++);//延时
}
if(!
K3)
{
tl0_f=freq[f[2]*2];//置一个音符的值
th0_f=freq[f[2]*2+1];
TR0=1;
for(n=0;n<8000;n++);//延时
}
if(!
K4)
{
tl0_f=freq[f[3]*2];//置一个音符的值
th0_f=freq[f[3]*2+1];
TR0=1;
for(n=0;n<8000;n++);//延时
}
if(!
K5)
{
tl0_f=freq[f[4]*2];//置一个音符的值
th0_f=freq[f[4]*2+1];
TR0=1;
for(n=0;n<8000;n++);//延时
}
if(!
K6)
{
tl0_f=freq[f[5]*2];//置一个音符的值
th0_f=freq[f[5]*2+1];
TR0=1;
for(n=0;n<8000;n++);//延时
}
if(!
K7)
{
tl0_f=freq[f[6]*2];//置一个音符的值
th0_f=freq[f[6]*2+1];
TR0=1;
for(n=0;n<8000;n++);//延时
}
if(!
K8)
{
tl0_f=freq[f[7]*2];//置一个音符的值
th0_f=freq[f[7]*2+1];
TR0=1;
for(n=0;n<8000;n++);//延时
}
TR0=0;
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 课程设计 电子琴 按键 演奏