C调低音5-高音5的频率是多少,如何转换成51系列单片机的频率? 用51单片机播放歌曲都需要什么硬件?

作者&投稿:郴叶 (若有异议请与网页底部的电邮联系)
一 实现方法: (1)音频控制 要让蜂鸣器发生,只要给蜂鸣器送该音调频率的电平信号就可以,单片机IO口只能输出高电平1,低电平0两个状态,因此向蜂鸣器送电平信号实际就是音频的方波。单片机晶振11.0592MHZ,机器周期为12*(1/11.0592)us=1.085us,例如中音“1”频率为523hz,周期就是1/523s,即1.91s,因此向单片机送周期为1.91s的方波就能发出523HZ的音调,该方波半个周期为1.91/2=0.955s,利用中断定时器,让单片机每0.955s取反一次就可以得到523hz的音调,机器周期总数为955us/1.085us=880,定时常数为880.当发生频率为f时的时候,定时常数C=(1000000/2f)us/1.085us=46083/f.当t0工作方式0时,最大计数8192,定时初值计算如下:TH0=(8192-C)/32;TL0=(8192-C)%32;下面给你个例子:(用定时T0的方式0控制播放:好人一生平安)希望对你有帮助 #include<reg51.h> //包含51单片机寄存器定义的头文件
sbit sound=P3^7; //将sound位定义为P3.7
unsigned int C; //储存定时器的定时常数
//以下是C调低音的音频宏定义
#define l_dao 262 //将“l_dao”宏定义为低音“1”的频率262Hz
#define l_re 286 //将“l_re”宏定义为低音“2”的频率286Hz
#define l_mi 311 //将“l_mi”宏定义为低音“3”的频率311Hz
#define l_fa 349 //将“l_fa”宏定义为低音“4”的频率349Hz
#define l_sao 392 //将“l_sao”宏定义为低音“5”的频率392Hz
#define l_la 440 //将“l_a”宏定义为低音“6”的频率440Hz
#define l_xi 494 //将“l_xi”宏定义为低音“7”的频率494Hz
//以下是C调中音的音频宏定义
#define dao 523 //将“dao”宏定义为中音“1”的频率523Hz
#define re 587 //将“re”宏定义为中音“2”的频率587Hz
#define mi 659 //将“mi”宏定义为中音“3”的频率659Hz
#define fa 698 //将“fa”宏定义为中音“4”的频率698Hz
#define sao 784 //将“sao”宏定义为中音“5”的频率784Hz
#define la 880 //将“la”宏定义为中音“6”的频率880Hz
#define xi 987 //将“xi”宏定义为中音“7”的频率523H
//以下是C调高音的音频宏定义
#define h_dao 1046 //将“h_dao”宏定义为高音“1”的频率1046Hz
#define h_re 1174 //将“h_re”宏定义为高音“2”的频率1174Hz
#define h_mi 1318 //将“h_mi”宏定义为高音“3”的频率1318Hz
#define h_fa 1396 //将“h_fa”宏定义为高音“4”的频率1396Hz
#define h_sao 1567 //将“h_sao”宏定义为高音“5”的频率1567Hz
#define h_la 1760 //将“h_la”宏定义为高音“6”的频率1760Hz
#define h_xi 1975 //将“h_xi”宏定义为高音“7”的频率1975Hz
/*******************************************
函数功能:1个延时单位,延时200ms
******************************************/
void delay()
{
unsigned char i,j;
for(i=0;i<250;i++)
for(j=0;j<250;j++)
;
}
/*******************************************
函数功能:主函数
******************************************/
void main(void)
{
unsigned char i,j;
//以下是《渴望》片头曲的一段简谱
unsigned int code f[]={re,mi,re,dao,l_la,dao,l_la, //每行对应一小节音符<br> l_sao,l_mi,l_sao,l_la,dao,<br> l_la,dao,sao,la,mi,sao,<br> re, <br> mi,re,mi,sao,mi,<br> l_sao,l_mi,l_sao,l_la,dao,<br> l_la,l_la,dao,l_la,l_sao,l_re,l_mi,<br> l_sao,<br> re,re,sao,la,sao,<br> fa,mi,sao,mi,<br> la,sao,mi,re,mi,l_la,dao,<br> re,<br> mi,re,mi,sao,mi,<br> l_sao,l_mi,l_sao,l_la,dao,<br> l_la,dao,re,l_la,dao,re,mi,<br> re,<br> l_la,dao,re,l_la,dao,re,mi,<br> re,<br> 0xff}; //以0xff作为音符的结束标志
//以下是简谱中每个音符的节拍
//"4"对应4个延时单位,"2"对应2个延时单位,"1"对应1个延时单位
unsigned char code JP[ ]={ 4,1,1,4,1,1,2,
2,2,2,2,8,
4,2,3,1,2,2,
10,
4,2,2,4,4,
2,2,2,2,4,
2,2,2,2,2,2,2,
10,
4,4,4,2,2,
4,2,4,4,
4,2,2,2,2,2,2,
10,
4,2,2,4,4,
2,2,2,2,6,
4,2,2,4,1,1,4,
10,
4,2,2,4,1,1,4,
10
};
EA=1; //开总中断
ET0=1; //定时器T0中断允许
TMOD=0x00; // 使用定时器T0的模式1(13位计数器)
while(1) //无限循环
{
i=0; //从第1个音符f[0]开始播放
while(f[i]!=0xff) //只要没有读到结束标志就继续播放
{
C=460830/f[i];
TH0=(8192-C)/32; //可证明这是13位计数器TH0高8位的赋初值方法
TL0=(8192-C)%32; //可证明这是13位计数器TL0低5位的赋初值方法
TR0=1; //启动定时器T0
for(j=0;j<JP[i];j++) //控制节拍数
delay(); //延时1个节拍单位
TR0=0; //关闭定时器T0
i++; //播放下一个音符
}
}
}
/***********************************************************
函数功能:定时器T0的中断服务子程序,使P3.7引脚输出音频的方波
************************************************************/
void Time0(void ) interrupt 1 using 1
{
sound=!sound; //将P3.7引脚输出电平取反,形成方波
TH0=(8192-C)/32; //可证明这是13位计数器TH0高8位的赋初值方法
TL0=(8192-C)%32; //可证明这是13位计数器TL0低5位的赋初值方法
}


实现方法:
(1)音频控制
要让蜂鸣器发生,只要给蜂鸣器送该音调频率的电平信号就可以,单片机IO口只能输出高电平1,低电平0两个状态,因此向蜂鸣器送电平信号实际就是音频的方波。单片机晶振11.0592MHZ,机器周期为12*(1/11.0592)us=1.085us,例如中音“1”频率为523hz,周期就是1/523s,即1.91s,因此向单片机送周期为1.91s的方波就能发出523HZ的音调,该方波半个周期为1.91/2=0.955s,利用中断定时器,让单片机每0.955s取反一次就可以得到523hz的音调,机器周期总数为955us/1.085us=880,定时常数为880.当发生频率为f时的时候,定时常数C=(1000000/2f)us/1.085us=46083/f.当t0工作方式0时,最大计数8192,定时初值计算如下:TH0=(8192-C)/32;TL0=(8192-C)%32;下面给你个例子:(用定时T0的方式0控制播放:好人一生平安)希望对你有帮助
#include<reg51.h>
//包含51单片机寄存器定义的头文件
sbit
sound=P3^7;
//将sound位定义为P3.7
unsigned
int
C;
//储存定时器的定时常数
//以下是C调低音的音频宏定义
#define
l_dao
262
//将“l_dao”宏定义为低音“1”的频率262Hz
#define
l_re
286
//将“l_re”宏定义为低音“2”的频率286Hz
#define
l_mi
311
//将“l_mi”宏定义为低音“3”的频率311Hz
#define
l_fa
349
//将“l_fa”宏定义为低音“4”的频率349Hz
#define
l_sao
392
//将“l_sao”宏定义为低音“5”的频率392Hz
#define
l_la
440
//将“l_a”宏定义为低音“6”的频率440Hz
#define
l_xi
494
//将“l_xi”宏定义为低音“7”的频率494Hz
//以下是C调中音的音频宏定义
#define
dao
523
//将“dao”宏定义为中音“1”的频率523Hz
#define
re
587
//将“re”宏定义为中音“2”的频率587Hz
#define
mi
659
//将“mi”宏定义为中音“3”的频率659Hz
#define
fa
698
//将“fa”宏定义为中音“4”的频率698Hz
#define
sao
784
//将“sao”宏定义为中音“5”的频率784Hz
#define
la
880
//将“la”宏定义为中音“6”的频率880Hz
#define
xi
987
//将“xi”宏定义为中音“7”的频率523H
//以下是C调高音的音频宏定义
#define
h_dao
1046
//将“h_dao”宏定义为高音“1”的频率1046Hz
#define
h_re
1174
//将“h_re”宏定义为高音“2”的频率1174Hz
#define
h_mi
1318
//将“h_mi”宏定义为高音“3”的频率1318Hz
#define
h_fa
1396
//将“h_fa”宏定义为高音“4”的频率1396Hz
#define
h_sao
1567
//将“h_sao”宏定义为高音“5”的频率1567Hz
#define
h_la
1760
//将“h_la”宏定义为高音“6”的频率1760Hz
#define
h_xi
1975
//将“h_xi”宏定义为高音“7”的频率1975Hz
/*******************************************
函数功能:1个延时单位,延时200ms
******************************************/
void
delay()
{
unsigned
char
i,j;
for(i=0;i<250;i++)
for(j=0;j<250;j++)
;
}
/*******************************************
函数功能:主函数
******************************************/
void
main(void)
{
unsigned
char
i,j;
//以下是《渴望》片头曲的一段简谱
unsigned
int
code
f[]={re,mi,re,dao,l_la,dao,l_la,
//每行对应一小节音符<br>
l_sao,l_mi,l_sao,l_la,dao,<br>
l_la,dao,sao,la,mi,sao,<br>
re,
<br>
mi,re,mi,sao,mi,<br>
l_sao,l_mi,l_sao,l_la,dao,<br>
l_la,l_la,dao,l_la,l_sao,l_re,l_mi,<br>
l_sao,<br>
re,re,sao,la,sao,<br>
fa,mi,sao,mi,<br>
la,sao,mi,re,mi,l_la,dao,<br>
re,<br>
mi,re,mi,sao,mi,<br>
l_sao,l_mi,l_sao,l_la,dao,<br>
l_la,dao,re,l_la,dao,re,mi,<br>
re,<br>
l_la,dao,re,l_la,dao,re,mi,<br>
re,<br>
0xff};
//以0xff作为音符的结束标志
//以下是简谱中每个音符的节拍
//"4"对应4个延时单位,"2"对应2个延时单位,"1"对应1个延时单位
unsigned
char
code
JP[
]={
4,1,1,4,1,1,2,
2,2,2,2,8,
4,2,3,1,2,2,
10,
4,2,2,4,4,
2,2,2,2,4,
2,2,2,2,2,2,2,
10,
4,4,4,2,2,
4,2,4,4,
4,2,2,2,2,2,2,
10,
4,2,2,4,4,
2,2,2,2,6,
4,2,2,4,1,1,4,
10,
4,2,2,4,1,1,4,
10
};
EA=1;
//开总中断
ET0=1;
//定时器T0中断允许
TMOD=0x00;
//
使用定时器T0的模式1(13位计数器)
while(1)
//无限循环
{
i=0;
//从第1个音符f[0]开始播放
while(f[i]!=0xff)
//只要没有读到结束标志就继续播放
{
C=460830/f[i];
TH0=(8192-C)/32;
//可证明这是13位计数器TH0高8位的赋初值方法
TL0=(8192-C)%32;
//可证明这是13位计数器TL0低5位的赋初值方法
TR0=1;
//启动定时器T0
for(j=0;j<JP[i];j++)
//控制节拍数
delay();
//延时1个节拍单位
TR0=0;
//关闭定时器T0
i++;
//播放下一个音符
}
}
}
/***********************************************************
函数功能:定时器T0的中断服务子程序,使P3.7引脚输出音频的方波
************************************************************/
void
Time0(void
)
interrupt
1
using
1
{
sound=!sound;
//将P3.7引脚输出电平取反,形成方波
TH0=(8192-C)/32;
//可证明这是13位计数器TH0高8位的赋初值方法
TL0=(8192-C)%32;
//可证明这是13位计数器TL0低5位的赋初值方法
}

单片机音乐编程~



硬件连接说明:

随便找一个仿真机或者什么单片机实验板,只要能工作的就行,将程序输入,运行,然后找个音箱(你计算机旁边应当就有一对吧)拨出插头,插头的前端接在P1.0上,后面部分找根线接单片机的地,就应当有声了,然后怎么改进硬件连接就是你的事了....

音乐程序汇编代码代码1 -------------Voice.asm--------------------------

ORG 0000H
LJMP START
ORG 000BH
INC 20H ;中断服务,中断计数器加1
MOV TH0,#0D8H
MOV TL0,#0EFH ;12M晶振,形成10毫秒中断
RETI
START:
MOV SP,#50H
MOV TH0,#0D8H
MOV TL0,#0EFH
MOV TMOD,#01H
MOV IE,#82H
MUSIC0:
NOP
MOV DPTR,#DAT ;表头地址送DPTR
MOV 20H,#00H ;中断计数器清0
MOV B,#00H ;表序号清0
MUSIC1:
NOP
CLR A
MOVC A,@A+DPTR ;查表取代码
JZ END0 ;是00H,则结束
CJNE A,#0FFH,MUSIC5
LJMP MUSIC3
MUSIC5:
NOP
MOV R6,A
INC DPTR
MOV A,B
MOVC A,@A+DPTR ;取节拍代码送R7
MOV R7,A
SETB TR0 ;启动计数
MUSIC2:
NOP
CPL P1.0
MOV A,R6
MOV R3,A
LCALL DEL
MOV A,R7
CJNE A,20H,MUSIC2 ;中断计数器(20H)=R7否?
;不等,则继续循环
MOV 20H,#00H ;等于,则取下一代码
INC DPTR
; INC B
LJMP MUSIC1
MUSIC3:
NOP
CLR TR0 ;休止100毫秒
MOV R2,#0DH
MUSIC4:
NOP
MOV R3,#0FFH
LCALL DEL
DJNZ R2,MUSIC4
INC DPTR
LJMP MUSIC1
END0:
NOP
MOV R2,#64H ;歌曲结束,延时1秒后继续
MUSIC6:
MOV R3,#00H
LCALL DEL
DJNZ R2,MUSIC6
LJMP MUSIC0
DEL:
NOP
DEL3:
MOV R4,#02H
DEL4:
NOP
DJNZ R4,DEL4
NOP
DJNZ R3,DEL3
RET
NOP
DAT:
db 26h,20h,20h,20h,20h,20h,26h,10h,20h,10h,20h,80h,26h,20h,30h,20h
db 30h,20h,39h,10h,30h,10h,30h,80h,26h,20h,20h,20h,20h,20h,1ch,20h
db 20h,80h,2bh,20h,26h,20h,20h,20h,2bh,10h,26h,10h,2bh,80h,26h,20h
db 30h,20h,30h,20h,39h,10h,26h,10h,26h,60h,40h,10h,39h,10h,26h,20h
db 30h,20h,30h,20h,39h,10h,26h,10h,26h,80h,26h,20h,2bh,10h,2bh,10h
db 2bh,20h,30h,10h,39h,10h,26h,10h,2bh,10h,2bh,20h,2bh,40h,40h,20h
db 20h,10h,20h,10h,2bh,10h,26h,30h,30h,80h,18h,20h,18h,20h,26h,20h
db 20h,20h,20h,40h,26h,20h,2bh,20h,30h,20h,30h,20h,1ch,20h,20h,20h
db 20h,80h,1ch,20h,1ch,20h,1ch,20h,30h,20h,30h,60h,39h,10h,30h,10h
db 20h,20h,2bh,10h,26h,10h,2bh,10h,26h,10h,26h,10h,2bh,10h,2bh,80h
db 18h,20h,18h,20h,26h,20h,20h,20h,20h,60h,26h,10h,2bh,20h,30h,20h
db 30h,20h,1ch,20h,20h,20h,20h,80h,26h,20h,30h,10h,30h,10h,30h,20h
db 39h,20h,26h,10h,2bh,10h,2bh,20h,2bh,40h,40h,10h,40h,10h,20h,10h
db 20h,10h,2bh,10h,26h,30h,30h,80h,00H

END

音乐程序汇编代码代码2 -------------Voice1.asm--------------------------

;标题 '八月桂花香'发声程序
;摘要 详见'无线电'92年3期
;作者 周振安
ORG 0000H
LJMP START
ORG 000BH
INC 20H ;中断服务,中断计数器加1
MOV TH0,#0D8H
MOV TL0,#0EFH ;12M晶振,形成10毫秒中断
RETI
START:
MOV SP,#50H
MOV TH0,#0D8H
MOV TL0,#0EFH
MOV TMOD,#01H
MOV IE,#82H
MUSIC0:
NOP
MOV DPTR,#DAT ;表头地址送DPTR
MOV 20H,#00H ;中断计数器清0
MOV B,#00H ;表序号清0
MUSIC1:
NOP
CLR A
MOVC A,@A+DPTR ;查表取代码
JZ END0 ;是00H,则结束
CJNE A,#0FFH,MUSIC5
LJMP MUSIC3
MUSIC5:
NOP
MOV R6,A
INC DPTR
MOV A,B
MOVC A,@A+DPTR ;取节拍代码送R7
MOV R7,A
SETB TR0 ;启动计数
MUSIC2:
NOP
CPL P1.0
MOV A,R6
MOV R3,A
LCALL DEL
MOV A,R7
CJNE A,20H,MUSIC2 ;中断计数器(20H)=R7否?
;不等,则继续循环
MOV 20H,#00H ;等于,则取下一代码
INC DPTR
; INC B
LJMP MUSIC1
MUSIC3:
NOP
CLR TR0 ;休止100毫秒
MOV R2,#0DH
MUSIC4:
NOP
MOV R3,#0FFH
LCALL DEL
DJNZ R2,MUSIC4
INC DPTR
LJMP MUSIC1
END0:
NOP
MOV R2,#64H ;歌曲结束,延时1秒后继续
MUSIC6:
MOV R3,#00H
LCALL DEL
DJNZ R2,MUSIC6
LJMP MUSIC0
DEL:
NOP
DEL3:
MOV R4,#02H
DEL4:
NOP
DJNZ R4,DEL4
NOP
DJNZ R3,DEL3
RET
NOP

如果是简单的音乐,编乐谱推蜂鸣器就可以;如果是mp3/wav之类的音乐,需要芯片自带解码模块,或者使用外部解码芯片,还需要dac将声音推出来。

五段均衡器怎么调校啊?分别为80Hz500Hz1kHz5kHz16kHz。
答:150Hz-500Hz属于中低音,是声音的结构部分,人声位于这个位置,不足时,演唱声会被音乐淹没。2KHz-5KHz属于中高音,是弦乐的特征音。不足时声音的穿透力下降,过强时会掩蔽语言音节的识别。7KHz-8KHz属于高音,是影响声音层次感的频率。过度提升会使短笛、长笛声音突出,语言的齿音加重和音色发毛。

KTV调音员音响操作培训~~~如何调出好音质~~~
答:过度提升时会产生类似电话的声音。中高音:2KHz-5KHz,是弦乐的特征音(拉弦乐的弓与弦的摩搡声,弹拔乐的手指触弦的声音某)。不足时声音的穿透力下降,过强时会掩蔽语言音节的识别。高音:7KHz-8KHz,是影响声音层次感的频率。过度提升会使短笛、长笛声音突出,语言的齿音加重和音色发毛。极高音...

汽车音响怎么调效果好?高中低音分别是多少赫兹
答:汽车音响不用调,都没有超低音(低音频率70-90赫兹),高音比较好(高音18khz-20khz)。最好买一个10寸汽车低音炮(100瓦左右),选择频率响应40hz~150hz,就有40赫兹超低音,就与汽车喇叭组合成为40hz-20khz高级音响。如低音炮功率太大,低音就把汽车喇叭的高音吃掉了,就没有中高音了(低音有屏蔽...

汽车音响中所称的高,中,低音有没有频率范围?
答:40HZ以下为超低音 40-160为低音 160-320为中低音 320-2.5K为中音 2.5K-5K为中高音 5k-10k为高音 10k以上超高音

响度的频率范围
答:即:低音频段20Hz~160Hz(3倍频)中音频段160Hz~2500Hz(4倍频)高音频段2500Hz~20000Hz(3倍频)人耳对中音频段感受到的声音响度较大,且较平坦。高音频段感受到的声音响度随频率的升高逐渐减弱,为一斜线。低音频段在80Hz以下急剧减弱,斜线陡率较大。我们把低音频段的急剧减弱称为低频“迟钝”现象...

功放均衡器怎么调声音才好听
答:150Hz-500Hz(中低音)应是浑厚有力百不混浊;500Hz-5KHz(中高音)应是明亮透彻而不生硬;5KHz以上(高音)应是纤细,园顺而不尖锐刺耳。 整个频响特性平直时:声音自然丰满而有弹性,层次清晰园顺悦耳。频响多峰谷时:声音粗糙混浊,高音刺耳发毛,无层次感扩声易发生反馈啸叫。频率的音感特征 ...

低音炮频率范围
答:例如-频率响应:55HZ-20KHZ, 意思就是音箱的最低音是55赫兹,一直到最高音2万赫兹(2万赫兹以上频率是超声波,人耳朵听不到,20千赫兹以上的超高音喇叭--(25KHZ\35KHZ\40KHZ),只是喇叭高音参数的技术显示,并没有多少实际使用价值。55赫兹-20千赫兹,只是频率范围,r如果没有另外一个频率特性(+...

低音频率是在多少到多少
答:不同的对象对应的低音频率有所不同,如:音频上:低音频率在30—150HZ之间;低音吉它:低音频率在700~1KHz之间;人声:低音频率82~392Hz。频率范围:又称“频率覆盖”、“波段覆盖”。表示收音机能够接受哪些频段范围内的广播。现行标准规定,各级收音机的中波段频率范围均不狭于535—1605KHz;短波段...

频率范围究竟是什么
答:Horn(法国号):73~2.8KHzTrombone(长号):65~2.6KHzTuba(低音号):43~2.6KHz一般人声音的频率范围人声:男:低音82~392Hz,基准音区64~523Hz男中音123~493Hz,男高音164~698Hz女:低音82~392Hz,基准音区160~1200Hz女中音123~493Hz,女高音220~1.1KHz各频段的处理方式30~80Hz:这一频段正是我们在的吧外...

音箱频率音箱的高,中,低音,频率段各是多少
答:此频段是最容易产生房间驻波的频段。从160- 1280 Hz为止,横跨了三个八度(320 Hz、640 Hz、1280 Hz),这一段中频是所有乐器与 人声出现最频繁的频段,也是音乐的灵魂区域。 1280 - 2560 Hz中高频,亦是提升了一个八度。大部份的二路分音音箱将分频点设在2500- 3000 Hz处,往上的频率交给高音...