① 单片机中蜂鸣器的问题,不明白程序中的频率常数和节拍常数怎么来的,求解答
/******************************************************************************/
// 声音频率, 时长, 回响时长, 停顿时长,0xFFFF表示结束。 //
/******************************************************************************/
/******************************************************************************/
#define VOICE_WIDTH 50 //占空比
/******************************************************************************/
/*
#7.0=253,
#6.0=284,#6.5=268,
#5.0=318,#5.5=300,
#4.0=357,#4.5=337,
#3.0=379,
#2.0=425,#2.5=401,
#1.0=477,#1.5=450,
*/
/******************************************************************************/
/******************************************************************************/
const unsigned int VOICE_TYPE_0[]= //power_on
{
253,450,0,550,
0xFFFF
};
/******************************************************************************/
② 单片机89c51电子琴怎么控制节拍
节拍控制就是控制每个音符延时时间的问题,可以用定时器来实现。所以最好的做法是用两个定时器来控制乐曲,一个定时器控制频率(也就是音调),一个定时器控制节奏(也就是节拍)
③ 单片机中震荡信号频率,节拍,机器周期的关系是怎样的
我来给你说一下,先说单片机有四个周期,分别是时钟周期,状态周期,机器周期,指令周期,时钟周期又叫振荡周期,也就是晶振的振荡周期,也就是晶振频率的倒数,他是单片机最基本的时间单位,一个时钟周期内单片机完成一个最基本的动作。 状态周期是有两个时钟周期组成,一个机器周期由12个时钟周期组成,指令周期由1-4个机器周期组成,一般一个机器周期就是一个指令周期。
④ 在单片机中怎么确定音乐节拍
这种LED随音乐闪烁,效果上类似于音响设备的电平指示器。电路很多,可用分立元件,也可用现成的IC,如日本东芝公司早期的TA7666B等,如图所示:此图可接21只LED,排成往两边闪的效果,中间一只LED长亮,作为电源指示。输入端接音频信号,信号弱,LED闪的少,信号强,LED闪的多,直至闪到头。
⑤ 51单片机音律和节拍是怎么送到P2.0口的
51单片机产生音乐的原理是每个节拍的持续时间内,将定时的定时时间设为周期的一半,定时器时间到就产生中断,将P2.0口的状态取反一次。例如,声音频率是1KHZ,周期是1ms,定时500us就可以了 。由于音乐的频率是有规律的,可以将不同的音符的定时器初值制成表格,主程序根据乐谱内容查表,即可得到频率有规律的方波,推动扬声器发声即可。
⑥ 单片机 定时器1怎么控制节拍
不知道是指对于某种事物不清楚和不理解,和我知道的意思相反。
例:我不知道工人体育馆在哪里。
英译:I don't know where the Workers Stadium. [1]
一些汉语方言区不用不知道,而用“知不道”表达同类意思。
古代汉语中不知道的意思是不晓了“道”,道是看不见摸不着的,对客观事物规律性的总结,不知道是普通人和普通学者很自然的事情,而要知道则必须为学,孔子说“人不学,不知道。”
⑦ 求单片机一些音乐的音符及节拍
参考:
http://hi..com/do_sermon/item/d6f155da37a70fe93dc2cbc1
⑧ 如何确定单片机音乐播放的音律和节拍计算
你是想用单片机编程,来播放曲子是吧。那往下看:
1.确定每一拍的时间,一般是一分钟多少拍,确定一拍的时间是多少秒,确定每个音符的音长。
2.每个音符的音高,用十二平均律确定音高就可了。下面是音高与频率的对应关系。
http://wenku..com/view/e1f7a551f01dc281e53af02a.html
红色的部分是middle C的频率。
3.音色选择,也就是乐器的选择,这个比较复杂,很难说清楚,如果这方面有问题,可给我发消息。先用c语言的beep函数试着编写一下。
⑨ 简谱的数据怎么转化为单片机代码(节拍和频率)最主要是节拍,频率已明白
其实就是时间,也就是定时器定时的时间,需要根据节拍计算定时器定时的时间常数。
你需要知道节拍的时间长短,然后转换为定时常数,然后做成一个表格就可以了。
⑩ 单片机c语言设计音乐播放器节拍和音符频率怎么计算
将51单片机的P1.2口连接到蜂鸣器的一个管脚上,另外一个管脚接地。若声音小,则添加一个三级管放大电路或直接串一个UL2003
/*------------------------------------------------*/
includelt;reg52.h; //包含头文件,一般情况不需要改动?
//头文件包含特殊功能寄存器的定义
/*------------------------------------------------
硬件端口定义
------------------------------------------------*/
sbit SPK=P1^2; //定义音乐输出端口
unsigned char Timer0_H,Timer0_L,Time;
//世上只有妈妈好数据表
code unsigned char MUSIC[]={ 6,2,3, 5,2,1, 3,2,2, 5,2,2, 1,3,2, 6,2,1, 5,2,1,
6,2,4, 3,2,2, 5,2,1, 6,2,1, 5,2,2, 3,2,2, 1,2,1,
6,1,1, 5,2,1, 3,2,1, 2,2,4, 2,2,3, 3,2,1, 5,2,2,
5,2,1, 6,2,1, 3,2,2, 2,2,2, 1,2,4, 5,2,3, 3,2,1,
2,2,1, 1,2,1, 6,1,1, 1,2,1, 5,1,6, 0,0,0
};
// 音阶频率表 定时器高八位
code unsigned char FREQH[]={
0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,
0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC, //1,2,3,4,5,6,7,8,i
0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,
0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,
} ;
// 音阶频率表 定时器低八位
code unsigned char FREQL[]={
0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,
0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F, //1,2,3,4,5,6,7,8,i
0xEE,0x44, 0x6B,0xB4,0xF4,0x2D,
0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,
};
/*------------------------------------------------
uS延时函数,含有输入参数 unsigned char t,无返回值
unsigned char 是定义无符号字符变量,其值的范围是
0~255 这里使用晶振12M,精确延时请使用汇编,大致延时
长度如下 T=tx2+5 uS
------------------------------------------------*/
void DelayUs2x(unsigned char t)
{
while(--t);
}
/*------------------------------------------------
mS延时函数,含有输入参数 unsigned char t,无返回值
unsigned char 是定义无符号字符变量,其值的范围是
0~255 这里使用晶振12M,精确延时请使用汇编
------------------------------------------------*/
void DelayMs(unsigned char t)
{
while(t--)
{
//大致延时1mS
DelayUs2x(245);
DelayUs2x(245);
}
}
/*------------------------------------------------
节拍延时函数
各调1/4节拍时间:
调4/4 125ms
调2/4 250ms
调3/4 187ms
------------------------------------------------*/
void delay(unsigned char t)
{
unsigned char i;
for(i=0;ilt;t;i++)
DelayMs(250);
TR0=0;
}
/*------------------------------------------------
定时器0中断
------------------------------------------------*/
void TIM0_ISR() interrupt 1
{
TR0=0;
SPK=!SPK;
TH0=Timer0_H;
TL0=Timer0_L;
TR0=1;
}
/*------------------------------------------------
歌曲处理函数
------------------------------------------------*/
void Song()
{
TH0=Timer0_H;//赋值定时器时间,决定频率
TL0=Timer0_L;
TR0=1; //打开定时器
delay(Time); //延时所需要的节拍
}
/*------------------------------------------------
主函数
------------------------------------------------*/
void main(void)
{
unsigned char k,i;
TMOD=0x01; //置定时器0工作方式1
EA=1; //打开全局中断
ET0=1; //打开定时0中断
while(1)
{
i=0;
while(ilt;100)
{ //音乐数组长度 ,唱完从头再来
k=MUSIC[i]+7*MUSIC[i+1]-1;//去音符振荡频率所需数据
Timer0_H=FREQH[k];
Timer0_L=FREQL[k];
Time=MUSIC[i+2]; //节拍时长
i=i+3;
Song();
}
}
}