图4.22.1
3. 系统板硬件连线
(1. 把“单片机系统”区域中的P1.0端口用导线连接到“音频放大模块”区域中的SPK IN端口上;
(2. 把“单片机系统“区域中的P3.0-P3.7端口用8芯排线连接到“4X4行列式键盘”区域中的C1-C4 R1-R4端口上;
4. 相关程序内容
(1. 4X4行列式键盘识别;
(2. 音乐产生的方法;
一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。现在以单片机12MHZ晶振为例,例出高中低音符与单片机计数T0相关的计数值如下表所示
音符
| 频率(HZ)
| 简谱码(T值)
| | 音符
| 频率(HZ)
| 简谱码(T值)
|
低1 DO
| 262
| 63628
| # 4 FA#
| 740
| 64860
|
#1 DO#
| 277
| 63731
| 中 5 SO
| 784
| 64898
|
低2 RE
| 294
| 63835
| # 5 SO#
| 831
| 64934
|
#2 RE#
| 311
| 63928
| 中 6 LA
| 880
| 64968
|
低 3 M
| 330
| 64021
| # 6
| 932
| 64994
|
低 4 FA
| 349
| 64103
| 中 7 SI
| 988
| 65030
|
# 4 FA#
| 370
| 64185
| 高 1 DO
| 1046
| 65058
|
低 5 SO
| 392
| 64260
| # 1 DO#
| 1109
| 65085
|
# 5 SO#
| 415
| 64331
| 高 2 RE
| 1175
| 65110
|
低 6 LA
| 440
| 64400
| | # 2 RE#
| 1245
| 65134
|
# 6
| 466
| 64463
| 高 3 M
| 1318
| 65157
|
低 7 SI
| 494
| 64524
| 高 4 FA
| 1397
| 65178
|
中 1 DO
| 523
| 64580
| # 4 FA#
| 1480
| 65198
|
# 1 DO#
| 554
| 64633
| 高 5 SO
| 1568
| 65217
|
中 2 RE
| 587
| 64684
| # 5 SO#
| 1661
| 65235
|
# 2 RE#
| 622
| 64732
| 高 6 LA
| 1760
| 65252
|
中 3 M
| 659
| 64777
| # 6
| 1865
| 65268
|
中 4 FA
| 698
| 64820
| 高 7 SI
| 1967
| 65283
|
下面我们要为这个音符建立一个表格,有助于单片机通过查表的方式来获得相应的数据
低音0-19之间,中音在20-39之间,高音在40-59之间
TABLE: DW 0,63628,63835,64021,64103,64260,64400,64524,0,0
DW 0,63731,63928,0,64185,64331,64463,0,0,0
DW 0,64580,64684,64777,64820,64898,64968,65030,0,0
DW 0,64633,64732,0,64860,64934,64994,0,0,0
DW 0,65058,65110,65157,65178,65217,65252,65283,0,0
DW 0,65085,65134,0,65198,65235,65268,0,0,0
DW 0
2、音乐的音拍,一个节拍为单位(C调)
曲调值
| DELAY
| | 曲调值
| DELAY
|
调4/4
| 125ms
| | 调4/4
| 62ms
|
调3/4
| 187ms
| | 调3/4
| 94ms
|
调2/4
| 250ms
| | 调2/4
| 125ms
|
对于不同的曲调我们也可以用单片机的另外一个定时/计数器来完成。
下面就用AT89S51单片机产生一首“生日快乐”歌曲来说明单片机如何产生的。
在这个程序中用到了两个定时/计数器来完成的。其中T0用来产生音符频率,T1用来产生音拍。
5. 程序框图
源程序下载
7