单片机音乐盒纸

#包括

#定义uchar无符号字符

#定义uint无符号整数

int cnt_h,CNT _ l;

sbit spk=p2^3;

//sbit led=p2^0;

uchar cnt,I,step,s _ bit

代码uint yin[7]= { 19121704161432127611361012 };//1:低八度3:高八度

//“北京欢迎你”符号代码

代码uint song[]={123,125,123,122,123,223,123,122,111665438

,122,121,116,121,122,123,125,122,123,126,125,125,123, 123,122,123,122,121,125,126,222,115,123,123,222,223,

116,123,122,122,221,423,425,131,125,226,226,125,123,123,125,225, 123,125,126,131,132,131,125,123,122,125,223,223,123,125, 131,125,226,231,132,131,125,123,125,127,226,223,122,123,125,133,232,127,331,999};

无效延迟(uint a);//

void init();//记谱法代码解释:每个音及其节拍用一个三位数表示。

Void main() //三位数的第一百位代表节奏的整数倍。

{//十位数表示音高(1低音,3为高音)

init();//数字表示是哪个基本音素。

while(1)

{

step =(song[I]/100)* 4;//把2换成其他数字可以改变拍子。

//th 1 =(65536-65535)/256;

//TL 1 =(65536-65535)% 256;

开关((song[i]/10)%10)

{

案例1:

{

cnt_h=-(尹[宋[I]% 10-1]* 2)/256;

cnt_l=-(尹[宋[I]% 10-1]* 2)% 256;

打破;

}

案例二:

{

CNT _ h =-yin[song[I]% 10-1]/256;

CNT _ l =-yin[song[I]% 10-1]% 256;

打破;

}

案例三:

{

cnt_h=-(尹[宋[I]% 10-1]/2)/256;

cnt_l=-(尹[宋[I]% 10-1]/2)% 256;

打破;

}

}

TH0 = CNT _ h;

TL0 = CNT _ l;

tr 1 = 1;

TR0 = 1;

接下来:

while(cnt!=步骤)

转到下一个;

//led = ~ led;

TR0 = 0;

CNT = 0;

tr 1 = 0;

延迟(200);

i++;

if(宋[i]==999)

{

I = 0;

延迟(900);

}

}

}

void初始化()

{

EA = 1;

ET0 = 1;

et 1 = 1;

TMOD = 0x 11;

I = 0;

CNT = 0;

TR0 = 0;

tr 1 = 0;

}

void t0(void)中断1

{

TH0 = CNT _ h;

TL0 = CNT _ l;

spk = ~ spk

}

void t1(无效)中断3

{

//th 1 =(65536-65535)/256;

//TL 1 =(65536-65535)% 256;

cnt++;

}

无效延迟

{

uint q,k;

for(q = 0;q & lt84;q++)

for(k = 0;k & lta;k++);

}

===================

我很久以前写的。看一看。