音符频率——精选推荐
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
音符频率
1.音符频率概念
一般来说,单片机演奏音乐基本都是单音频率,它不包含相应幅度的谐波频率,也就是说不能像电子琴那样奏出多种音色的声音。
因此单片机奏乐只需要弄清楚两个概念即可,也就是“音调”和“节拍”。
音调表示一个音符唱多高的频率,节拍表示一个音符唱多长的时间。
在音乐中所谓音调。
其实就是我们通常说的“音高”,也就是其基本音调的频率,知道了一个音符的频率以后。
怎样让单片机发出相应频率的声音呢?
2.利用定时器/计数器0产生音符频率
一般来说,常采用的方法就是通过单片机的定时器定时中断,将单片机上对应扬声器的I/O口来回取反,从而让扬声器发出声音,为了让单片机发出不同频率的声音,我们只需将定时器预置不同的定时初值就可实现。
那么怎样确定一个频率所对应的定时器的定时值呢?方法如下:
例如:
中音1(DO)的频率=523Hz,周期T=1/523s=1912us;
定时器/计数器0的定时时间为:T/2=1912/2us=956us;
定时956us的计数值=定时时间/机器周期=956us/1us=956(时钟频率=12MHz);装入THO、TLO的计数初值THTL=65536-956=64580.
将64580装入THO、TLO寄存器中,启动T1工作后,每计数956次时将产生溢出中断,进入中断服务程序时,每次对P3.0引脚的输出值进行取反,就可得到中音DO(523Hz)的音符频率。
以下是对应不同音调的音符频率表4-1
表4-1 对应不同音调的音符频率表
3.编码及计数初值
通过上面的分析可见,为了产生音符,必须求出音符C低音到高音的所有计数初值。
例如:C调的低音DO的THTL=65536-500000/262=63627,中音DO 的THTL=65536-500000/523=64580,高音DO的THTL=65536-500000/1047=65059。
为了编程记谱方便,对它们进行简单的音符编码,如表4-2所示,在编程时,歌曲音符用编码记谱,然后根据音符编码查找对应的计数初值。
表4-2音符编码表。