音符頻率/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;//定時到了,喇叭電平反轉,實現頻率驅動。
}