當前位置:最新電影網 - qq音樂 - 單片機的蜂鳴器壹波壹波播放音樂,如何分辨樂譜中有多少拍?

單片機的蜂鳴器壹波壹波播放音樂,如何分辨樂譜中有多少拍?

/*音符頻率對應表

音符頻率/HZ半周期/us(N)

-

●1do 262 1908 # 1do # 277 1805

●2RE 294 1700 # 2RE # 3111608

低3mi 330 1516 # 3mi # 340 1470

●4fa 349 1433 # 4fa # 370 1350

●5SO 392 1276 # 5SO # 4151205

●6LA 440 1136 # 6LA # 4661072

●7si 494 1012 # 7si # 524 0954

鐘1do 523 0956 # 1do # 554 0903

鐘2RE 578 0842 #2RE# 622 0804

鐘三米659 0759 #三米# 682 0733

鐘4FA 698 0716 #4FA# 740 0676

中型5SO 784 0638 #5SO# 831 0602

鐘6LA 880 0568 #6LA# 932 0536

7SI 988 0506 #7SI# 1046 478。

身高1do 1046478 # 1do # 1109451。

高2Re 1175426 # 2Re # 1245402

高3mi 1318372 # 3mi # 1356368

高4fa 1397358 # 4fa # 1480338

高5so 1568 319 # 5s 0 # 1661 292

高6la 1760284 # 6la 1865268

高7SI 1976 253 #7SI# 2066 242

-

(“#”表示半音,用來升半音)*/

/* - */

# include & ltreg52.h & gt//包含頭文件,壹般不需要更改。頭文件包含特殊功能寄存器的定義。

#定義uint無符號整數

#定義uchar無符號字符

sbit spk=p1^2;//定義喇叭端口

無符號int I;//定義全局變量

Uchar table[14]={ //中音音階對應定時器初始值。

0xfc,0x44,//1

0xfc,0xb6,//2

0xfd,0x09,//3

0xfd,0x34,//4

0xfd,0x82,//5

0xfd,0xc8,//6

0xfe,0x06 //7

};

/******************************************************************/

/*延遲函數語句*/

/******************************************************************/

Void delayms(unsigned int xms) //毫秒延遲

{

uint i,j;

for(I = xms;我& gt0;我-)

for(j = 125;j & gt0;j-);

}

Void init() //定時器初始化函數

{

TMOD | = 0x 01;//定時器工作模式,定時器0用於計時。

TH0 =表[0];//定時器刻度1對應初始值,高0xfc,低0x44。

TL0 = table[1];

ET0 = 1;//定時器0允許

EA = 1;//打開主機中斷

}

/******************************************************************/

/*主函數*/

/******************************************************************/

主()

{

init();//定時器初始化

while(1)

{

for(I = 0;我& lt7;I++) //循環彈奏7個音階。

{

TR0 = 1;//開啟定時器0,開始計數,產生喇叭驅動頻率。

戴萊姆斯(500);//每個音階大約持續演奏時間。

TR0 = 0;//停止計時

delayms(1000);//喇叭停止工作,間歇時間約為1s,可以更改。

}

}

}

無效定時器0()中斷1 //定時器中斷功能

{

TH0 = table[I * 2];//小數位數1234567對應定時器初始值的高值。

//table[i*2]表示table[]數組中的數字0 2 4 6 8 10 12 14。

TL0 = table[I * 2+1];//table[i*2+1]表示table[]數組中的13579 1113 15值。

SPK = ~ SPK;//定時到了,喇叭電平反轉,實現頻率驅動。

}