课程设计:嵌入式系统应用
姓名:
学号:
班级:
1设计的任务
设计目标:利用单片机上的蜂鸣器实现音乐播放功能
2设计的过程
基本结构
在本次的试验中采用了STC89C52RC单片机,STC89C52RC单片机是宏晶科技推出的新一代高速/低功耗/超强抗干扰的单片机,指令代码完全兼容传统8051单片机,12时钟/机器周期,工作电压:~5V单片机/~3V单片机,工作频率范围:0~40MHz,相当于普通8051的0~80MHz,实际工作频率可达48MHz,用户应用程序空间为8K字节; STC89C52RC引脚图
STC89C52RC单片机的工作模式:
(1)典型功耗<μA,可由外部中断唤醒,中断返回后,继续执行原程序
(2)空闲模式:典型功耗2mA
(3)正常工作模式:典型功耗4Ma~7mA
4唤醒,适用于水表、气表等电池供电系统及便携设备
2.蜂鸣器及其工作原理:
蜂鸣器按其结构分主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型;电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成;接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场,振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声;本实验采用的是电磁式蜂鸣器;
蜂鸣器按其是否带有信号源又分为有源和无源两种类型;有源蜂鸣器只需要在其供电端加上额定直流电压,其内部的震荡器就可以产生固定频率的信号,驱动蜂鸣器发出声音;无源蜂鸣器可以理解成与喇叭一样,需要在其供电端上加上高低不断变化的电信号才可以驱动发出声音;本实验采用的是有源蜂鸣器;
蜂鸣器与单片机连接电路图
软件设计过程
1.蜂鸣器发声原理
本实验由于采用有源蜂鸣器,只需将引脚端口P3^4清零,蜂鸣器即可发声;P3^4置位,蜂鸣器停止发声;采用置1置0的方法只能使蜂鸣器发声或停止发声,想要使蜂鸣器发出声音,必须对蜂鸣器发出声音的音频和节拍进行控制;
音乐基础
音调:
不同音高的乐音是用C、D、E、F、G、A、B来表示,这7个字母就是音乐的音名,它们一般依次唱成DO、RE、MI、FA、SO、LA、SI,即唱成简谱的1、2、3、4、5、6、7,相当于汉字“多来米发梭拉西”的读音,这是唱曲时乐音的发音,所以叫“音调”,即Tone;把C、D、E、F、G、A、B这一组音的距离分成12个等份,每一个等份叫一个“半音”;两个音之间的距离有两个 “半音”,就叫“全音”;在钢琴等键盘乐器上,C–D、D–E、F–G、G–A、A–B两音之间隔着一个黑键,他们之间的距离就是全音;E–F、B–C两音之间没有黑键相隔,它们之间的距离就是半音;通常唱成1、2、3、4、5、6、7的音叫自然音,那些在它们的左上角加上﹟号或者b号的叫变化音;﹟叫升记号,表示把音在原来的基础上升高半音,b叫降记音,表示在原来的基础上降低半音;例如高音DO的频率1046Hz刚好是中音DO的频率523Hz的一倍,中音DO的频率523Hz刚好是低音DO频率266Hz的一倍;同样的,高音RE的频率1175Hz刚好是中音RE的频率587Hz的一倍,中音RE的频率587Hz刚好是低音RE频率294www.3x6cHz的一倍;
节拍:
节拍是让音乐具有旋律固定的律动,而且可以调节各个音的快满度;“节拍”,即Beat,简单说就是打拍子,就像我们听音乐不自主的随之拍手或跺脚;若1拍实,则1/4拍为;至于1拍多少s,并没有严格规定,就像人的心跳一样,大部分人的心跳是每分钟72下,有些人快一点,有些人慢一点,只要听的悦耳就好;音持续时间的长短即时值,一般用拍数表示;休止符表示暂停发音;
1)控制发声频率
要产生音频脉冲,只要算出某一音频的周期1/频率,然后将此周期除以2,即为半周期的时间;利用定时器计时这半个周期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚上得到此频率的脉冲;利用STC89C52RC的内部定时器使其工作在计数器模式MODE1下,改变计数值TH0及TL0从而产生不同频率;此外结束符和休止符可以分别用代码00H和FFH来表示,若查表结果为0x00,则表示曲子终了;若查表结果为0xff,则产生相应的停顿效果;
以标准音高A为例,A的频率是440Hz,周期T=1/440=2272us;在占空比为50%的情况下,导通时间=断开时间=半周期t=2272us/2=1136us,利用P3^4端口的位操作,经过不断地反相变换即可得到标准音高A的音频脉冲;端口导通时间与断开时的时间利用定时器实现;具体的方法是将单片机定时器的中断触发时间设为半周期t,这样每隔半周期端口反相,输出连续的对应音高的频率;
设晶振的频率为f0,中断触发时间半周期为t,定时器工作在模式1时计数器的初值为THL,高8位为THL,低8位为TL;时钟周期即为1/f0,定时器每一次累加用去一个机器周期,一个机器周期包含12个时钟周期,即定时器每次加一所用时间是12/f0;定时器在模式1下计时采用16位数,最大计数为2^16-165535,再次加一65536溢出触发中断;根据以上分析可得如下关系:
音频对应定时器初值的高8位TH=THL/2^8=65536-tf/12/256;
音频对应定时器初值的低8位TL=THL%2^8=65536-tf/12%256;
附:八度12音阶定时器初值表只含自然音
低音音名 | 频率Hz | 晶振12MHz | 晶振 | 中音音名 | 频率Hz | 晶振12MHz | 晶振 | 高音音名 | 频率Hz | 晶振12MHz | 晶振 |
Do | 262 | 0xF885 | 0xF91B | Do | 523 | 0xFC43 | 0xFC8E | Do | 1046 | 0xFE21 | 0xFE47 |
METLERTOLEDORe | 294 | 干燥炉 0xF95A | 0xF9DF | Re | 587 | 0xFCAD | 0xFCED | Re | 1175 | 0xFE56 | 0xFE76 |
Mi | 330 | 0xFA13 | 0xFA8A | Mi | 659 | 0xFD0A | 0xFD43 | Mi | 1318 | 0xFE85 | 0xFEA1 |
Fa | 349 | 0xFA68 | 0xFAD8 | Fa | 698 | 0xFD34 | 0xFD6A | Fa | 1397 | 0xFE9A | 0xFEC7 |
So | 392 | 0xFB04 | 0xFB68 | So | 784 | 0xFD82 | 0xFDB3 | So | 1568 | 0xFEC1 | 0xFED9 |
La | 440 | 0xFB90 | 0xFBE9 | La | 880 | 0xFDC8 | 0xFDF3 | La | 1760 | 0xFEE4 | 0xFEF9 |
Si | 494 | 0xFC0C | 0xFC5B | Si | 988 | 0xFE06 | 0xFE2D | Si | 1976 | 0xFF03 | 0xFF16 |
| | | | | | | | | | | |
2控制发声节拍
每个音符的节拍可通过延时一定的时间来实现,在具体实现时需要有一个基本的带参延时程序,用于主函数根据不同的音符调用不同的时延;若以十六分之一音符的时长为基本延时时间,则十六分音符只需调用一次延时程序,八分音符则需调用两次延时程序,以此类推;
3)简谱及其编码
简谱知识
音阶 | C | D | E | F | 六类网线做法G | A | B |
唱名 | do | re | 哺乳衣mi | fa | so | la | si |
数字 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| | | | | | | |
音符
用数字1至7表示;这7个数字就等于的;如果是C大调,加上音名,就会是这样:
八度
如果是高一个八度,就会在数字上方加上一点;如果是低一个八度,就会数字下方加上一点;在中间的那一个就什么也不用加;如果要再高一个八度,就在上方垂直加上两点如:;要再低一个八度,就在下方垂直加上两点如:,如此类推;见下表所示:
音长