单片机音乐盒纸
#定义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++);
}
===================
我很久以前写的。看一看。