单片机编程 音乐编程程序
//春天在哪里
ucharcodechuntian[]={"3_3_3_1_|,5,5|3_3_3_1_|3-|5_5_3_1_|,5_,5_,5|,6_,7_1_3_|2-|"
"3_3_3_1_|,5,5|3_3_3_1_|3-|5_6_5_6_|5_4_3_1_|,53|1-|"
};
//两只老虎
ucharcodelaohu[]={"1231|1231|345-|345-|5_6_5_4_31|5_6_5_4_31|"
"151-|151-"
};
/*------------------------------------------------
键盘扫描程序
------------------------------------------------*/
ucharkeyscan(void)//键盘扫描函数,使用行列反转扫描法
{
ucharcord_h,cord_l;//行列值中间变量
P3=0x0f;//行线输出全为0
cord_h=P3&0x0f;//读入列线值
if(cord_h!=0x0f)//先检测有无按键按下
{
delay(100);//去抖
if(cord_h!=0x0f)
{
cord_h=P3&0x0f;//读入列线值
P3=cord_h|0xf0;//输出当前列线值
cord_l=P3&0xf0;//读入行线值
return(cord_h+cord_l);//键盘最后组合码值
}
}
return(0xff);//返回该值
}
/*------------------------------------------------
延时程序
------------------------------------------------*/
voiddelay(uinti)//延时函数
{
while(i--);
}
//乐谱方式输入的音乐播放,
voidmain(void)//主程序
{
ucharcodejie8[8]={12,14,16,17,19,21,23,24};//1234567`1八个音符在频率表中的位置
uchari=0;
ucharn=0;
TMOD=0x01;//使用定时器0的16位工作模式
TR0=0;
ET0=1;
EA=1;
while(1)
{
key=keyscan();
switch(key)
{
case0x7e:
while(key==0x7e)
{
key=keyscan();
}
play(molihua);
break;//0
case0x7d:
while(key==0x7d)
{
key=keyscan();
}
play(yifenqian);
break;//1
case0x7b:while(key==0x7b)
{
key=keyscan();
}
play(chuntian);
break;//2
case0x77:while(key==0x77)
{
key=keyscan();
}
play(waipodephw);
break;//3
case0xbe:while(key==0xbe)
{
key=keyscan();
}
play(xingxing);
break;//4
case0xbd:while(key==0xbd)
{
key=keyscan();
}
play(xinnianhao);
break;//5
case0xbb:while(key==0xbb)
{
key=keyscan();
}
play(mamahao);
break;//6
case0xb7:while(key==0xb7)
{
key=keyscan();
}
play(zhaopengyou);
break;//7
case0xde:while(!(key^0xde))
{
tl0_f=freq[jie8[0]*2];//置一个音符的值
th0_f=freq[jie8[0]*2+1];
TR0=1;
key=keyscan();
//for(n=0;n<10000;n++);//延时
}
break;//8
case0xdd:while(!(key^0xdd))
{
tl0_f=freq[jie8[1]*2];//置一个音符的值
th0_f=freq[jie8[1]*2+1];
TR0=1;
key=keyscan();
//for(n=0;n<10000;n++);//延时
}
break;//9
case0xdb:while(!(key^0xdb))
{
tl0_f=freq[jie8[2]*2];//置一个音符的值
th0_f=freq[jie8[2]*2+1];
TR0=1;
key=keyscan();
//for(n=0;n<10000;n++);//延时
}
break;//a
case0xd7:while(!(key^0xd7))
{
tl0_f=freq[jie8[3]*2];//置一个音符的值
th0_f=freq[jie8[3]*2+1];
TR0=1;
key=keyscan();
//for(n=0;n<10000;n++);//延时
}
break;//b
case0xee:while(!(key^0xee))
{
tl0_f=freq[jie8[4]*2];//置一个音符的值
th0_f=freq[jie8[4]*2+1];
TR0=1;
key=keyscan();
//for(n=0;n<10000;n++);//延时
}break;//c
case0xed:while(!(key^0xed))
{
tl0_f=freq[jie8[5]*2];//置一个音符的值
th0_f=freq[jie8[5]*2+1];
TR0=1;
key=keyscan();
//for(n=0;n<10000;n++);//延时
}break;//d
case0xeb:while(!(key^0xeb))
{
tl0_f=freq[jie8[6]*2];//置一个音符的值
th0_f=freq[jie8[6]*2+1];
TR0=1;
key=keyscan();
//for(n=0;n<10000;n++);//延时
}break;//e
case0xe7:while(!(key^0xe7))
{
tl0_f=freq[jie8[7]*2];//置一个音符的值
th0_f=freq[jie8[7]*2+1];
TR0=1;
key=keyscan();
//for(n=0;n<10000;n++);//延时
}break;//f
default:break;
}
TR0=0;
/*if(!K1)
{
tl0_f=freq[jie8[0]*2];//置一个音符的值
th0_f=freq[jie8[0]*2+1];
TR0=1;
for(n=0;n<10000;n++);//延时
}
if(!K2)
{
tl0_f=freq[jie8[1]*2];//置一个音符的值
th0_f=freq[jie8[1]*2+1];
TR0=1;
for(n=0;n<10000;n++);//延时
}
if(!K3)
{
tl0_f=freq[jie8[2]*2];//置一个音符的值
th0_f=freq[jie8[2]*2+1];
TR0=1;
for(n=0;n<10000;n++);//延时
}
if(!K4)
{
tl0_f=freq[jie8[3]*2];//置一个音符的值
th0_f=freq[jie8[3]*2+1];
TR0=1;
for(n=0;n<10000;n++);//延时
}
TR0=0;
if(!K1)
{
while(!K1);
play(molihua);//播放音乐
}
if(!K2)
{
while(!K2);
play(dami);//播放音乐
}
if(!K3)
{
while(!K3);
play(mamahao);//播放音乐
}
if(!K4)
{
switch(i)
{
case0:
play(xianjian);//播放音乐
break;
case1:
play(song3);//播放音乐
break;
case2:
play(mamahao);//播放音乐
break;
case3:
play(boluo);//播放音乐
break;
case4:
play(xingxing);//播放音乐
break;
case5:
play(dami);//播放音乐
break;
}
i++;if(i==6)i=0;
}*/
}
单片机编程音乐编 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)