基于单片机的电子琴设计.docx
- 文档编号:1971635
- 上传时间:2023-05-02
- 格式:DOCX
- 页数:30
- 大小:905.02KB
基于单片机的电子琴设计.docx
《基于单片机的电子琴设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的电子琴设计.docx(30页珍藏版)》请在冰点文库上搜索。
基于单片机的电子琴设计
单片机综合实验
实验报告
学院计算机与电子信息学院
专业班级
姓名学号
实验题目电子琴的设计
系统环境Proteus指导教师左敬龙
实验时间年月日至年月日
实验报告评分:
_______
题目:
电子琴的设计
摘要:
单片微型计算机是大规模集成电路技术发展的产物,属第四代电子计算机,它具有高性能、高速度、体积小、价格低廉、稳定可靠、应用广泛的特点。
它的应用必定导致传统的控制技术从根本上发生变革。
因此,单片机的开发应用已成为高科技和工程领域的一项重大课题。
电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。
它在现代音乐扮演着重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。
本文的主要内容是用AT89S52单片机为核心控制元件,设计一个电子琴。
以单片机作为主控核心,与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有10个按键和扬声器。
利用单片机产生不同频率来获得我们要求的音阶,最终可随意弹奏想要表达的音乐。
关键词:
电子琴、单片机、AT89S52、独立键盘、扬声器。
1引言
1.1电子琴概述
电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。
它在现代音乐扮演着重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。
本文的主要内容是用AT89S51单片机为核心控制元件,设计一个电子琴。
以单片机作为主控核心,与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有10个按键和扬声器。
利用单片机产生不同频率来获得我们要求的音阶,最终可随意弹奏想要表达的音乐。
并且本文分别从原理图,主要芯片,各模块原理及各模块的程序的调试来详细阐述。
本系统是简易电子琴的设计,按下键盘中的按键会使LED显示当前按键,扬声器播放对应的音符。
通过设计本系统可了解单片机的基本功能,同时对单片机有更深的认识。
1.2任务与要求
基本要求:
1)设计出7个音符,随意弹奏。
音阶
1
2
3
4
5
6
7
频率(HZ)
261.1
293.7
329.6
349.2
392.0
440.0
493.9
2)用功能键转换成歌曲演奏,可播放预存的音乐(乐曲自定,乐曲演奏时间自定)。
扩充要求:
3)显示乐曲播放时间或剩余时间。
4)可存储现场弹奏的音乐。
1.3主要芯片简介
AT89S52是一个低功耗,高性能CMOS8位单片机,片内含8kBytesISP(In-systemprogrammable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元,功能强大的微型计算机的AT89S52可为许多嵌入式控制应用系统提供高性价比的解决方案。
2总体设计方案
2.1设计思路
本设计以AT89S52单片机为核心控制元件,利用单片机内部定时器产生音频脉冲,经三极管功率放大电路放大音频信号后送到扬声器输出,通过独立式按键识别输入,可以演奏8个不同的音符,并且单片机内置了6首不同的歌曲,通过播放和停止按键可以进行音乐的循环顺序播放和停止,同时对应的LED灯点亮显示相应的音阶。
2.2设计方框图
DU
3设计原理分析
3.1音阶的设计
一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。
若要产生音频脉冲,只要算出某一音频的周期(1/频率),再将此周期除以2,即为半周期的时间。
利用定时器计时半周期时间,每当计时终止后就将P0.2反相,然后重复计时再反相。
就可在P0.2引脚上得到此频率的脉冲。
利用AT89S51的内部定时器使其工作计数器模式(MODE1)下,改变计数值TH0及TL0以产生不同频率的方法产生不同音阶,例如,频率为523Hz,其周期T=1/523=1912μs,因此只要令计数器计时956μs/1μs=956,每计数956次时将I/O反相,就可得到中音DO(523Hz)。
计数脉冲值与频率的关系式(如式4-7所示)是:
N=fi÷2÷fr 4-7
式中,N是计数值;fi是机器频率(晶体振荡器为12MHz时,其频率为1MHz);fr是想要产生的频率。
其计数初值T的求法如下:
T=65536-N=65536-fi÷2÷fr
例如:
设K=65536,fi=1MHz,求低音DO(261Hz)、中音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=65059
单片机12MHZ晶振,高中低音符与计数T0相关的计数值如表4-8所示
音符
频率(HZ)
简谱码(T值)
音符
频率(HZ)
简谱码(T值)
低1 DO
262
63628
#4FA#
740
64860
#1 DO#
277
63731
中5SO
784
64898
低2 RE
294
63835
#5SO#
831
64934
#2RE#
311
63928
中6LA
880
64968
低3M
330
64021
#6
932
64994
低4FA
349
64103
中7SI
988
65030
#4FA#
370
64185
高1DO
1046
65058
低5SO
392
64260
#1DO#
1109
65085
#5SO#
415
64331
高2RE
1175
65110
低6LA
440
64400
#2RE#
1245
65134
#6
466
64463
高3M
1318
65157
低7SI
494
64524
高4FA
1397
65178
中1DO
523
64580
#4FA#
1480
65198
#1DO#
554
64633
高5SO
1568
65217
中2RE
587
64684
#5SO#
1661
65235
#2RE#
622
64732
高6LA
1760
65252
中3M
659
64777
#6
1865
65268
中4FA
698
64820
高7SI
1967
65283
表4-8音符频率表
我们要为这个音符建立一个表格,单片机通过查表的方式来获得相应的数据
低音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
DW0,64633,64732,0,64860,64934,64994,0,0,0
DW0,65058,65110,65157,65178,65217,65252,65283,0,0
DW0,65085,65134,0,65198,65235,65268,0,0,0
DW0
音乐的音拍,一个节拍为单位(C调)(如表4-9所示)
曲调值
DELAY
曲调值
DELAY
调4/4
125ms
调4/4
62ms
调3/4
187ms
调3/4
94ms
调2/4
250ms
调2/4
125ms
表4-9曲调值表
对于不同的曲调我们也可以用单片机的另外一个定时/计数器来完成。
3.2按键电路的设计
由于本电子琴设计只需要发生8个音阶,只需要8个键盘识别,占用单片机I/O口资源比较少,而且本设计中I/O口资源充足,足以满足键盘占用I/O口数据线的需求。
综合上述本设计最终选用了独立式键盘识别电路。
按按键S1-S8,喇叭依次发出1、2、3、4、5、6、7、8等八个音符。
3.3音乐播放电路的设计
3.4功放电路的设计
电路选择用三极管放大,需要元器件很少,只需要一个电阻和一个三极管放大管,成本很低。
3.5指示灯电路的设计
按S1-S8按键,对应着点亮D1-D8彩灯。
3.6总电路图
4结束语
通过本周的综合实验实习,我学到了不少课本上没有的知识,也锻炼了自己的动手能力,将以前学过的零散的知识串到一起。
我的综合实验主要涉及仿真和实物搭建两方面的内容,通过这些我两方面的能力都获得了提高。
首先仿真方面,基本熟悉了Proteus的设计流程和所要做的工作。
实物搭建方面,让我的焊接电路板的能力得到了很大的提高,对功放电路也有了深刻的理解,熟悉了一些单片机常用的外围电路引脚和连接方法,如LED,键盘,扬声器等。
参考文献
[1]郭天祥.单片机学习资料.机械电子工业出版社,2007
[2]马忠梅等.单片机的C语言应用程序设计.北京航空航天大学出版社,2006
[3]余发山等.单片机原理及应用技术.中国矿业大学出版社,2008
[4]谭浩强.C语言程序设计(第三版).清华大学出版社,2005
[5]艾永乐等.模拟电子技术基础.中国电力出版社,2008
[6]尹文庆等.数字电子技术基础.中国电力出版社,2008
附录:
源程序代码
#include
#defineucharunsignedchar
#defineuintunsignedint
#define__SOUNDPLAY_H_
#defineSYSTEM_OSC12000000//定义晶振频率12000000HZ
#defineSOUND_SPACE3/4//定义普通音符演奏的长度分率,//每4分音符间隔
sbitkey1=P2^0;
sbitkey2=P2^1;
sbitkey3=P2^2;
sbitkey4=P2^3;
sbitkey5=P2^4;
sbitkey6=P2^5;
sbitkey7=P2^6;
sbitkey8=P2^7;
sbitkey9=P0^5;//切换音乐
sbitBeepIO=P0^2;//定义音频输出管脚
sbitK1=P0^6;//暂停
unsignedcharcodeled[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//发光二极管显示
unsignedcharcount,yinjie,dd,m;
unsignedintcodeFreTab[12]={262,277,294,311,330,349,369,392,415,440,466,494};//原始频率表
unsignedcharcodeSignTab[7]={0,2,4,5,7,9,11};//1~7//在频率表中的位置
unsignedcharcodeLengthTab[7]={1,2,4,8,16,32,64};
unsignedcharSound_Temp_TH0,Sound_Temp_TL0;//音符定时器初值暂存
unsignedcharSound_Temp_TH1,Sound_Temp_TL1;//音长定时器初值暂存
voidInitialSound(void)
{
BeepIO=0;
Sound_Temp_TH1=(65535-(1/1200)*SYSTEM_OSC)/256;//计算TL1应装入的初值(10ms的初装值)
Sound_Temp_TL1=(65535-(1/1200)*SYSTEM_OSC)%256;//计算TH1应装入的初值
TH1=Sound_Temp_TH1;
TL1=Sound_Temp_TL1;
TMOD|=0x11;
ET0=1;
ET1=0;
TR0=0;
TR1=0;
EA=1;
}
voidBeepTimer0(void)interrupt1//音符发生中断
{
BeepIO=!
BeepIO;
TH0=Sound_Temp_TH0;
TL0=Sound_Temp_TL0;
}
voidPlay(unsignedchar*Sound,unsignedcharSignature,unsignedOctachord,unsignedintSpeed)
{
unsignedintNewFreTab[12];//新的频率表
unsignedchari,j;
unsignedintPoint,LDiv,LDiv0,LDiv1,LDiv2,LDiv4,CurrentFre,Temp_T,SoundLength;
unsignedcharTone,Length,SL,SH,SM,SLen,XG,FD;
for(i=0;i<12;i++)//根据调号及升降八度来生成新的频率表
{
j=i+Signature;
if(j>11)
{
j=j-12;
NewFreTab[i]=FreTab[j]*2;
}
else
NewFreTab[i]=FreTab[j];
if(Octachord==1)
NewFreTab[i]>>=2;
elseif(Octachord==3)
NewFreTab[i]<<=2;
}
SoundLength=0;
while(Sound[SoundLength]!
=0x00)//计算歌曲长度
{
SoundLength+=2;
}
Point=0;
Tone=Sound[Point];
Length=Sound[Point+1];//读出第一个音符和它时时值
LDiv0=12000/Speed;//算出1分音符的长度(几个10ms)
LDiv4=LDiv0/4;//算出4分音符的长度
LDiv4=LDiv4-LDiv4*SOUND_SPACE;//普通音最长间隔标准
TR0=0;
TR1=1;
while(Point { SL=Tone%10;//计算出音符 SM=Tone/10%10;//计算出高低音 SH=Tone/100;//计算出是否升半 CurrentFre=NewFreTab[SignTab[SL-1]+SH];//查出对应音符的频率 dd=SignTab[SL-1]+SH; for(m=1;m<8;m++) { if(dd==SignTab[m]) { yinjie=m; } elseif(dd==LengthTab[m]) { yinjie=m; } P3=led[yinjie]; } if(SL! =0) { if(SM==1)CurrentFre>>=2;//低音 if(SM==3)CurrentFre<<=2;//高音 Temp_T=65536-(50000/CurrentFre)*10/(12000000/SYSTEM_OSC);//计算计数器初值 Sound_Temp_TH0=Temp_T/256; Sound_Temp_TL0=Temp_T%256; TH0=Sound_Temp_TH0; TL0=Sound_Temp_TL0+12+28;//加12是对中断延时的补偿 } SLen=LengthTab[Length%10];//算出是几分音符 XG=Length/10%10;//算出音符类型(0普通1连音2顿音) FD=Length/100; LDiv=LDiv0/SLen;//算出连音音符演奏的长度(多少个10ms) if(FD==1) LDiv=LDiv+LDiv/2; if(XG! =1) if(XG==0)//算出普通音符的演奏长度 if(SLen<=4) LDiv1=LDiv-LDiv4; else LDiv1=LDiv*SOUND_SPACE; else LDiv1=LDiv/2;//算出顿音的演奏长度 else LDiv1=LDiv; if(SL==0)LDiv1=0; LDiv2=LDiv-LDiv1;//算出不发音的长度 if(SL! =0) { TR0=1; for(i=LDiv1;i>0;i--)//发规定长度的音 { while(TF1==0); TH1=Sound_Temp_TH1; TL1=Sound_Temp_TL1; TF1=0; } } if(LDiv2! =0) { TR0=0;BeepIO=0; for(i=LDiv2;i>0;i--)//音符间的间隔 { while(TF1==0); TH1=Sound_Temp_TH1; TL1=Sound_Temp_TL1; TF1=0; } } Point+=2; Tone=Sound[Point]; Length=Sound[Point+1]; } BeepIO=0; } //#endif unsignedcharcodeMusic_1[]={0x15,0x02,0x00,0x00}; unsignedcharcodeMusic_2[]={0x16,0x02,0x00,0x00}; unsignedcharcodeMusic_3[]={0x17,0x02,0x00,0x00}; unsignedcharcodeMusic_4[]={0x18,0x02,0x00,0x00}; unsignedcharcodeMusic_5[]={0x19,0x02,0x00,0x00}; unsignedcharcodeMusic_6[]={0x1A,0x02,0x00,0x00}; unsignedcharcodeMusic_7[]={0x1B,0x02,0x00,0x00}; unsignedcharcodeMusic_8[]={0x1F,0x02,0x00,0x00}; unsignedcharcodeMusic_9[]={0x20,0x02,0x00,0x00}; //音符代码: //梁祝 unsignedcharcodeMusic_Liangzhu[]= {0x1B,0x02,0x1A,0x02,0x1B,0x02,0x19,0x66,0x1A,0x03, 0x18,0x02,0x17,0x02,0x16,0x0D,0x17,0x03,0x18,0x0D, 0x17,0x03,0x19,0x66,0x17,0x03,0x16,0x0D,0x17,0x03, 0x19,0x0D,0x16,0x03,0x17,0x0D,0x18,0x03,0x17,0x0D, 0x16,0x03,0x15,0x00,0x19,0x02,0x11,0x02,0x16,0x02, 0x10,0x02,0x15,0x02,0x0F,0x00,0x10,0x03,0x15,0x03, 0x0F,0x00,0x0D,0x01,0x0F,0x66,0x10,0x03,0x15,0x66, 0x16,0x03,0x10,0x0D,0x15,0x03,0x0F,0x03,0x19,0x66, 0x1F,0x03,0x1A,0x0D,0x19,0x03,0x17,0x03,0x19,0x03, 0x16,0x00,0x16,0x66,0x17,0x03,0x11,0x0C,0x10,0x02, 0x19,0x66,0x10,0x03,0x15,0x02,0x16,0x02,0x0D,0x02, 0x15,0x02,0x10,0x0D,0x0F,0x03,0x10,0x0D,0x15,0x03, 0x0F,0x00,0x17,0x66,0x19,0x03,0x11,0x02,0x16,0x02, 0x10,0x0D,0x15,0x03,0x0F,0x15,0x0D,0x03,0x0F,0x02, 0x0D,0x03,0x0F,0x0D,0x10,0x03,0x11,0x0D,0x16,0x03, 0x10,0x00,0x0F,0x0D,0x10,0x03,0x15,0x66,0x16,0x03, 0x19,0x02,0x17,0x02,0x16,0x02,0x17,0x0D,0x16,0x03, 0x15,0x02,0x10,0x0D,0x0F,0x03,0x0D,0x01,0x15,0x01, 0x10,0x03
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 电子琴 设计
![提示](https://static.bingdoc.com/images/bang_tan.gif)