视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
C语言单片机音乐编写
2025-10-03 03:58:36 责编:小OO
文档
音乐是许多不同的音符组成的,而每个音符对应着不同的频率,这样我们利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来说,产生不同的频率非常方便。我们可以利用单片机的定时器/计数器来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系设置正确即可。

若要产生音频脉冲,只要算出某一音频的周期(1/频率),再将此周期除以2,即为半周期的时间。利用定时器计时半周期时间,每当计时终止后就将I/O口反相,然后重复计时再反相。就可以在该I/O口引脚上得到频率的脉冲。

STCC52RC单片机的一个计数周期需要12个时钟周期,采用12MHz晶振,一个计数周期即1us。利用单片机内部的定时器,使其工作计数器模式下,改变计数值TH0及TL0以产生不同频率的方法产生不同音阶。例如,中音DO频率为523Hz,其周期T=1/523=1912us,因此只要令计数器计时956us/1us=956,每计数956次将I/O口反相,就可得到中音DO。

计数脉冲值与频率的关系式是:

N=fi÷2÷fr

式中,N是计数值;fi是机器频率(晶振为12MHz时,其频率为1MHz);fr是想要产生的频率。

其计数初值T的求法如下:

T=65536-N=65536-fi÷2÷fr

单片机12MHz晶振,高中低音符与计数值对照如表 3 1所示。

表 3 1 C大调各音符频率与计数值对照表

音符 频率Hz 周期(T值) 音符 频率Hz 周期(T值)

低音区 低音DO 262 63628 中音区 #FA 740 0676

#DO 277 63731 中SO 784 0638

低RE 294 63836 #SO 831 0602

#RE 311 63928 中LA 880 0568

低M 330 020 #LA 932 0536

低FA 349 103 中SI 988 0506

#FA 370 186 高音区 高DO 1046 0478

低SO 392 260 #DO 1109 0451

#SO 415 331 高RE 1175 0426

低LA 440 400 #RE 1245 0402

#LA 466 4 高M 1318 0372

低SI 494 524 高FA 1397 0358

中音区 中DO 523 580 #FA 1480 0338

#DO 554 633 高SO 1568 0319

中RE 578 694 #SO 1661 0292

#RE 622 732 高LA 1760 0284

中M 659 777 #LA 1865 0268

中FA 698 820 高SI 1976 0253

注:#代表该音符升半调。

我们要为这些音符建立一个表格,让单片机通过查表的方法来获得音符的计数值。

unsigned int code note_value[][14]={

{0,63628,63835,021,103,260,400,524,63731,63928,0,185,331,463}, //低音1,2,3,4,5,6,7,#1,#2,0(#3在此程序中无需设),#4,#5,#6 相对应的定时器初值 {0,580,684,777,820,8,968,65030,633,732,0,860,934,994}, //中音1,2,3,4,5,6,7,#1,#2,0(#3在此程序中无需设),#4,#5,#6 相对应的定时器初值 {0,65058,65110,65157,65178,65217,65252,65283,65085,65134,0,65198,65235,65268} //高音1,2,3,4,5,6,7,#1,#2,0(#3在此程序中无需设),#4,#5,#6 相对应的定时器初值

};

音乐的节拍,一个节拍为一个单位。如表 3 2所示。

表 3 2 曲调值表

曲调值 延时(ms) 曲调值 延时(ms)

调4/4 125 调4/4 62

调3/4 187 调3/4 94

调2/4 250 调2/4 125

这提供一个小软件音乐编码 自动换算下载本文

显示全文
专题