单片机演奏音乐的实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机演奏音乐的实现
要单片机8031产生音频脉冲,只要算出某一音频的周期,然后用计数器计数1/2 此周期,计时到即将输出脉冲的I/O管脚反相,再重计时输出,既可在此I/O管脚得到此音频的脉冲。
用8031内部定时/计数器计数,使其工作于模式1,要得到不同频率的音频信号,只要改变其计数值即可。如要产生频率为f的音频信号,计数器计数如下:
N=2-10/f(采用6M晶振)
表1为C调各音符频率与计数值N的对照表
一、硬件
用广州单片机实验室设计开发的ZH5101单板机,从其扩展口P1口的P1.0管脚拉出一根线,外加如右下图所示的电路,就做成了会奏乐的单片机。
二、软件设计
要输出某一曲调,必须知道此曲调所包括的音符以及每个音符所占的节拍。本软件将一个音符用一个字节的代码表示。字节高四位代表简码,低四位代表音符的节拍数,设1/4拍所占时间为T,则一个节拍的时间为4T,如某一音符节拍为2/4拍,则声音的延续时间为2T,在2T时间里,P1.0输出的即为此音符的音频脉冲。
为使读者能进一步了解此软件的设计思想,现举例如下:
如要输出曲调|63 43 26|,此谱只有4个音符,可先对这4个音符建一计数值表TAB如表2,再根据每个音符的简码号极其节拍数依次将其代码存于TAB1地址开始的存储单元,高四位存简码号,低四位存节拍。如6的简码号为1,节拍数为2/4,即2T,则写入的数据代码为12H,高四位为1,低四位为2(2T),这样根据以上曲调从TAB1开始处依次写入:12H,32H,42H,32H,24H,14H便组成了音符代码表(表3)。
程序运行时,从代码表中依次读出各音符代码,根据高位的简码号从TAB表中取出相应的计数值送THO TLO,再根据低位的节拍数确定每个音符相应的延时时间。本程序流程图如下:如果读者手头没有单片机实验板,不妨向本站邮购。邮购价:¥110(包括邮费)
表1
表2
表3