内容正文:
任务4-4 单音阶发生器
1.单音阶音符的频率与定时初值的对应关系
2.定时计数器的广泛应用
3.Proteus软件仿真音频信号产生方法
一.任务目标
二.任务要求
任务描述:应用定时计数器编程实现扬声器轮流鸣放单音符“1-2-3-4-5-6-7-1-…”,每个音符鸣放1s。
三. 相关知识
12MHz晶振音符与16位定时计数器的初值关系表
音符 频率(Hz) 简谱码(初值) 音符 频率(Hz) 简谱码(初值)
低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 MI 330 64021 # 6 LA# 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 LA# 466 64463 高 3 MI 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 MI 659 64777 # 6 LA# 1865 65268
中 4 FA 698 64820 高 7 SI 1967 65283
音阶产生方法
一首音乐是由许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合构成我们想要的音乐了。我们可以利用单片机的定时计数器T0来产生不同的频率。因此,我们只要把一首歌曲的音阶对应频率关系弄清楚即可。现在以单片机12MHz晶振为例,列出高中低音符与16位定时计数器的初值关系
四、任务分析
1、硬件电路
2、软件分析
#include <reg51.h>
unsigned char R5,R6,R7;
sbit P1_1 = P1^1;
unsigned int Scale[8]={64580, 64684, 64777, 64820, 64898, 64968, 65030, 65058};
unsigned char Get_Hgih8(unsigned int i);
unsigned char Get_Low8(unsigned int i);
void main()
{
P1_1=1;
R5=0;
R6=200;
R7=20;
TMOD=0x12;
TH0=0x06;
TL0=0x06;
TH1=Get_Hgih8(Scale[R5]);
TL1=Get_Low8(Scale[R5]);
EA=1;
ET0=1;
ET1=1;
TR0=1;
TR1=1;
while(1);
}
void ISR_Timer0() interrupt 1
{
R6--;
if(R6==0)
{
R7--;
R6=200;
if(R7==0)
{
R7=20;
R5++;
if(R5>=8)
{
R5=0;
}
}
}
TR0=1;
}
void ISR_Timer1() interrupt 3
{
TH1=Get_Hgih8(Scale[R5]);
TL1=Get_Low8(Scale[R5]);
P1_1=!P1_1;
TR1=1;
}
unsigned char Get_Hgih8(unsigned int i)
{
unsigned char j;
j=(unsigned char)((i>>8)&0x00FF);
return j;
}
unsigned char Get_Low8(unsigned int i)
{
unsigned char j;
j=(unsigned char)(i&0x00FF);
return j;
}
五.任务实施
(1)在Proteus软件中按图搭接好电路;
(2)在Keil软件中编辑程序,进行编译,得到HEX格式文件;
(3)将所得的HEX格式文件在Proteus中加载到单片机芯片中;
(4)运行仿真,聆听仿真结果;
(5)Proteus中结果正常后,用实际硬件搭接并调试电路,通过编程器将HEX格式文件下载到AT89C51中,通电验证实验结果。
六、任务总结
任务回顾
课后作业
思考题
标志
Thank you!
$$