本文包含原理图、PCB、源代码、封装库、中英文PDF等资源
您需要 登录 才可以下载或查看,没有账号?注册会员
×
各位老师: 本人今日写了个音乐程序,P17接喇叭。用T0控制音长,T1控制音调,调试成功。待机时按P31开始演奏,演奏结束后P16指示。并重新演奏。后来又想加上一个功能,就是按下P32,音乐停止,再按P31,重新播放。于是在P32键程序中写入如下代码:
if (!P32)
{
delay(10);
if(!P32)
{
ET0=0;
ET1=0;
TR1=0;
TR0=0;
TF1=0;
TF0=0;
P11=1;
}
音乐是能停止,再按P31,开始几次能重新播放,但按几下就不行了。复位后了几次,现象一样,但每次陷入这种状态的按键次数不同。比如这次可以正常关闭再打开3次,复位后可能5次,再复位后可能2次。
请提示怎样处理。谢谢。
下面是全部的程序。
#include <reg52.h>
unint code fre[]={0,63628,63833,64019,64104,64260,64400,64523,
64580,64684,64777,64820,64898,64968,65030,
65058,65110,65157,65178,65217,65252,65283,
65297};
unchar code pu[]={8,8,9,10,12,10,9,8,5,6 ,0/*为什么我们相遇网络*/ ,8,9,10,10,12,10,9,9,8,9,0/**/
,9,10,8,9,8,6,6,5,10,12,13,12,10,6,10,9,9,8,6,8,10,9,0/*我和你在一起*/
,8,9,10,10,12,10,9,8,5,6,0/*我和你相爱网络里*/,8,9,10,10,12,10,9,9,8,9,0
,9,10,8,9,8,6,6,5,10,12,13,12,10,6,10,9,9,8,6,6,5,6,8,0/*你的新我最懂*/
,10,12,13,13,13,12,13,13,10,12,12,13,12,10,10,12,13,13,13,12,13,13,10,12/*大声喊出*/
,10,12,13,13,13,12,13,13,10,12,12,13,12,10,6,10,9,9,8,6,6,5,6,6,0
,8,9,10,12,10,9,8,5,6,0,8,9,10,10,12,10,9,9,8,9,0
,9,10,8,9,8,6,6,5,10,12,13,12,10,6,10,10,9,8,6,5,6,8,99};
unchar code pai[]={1,1,1,3,1,1,1,1,1,4,2,/*为什么我们相遇网络*/1,1,2,1,1,1,1,1,1,4,2,
1,1,2,1,1,2,1,1,1,1,1,1,2,1,1,2,1,1,2,1,1,4,2,/*我和你在一起45*/
1,1,2,1,1,1,1,1,1,4,2/*我和你相爱网络里*/,1,1,2,1,1,1,1,1,1,4,2,
1,1,2,1,1,2,1,1,1,1,1,1,2,1,1,2,1,1,1,1,1,1,4,2,/*你的新我最懂91*/
1,1,1,1,1,1,2,1,1,1,1,1,1,2,1,1,1,1,1,1,2,1,1,6,/*大声喊出*/
1,1,1,1,1,1,2,1,1,1,1,1,1,2,1,1,2,1,1,1,1,1,1,4,2,
1,1,3,1,1,1,1,1,4,2,1,1,2,1,1,1,1,1,1,4,2,
1,1,2,1,1,2,1,1,1,1,1,1,2,1,1,2,1,1,2,1,1,8,2/*186*/};
unint tone_h,tone_l;
unint i,count1;
void timer0() interrupt 1 //控制节拍
{
count1++;
if (count1==pai<<1)
{
count1=0;
TR1=0;
P17=0;
P15=1;
P14=0;
delay(10);
i++;
if (pu!=0) //非休止符,开T1,赋频率初值
{
tone_h=fre[pu]/256;
tone_l=fre[pu]%256;
P15=0;
P14=1;
TR1=1;
}
if(pu==99) //演奏结束,延时,重放
{
P16=!P16;
TR1=0;
delay(1000);
i=0;
}
}
if(pu==0) //休止符提示
{
P13=!P13;
}
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
}
void timer1() interrupt 3 //产生振荡
{
P17=!P17;
TH1=tone_h;
TL1=tone_l;
}
void changge()
{
ET0=1;
ET1=1;
i=0;
P17=0;
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
TH1=fre[pu[i+1]]/256;
TL1=fre[pu[i+1]]%256;
TR1=0;
TR0=1;
}
void main ()
{
EA=1;
ET0=1;
ET1=1;
TR0=0;
TR1=0;
TMOD=0x11;
for(;;)
{
if (!P31)
{
delay(10);
if (!P31)
{
P11=0;
changge();
}
}
if (!P32)
{
delay(10);
if(!P32)
{
ET0=0;
ET1=0;
TR1=0;
TR0=0;
TF1=0;
TF0=0;
P11=1;
}
}
}
}
|