单片机唱歌任我行――浅谈单片机唱歌的汇编程序
单片机的应用目前已经渗透到触手可及的领域。在音响产品中的应用早已经比比皆是,它不公可以用来制作电子琴,混响器等,音响器材中储存的国歌、报警声等乐曲也是单片机奏乐的应用。有很多人觉得单片机奏乐很神秘,其它单片机奏乐的硬件很简单,只是软件有点复杂。常见的单片机唱歌汇编只介绍C调歌曲的编制方法,适合范围窄,本文从初学者的角度出发,教您学会编制单片机程序方法。本文程序笔者用Proteus 7.6软件仿真成功,用自制的ISP下载线下载到用万能板制作的AT89S52单片机实验板上也试验成功。
一、单片机演奏音乐的方法
}1. 单片机发声的原理
声音的频谱范围大约在几十赫兹到几千赫兹,若用程序控制单片机I/O口,使其输出一定频率的矩形波,经放大电路放大,就可以驱动喇叭或蜂鸣器女出一定频率的声音。具体地要产生音频脉冲,只要知道某一音频的频率,就可以算出其周期(频率的倒数),除以2得到半周期。利用单片机的定时器计时这半周期的时间,计时到后将脉冲倒相后从I/O口输出,然后重复计时此半个周期 时间再对I/O倒相,就可以在I/O口上得到此频率的脉冲。51单片机内部定时/计数器计数,工作于模式1,最大计算次数为65536,所以要选择模式1,改变T值,在I/O脚得到不同频率的脉冲。
2. T值计算方法如下:
T=65536-Fi/2/Fr
注:Fi:因单片机晶振频率为12MHz;若单片机晶振为1us,所以Fi=1000000Hz;若单片机晶振为6MHz,计时一次为2us,所以Fi=500000Hz;
Fr为要产生的频率:例如单片机晶振为12MHz,C调的低音1频率为262Hz,根据上述T值的计算公式可求得T=63628,转换为16进制是F88CH。
3. 如何得到不同音调下音符的T值
根据音乐知识知道十二平均律以八度中分出十个等程半音调从低到高依次是C、C#……。调与#C调音高相同,就是bD调与#D调音高相同……。每个等程半音的音程是2/12=1.0593631,即相邻两个音调的相同音符的频率半系是:音调高的是低的2/12倍。这个规律适用于钢琴的所有键盘。钢琴键盘(88个)自左向右(频率逐渐升高)。
(未完待续)