选择分类:当前分类——当前分类
本站推荐:
单片机演奏音乐的实现
文章长度[] 加入时间[2007/7/14] 更新时间[2024/9/8 20:54:59] 级别[0] [评论] [收藏]

 

      要单片机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

音符 频率(Hz) 简码(N值) 音符 频率(Hz) 简码(N值)
低1     262 F117H #4 740 FAB8H
#1 277 F1E5H 中5 784 FB04H
低2 294 F2B6H #5 831 FB4CH
#2 311 F370H 中6 880 FB8FH
低3 330 F429H #6 932 FBCFH
低4 349 F4CEH 中7 988 FC0BH
#4 370 F571H 高1 1046 FC43H
低5 392 F608H #1 1109 FC7AH
#5 415 F696H 高2 1175 FCACH
低6 440 F71FH #2 1245 FCDCH
#6 466 F79EH 高3 1318 FDO9H
低7 494 F817H 高4 1397 FD34H
中1 523 F887H #4 1480 FD5CH
#1 554 F8F2H 高5 1568 FD82H
中2 578 F93DH #5 1661 FDA5H
#2 622 F9B8H 高6 1760 FDC7H
中3 659 FA12H #6 1865 FDE7H
中4 698 FA67H 高7 1976 FE05H

表2

音符 简码 N值 存储地址
F71FH TAB
F93DH TAB+2
FA12H TAB+4
FA67H TAB+6

表3

音符 节拍 代码 存储地址
2/4 12H TAB1
2/4 32H TAB1+1
2/4 42H TAB1+2
2/4 32H TAB1+3
4/4 24H TAB1+4
4/4 14H TAB1+5
1、 本站不保证以上观点正确,就算是本站原创作品,本站也不保证内容正确。
2、如果您拥有本文版权,并且不想在本站转载,请书面通知本站立即删除并且向您公开道歉! 以上可能是本站收集或者转载的文章,本站可能没有文章中的元件或产品,如果您需要类似的商品请 点这里查看商品列表!