课程设计论文-基于单片机的电子音响设计Word文档格式.doc
- 文档编号:669125
- 上传时间:2023-04-29
- 格式:DOC
- 页数:18
- 大小:354.50KB
课程设计论文-基于单片机的电子音响设计Word文档格式.doc
《课程设计论文-基于单片机的电子音响设计Word文档格式.doc》由会员分享,可在线阅读,更多相关《课程设计论文-基于单片机的电子音响设计Word文档格式.doc(18页珍藏版)》请在冰点文库上搜索。
3硬件系统设计
3.1总体设计
实现这个课题我们使用80C51作为控制主体,系统针对一首曲子进行编码,然后查表播放,乐谱中每一个音符都与某一个特定的频率相对应。
单片机音乐演奏控制通过控制内部定时器T0来产生不同频率的方波,从而驱动喇叭发出不同音符的声音。
模块图如下:
主体控
制模块
时钟模块
放大电路
按钮控制模块
图3-1系统模块图
3.2模块设计
3.2.1主体控制模块
芯片80C51是核心,P0、P1、P2、P3口均可以作为I/O口使用。
P0口接2个按键,分别进行方式选择,控制喇叭发出不同的声音。
图3-2主体控制模块图
3.2.2按键控制模块
按键控制模块采用独立式按键接口设计。
独立式按键是每一个按键占用一根I/O端线。
特点:
各个按键相互独立,电路配置灵活;
按键数量较多时,I/O端线耗费较多,电路复杂;
软件结构简单。
按键去抖动问题:
键盘的抖动时间一般为5~10ms,抖动现象会引起CPU对一次键操作进行多次处理,从而可能产生错误。
软件去抖动:
检测到按键按下后,执行延时子程序后再确认是否确实按下,消除抖动影响。
图3-3按钮控制模块图
3.2.3时钟模块
时钟电路用于产生单片机工作时所需的时钟信号,在芯片的外部通过18脚、19脚接晶体振荡器和微调电容,形成反馈电路,构成一个稳定的自激振荡器。
电路中的C1、C2取30Pf左右,二晶体振荡器的频率范围通常是1.2-12MHZ,晶体振荡器的频率越高,振荡频率越高。
图3-4时钟模块图
3.3硬件设计
使用Protel99SE绘制原理图,绘制相应的原件封装,进行电气规则检查并生成原件清单。
如图3-5。
使用Protel99SE绘制PCB印刷电路板设计,如图3-6。
图3-5Protel硬件连接图
图3-6PCB硬件连接图
使用Proteus仿真软件,根据已经画出的Protel99SE的原理图,绘制出了仿真图,而且在设计的功能的要求的基础上,我又增加了数码管的显示,用于对按键选择的显示功能,以及增加了流水灯的功能,在播放音乐时候,可以进行流水灯的显示,增添了视觉上的效果。
仿真图如下图3-7。
图3-7Proteus仿真图
仿真运行后,按下按键SW2,选择模式1,此时数码管显示“1”,同时流水灯进行花样变化,喇叭可以放出歌曲1,效果如图3-8。
.
图3-8Proteus仿真运行图
4软件设计
4.1音调和节拍
4.1.1音调与频率
一般说来,单片机演奏音乐基本都是单音频率,它不包含相应幅度的谐波频率,也就是说不能象电子琴那样能奏出多种音色的声音。
因此单片机奏乐只需弄清楚两个概念即可,也就是“音调”和“节拍”。
音调表示一个音符唱多高的频率,节拍表示一个音符唱多长的时间。
乐谱中每一个音符都与某一个特定的频率相对应。
调号-音乐上指用以确定乐曲主音高度的符号。
很明显一个八度就有12个半音。
A、B、C、D、E、F、G。
经过研究,全世界都用这些字母来表示固定的音高。
比如,A这个音,标准的音高为每秒钟振动440周。
升C调:
1=#C,也就是降D调:
1=BD;
277(频率)
升D调:
1=#D,也就是降E调:
1=BE;
311
升F调:
1=#F,也就是降G调:
1=BG;
369
升G调:
1=#G,也就是降A调:
1=BA;
415
升A调:
1=#A,也就是降B调:
1=BB。
466,
C262#C277D294#D(bE)311E330F349#F369G392#G415A440.#A466B494
所谓1=A,就是说,这首歌曲的“导”要唱得同A一样高,人们也把这首歌曲叫做A调歌曲,或叫“唱A调”。
1=C,就是说,这首歌曲的“导”要唱得同C一样高,或者说“这歌曲唱C调”。
同样是“导”,不同的调唱起来的高低是不一样的。
在音乐中所谓“音调”,其实就是我们常说的“音高”。
在音乐中常把中央C上方的A音定为标准音高,其频率f=440Hz。
当两个声音信号的频率相差一倍时,也即f2=2f1时,则称f2比f1高一个倍频程,在音乐中1(do)与,2(来)与……正好相差一个倍频程,在音乐学中称它相差一个八度音。
在一个八度音内,有12个半音。
以1—i八音区为例, 12个半音是:
1—#1、#1—2、2—#2、#2—3、3—4、4—#4,#4—5、5一#5、#5—6、6—#6、#6—7、7—i。
这12个音阶的分度基本上是以对数关系来划分的。
如果我们只要知道了这十二个音符的音高,也就是其基本音调的频率,我们就可根据倍频程的关系得到其他音符基本音调的频率。
知道了一个音符的频率后,怎样让单片机发出相应频率的声音呢?
一般说来,常采用的方法就是通过单片机的定时器定时中断,将单片机上对应蜂鸣器的I/O口来回取反,或者说来回清零,置位,从而让蜂鸣器发出声音,为了让单片机发出不同频率的声音,我们只需将定时器予置不同的定时值就可实现。
那么怎样确定一个频率所对应的定时器的定时值呢?
以标准音高A为例:
A的频率f=440Hz,其对应的周期为:
T=1/f=1/440=2272μs
单片机上对应蜂鸣器的I/O口来回取反的时间应为:
t=T/2=2272/2=1136μs
这个时间t也就是单片机上定时器应有的中断触发时间。
一般情况下,单片机奏乐时,其定时器为工作方式1,它以振荡器的十二分频信号为计数脉冲。
设振荡器频率为f0,则定时器的予置初值由下式来确定:
t=12*(TALL–THL)/f0
式中TALL=216=65536,THL为定时器待确定的计数初值。
因此定时器的高低计数器的初值为:
TH=THL/256=(TALL–t*f0/12)/256
TL=THL%256=(TALL–t*f0/12)%256
将t=1136μs代入上面两式(注意:
计算时应将时间和频率的单位换算一致),即可求出标准音高A在单片机晶振频率f0=12Mhz,定时器在工作方式1下的定时器高低计数器的予置初值为:
TH440Hz=(65536–1136*12/12)/256=FBH
TL440Hz=(65536–1136*12/12)%256=90H
根据上面的求解方法,我们就可求出其他音调相应的计数器的予置初值。
4.1.2节拍与周期
音符的节拍我们可以举例来说明。
在一张乐谱中,我们经常会看到这样的表达式,如1=C、1=G……等等,这里1=C,1=G表示乐谱的曲调,和我们前面所谈的音调有很大的关联,、就是用来表示节拍的。
以为例加以说明,它表示乐谱中以四分音符为节拍,每一小结有三拍。
比如:
其中1、2为一拍,3、4、5为一拍,6为一拍共三拍。
1、2的时长为四分音符的一半,即为八分音符长,3、4的时长为八分音符的一半,即为十六分音符长,5的时长为四分音符的一半,即为八分音符长,6的时长为四分音符长。
那么一拍到底该唱多长呢?
一般说来,如果乐曲没有特殊说明,一拍的时长大约为400—500ms。
我们以一拍的时长为400ms为例,则当以四分音符为节拍时,四分音符的时长就为400ms,八分音符的时长就为200ms,十六分音符的时长就为100ms。
可见,在单片机上控制一个音符唱多长可采用循环延时的方法来实现。
首先,我们确定一个基本时长的延时程序,比如说以十六分音符的时长为基本延时时间,那么,对于一个音符,如果它为十六分音符,则只需调用一次延时程序,如果它为八分音符,则只需调用二次延时程序,如果它为四分音符,则只需调用四次延时程序,依次类推。
通过上面关于一个音符音调和节拍的确定方法,我们就可以在单片机上实现演奏音乐了。
具体的实现方法为:
将乐谱中的每个音符的音调及节拍变换成相应的音调参数和节拍参数,将他们做成数据表格,存放在存储器中,通过程序取出一个音符的相关参数,播放该音符,该音符唱完后,接着取出下一个音符的相关参数……,如此直到播放完毕最后一个音符,根据需要也可循环不停地播放整个乐曲。
另外,对于乐曲中的休止符,一般将其音调参数设为FFH,FFH,其节拍参数与其他音符的节拍参数确定方法一致,乐曲结束用节拍参数为00H来表示。
下面给出部分音符(三个八度音)的频率以及以单片机晶振频率f0=12Mhz,定时器在工作方式1下的定时器高低计数器的予置初值:
表4-1音调与频率对应表
C调音符
频率Hz
262
277
293
329
349
370
392
440
466
494
TH/TL
F88B
F8F2
F95B
F9B7
FA14
FA66
FAB9
FB03
FB4A
FB8F
FBCF
FC0B
1
1#
2
2#
3
4
4#
5
5#
6
6#
7
523
553
586
621
658
697
739
783
830
879
931
987
FC43
FC78
FCAB
FCDB
FD08
FD33
FD5B
FD81
FDA5
FDC7
FDE7
FE05
1045
1106
1171
1241
1316
1393
1476
1563
1658
1755
1860
1971
FB21
FE3C
FE55
FE6D
FE84
FE99
FEAD
FEC0
FE02
FEE3
FEF3
FF02
4.2软件设计流程
T0初始化并开中断允放T0中断
装入音符到T值到T0
读取按键值
开始启动
启动T0工作
停止T0工作
T0中断入口
重装TH0,TL0初值
中断返回
图4-1软件设计流程图
4.3源程序代码
#include<
reg51.h>
#include<
intrins.h>
unsignedcharCount;
unsignedcharkeys;
sbit_Speak=P3^4;
//喇叭控制脚
#defineledP2//数码管
unsignedcharpattern_P2[]={
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFC,0xF9,0xF3,0xE7,0xCF,0x9F,0x3F,0xFF,0xAA,0x55,0x18,0xFF,0xF0,0x0F,0x00,0xFF,0xF8,0xF1,0xE3,0xC7,0x8F,0x1F,0x3F,0x7F,0x7F,0x3F,0x1F,0x8F,0xC7,0xE3,0xF1,0xF8,0xFF,0x00,0x00,0xFF,0xFF,0x0F,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,0x00,0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF};
unsignedcharcodeSONG1[]={//祝你平安
0x26,0x20,0x20,0x20,0x20,0x20,0x26,0x10,0x20,0x10,0x20,0x80,0x26,0x20,0x30,0x20,
0x30,0x20,0x39,0x10,0x30,0x10,0x30,0x80,0x26,0x20,0x20,0x20,0x20,0x20,0x1c,0x20,
0x20,0x80,0x2b,0x20,0x26,0x20,0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x80,0x26,0x20,
0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x60,0x40,0x10,0x39,0x10,0x26,0x20,
0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x80,0x26,0x20,0x2b,0x10,0x2b,0x10,
0x2b,0x20,0x30,0x10,0x39,0x10,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x20,
0x20,0x10,0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x18,0x20,0x18,0x20,0x26,0x20,
0x20,0x20,0x20,0x40,0x26,0x20,0x2b,0x20,0x30,0x20,0x30,0x20,0x1c,0x20,0x20,0x20,
0x20,0x80,0x1c,0x20,0x1c,0x20,0x1c,0x20,0x30,0x20,0x30,0x60,0x39,0x10,0x30,0x10,
0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x10,0x26,0x10,0x26,0x10,0x2b,0x10,0x2b,0x80,
0x18,0x20,0x18,0x20,0x26,0x20,0x20,0x20,0x20,0x60,0x26,0x10,0x2b,0x20,0x30,0x20,
0x30,0x20,0x1c,0x20,0x20,0x20,0x20,0x80,0x26,0x20,0x30,0x10,0x30,0x10,0x30,0x20,
0x39,0x20,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x10,0x40,0x10,0x20,0x10,
0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x00,};
unsignedcharcodeSONG2[]={//路边的野花不要采
0x1C,0x10,0x18,0x10,0x20,0x10,0x1C,0x10,0x18,0x40,0x1C,
0x20,0x20,0x20,0x1C,0x20,0x18,0x20,0x20,0x80,0xFF,0x20,0x30,0x1C,0x10,0x18,0x20,
0x15,0x20,0x1C,0x20,0x20,0x20,0x26,0x40,0x20,0x20,0x2B,0x20,0x26,0x20,0x20,0x20,
0x30,0x80,0xFF,0x20,0x20,0x1C,0x10,0x18,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,
0x20,0x2B,0x40,0x20,0x20,0x1C,0x10,0x18,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,
0x20,0x2B,0x40,0x20,0x30,0x1C,0x10,0x18,0x20,0x15,0x20,0x1C,0x20,0x20,0x20,0x26,
0x40,0x20,0x20,0x2B,0x20,0x26,0x20,0x20,0x20,0x30,0x80,0x20,0x30,0x1C,0x10,0x20,
0x10,0x1C,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,0x20,0x2B,0x40,0x20,0x15,0x1F,
0x05,0x20,0x10,0x1C,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,0x20,0x2B,0x40,0x20,
0x30,0x1C,0x10,0x18,0x20,0x15,0x20,0x1C,0x20,0x20,0x20,0x26,0x40,0x20,0x20,0x2B,
0x20,0x26,0x20,0x20,0x20,0x30,0x30,0x20,0x30,0x1C,0x10,0x18,0x40,0x1C,0x20,0x20,
0x20,0x26,0x40,0x13,0x60,0x18,0x20,0x15,0x40,0x13,0x40,0x18,0x80,0x00,
};
voidTime_Init()
{
TMOD=0x11;
IE=0x8a;
IP=0x02;
TH0=0xD8;
TL0=0xEF;
//12MZ晶振,10ms
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
TR1=1;
}
voidTime0_Int()interrupt1
TH0=0xD8;
TL0=0xEF;
Count++;
//长度加1
voidTime0_LED()interrupt3
staticunsignedcharL_Count=0,n=0;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
if(++L_Count==5)
{
L_Count=0;
led=pattern_P2[n++];
n%=104;
}
/*-------------------------------------------------
功能:
1MS延时子程序
-------------------------------------------------*/
voidDelay_xMs(unsignedintx)
unsignedinti,j;
for(i=0;
i<
x;
i++)
{
for(j=0;
j<
3;
j++);
}
歌曲播放子程序i为播放哪一段曲目
voidPlay_Song1(unsignedchari)
unsignedcharTemp1,Temp2;
unsignedintAddr;
//P0=0xc0;
P0=0xf9;
Count=0;
//中断计数器清0
Addr=i*217;
while
(1)
{
Temp1=SONG1[Addr++];
if(Temp1==0xFF)//休止符
{
TR0=0;
Delay_xMs(100);
}
elseif(Temp1==0x00)//歌曲结束符
return;
else
Temp2=SONG1[Addr++];
TR0=1;
while
(1)
_Speak=~_Speak;
Delay_xMs(Temp1);
if(Temp2==Count)
{
Count=0;
break;
}
}
}
voidPlay_Song2(unsignedchari)
P0=0xa4;
Temp1=SONG2[Addr++];
if(Temp1==0xFF)//
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 论文 基于 单片机 电子 音响 设计