當每按一次點陣按鍵的其中一個時,蜂鳴器都會響一次,為什么我按點陣按鍵時,蜂鳴器的功能卻都實現不了,求教。。。。
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar key=0,ke=125,n;
uchar w;
uchar a;
uint j,k,m;
sbit keyin1=P1^0;
sbit keyin2=P1^1;
sbit keyout1=P1^2;
sbit keyout2=P1^3;
sbit s5=P1^7;
uchar code led1[8][8]=
{
{0xFF,0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,0xFF},
{0xFF,0xFF,0x7F,0x3F,0x7F,0xFF,0xFF,0xFF},
{0xFF,0x7F,0xBF,0x1F,0xBF,0x7F,0xFF,0xFF},
{0xFF,0xBF,0xDF,0x0F,0xDF,0xBF,0xFF,0xFF},
{0xFF,0xDF,0xEF,0x87,0xEF,0xDF,0xFF,0xFF},
{0xFF,0xEF,0xF7,0xC3,0xF7,0xEF,0xFF,0xFF},
{0xFF,0xF7,0xFB,0xE1,0xFB,0xF7,0xFF,0xFF},
{0xFF,0xFB,0xFD,0xF0,0xFD,0xFB,0xFF,0xFF}
};
uchar code led2[8][8]=
{
{0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF},
{0xFF,0xFF,0xFE,0xFC,0xFE,0xFF,0xFF,0xFF},
{0xFF,0xFE,0xFD,0xF8,0xFD,0xFE,0xFF,0xFF},
{0xFF,0xFD,0xFB,0xF0,0xFB,0xFD,0xFF,0xFF},
{0xFF,0xFB,0xF7,0xE1,0xF7,0xFB,0xFF,0xFF},
{0xFF,0xF7,0xEF,0xC3,0xEF,0xF7,0xFF,0xFF},
{0xFF,0xEF,0xDF,0x87,0xDF,0xEF,0xFF,0xFF},
{0xFF,0xDF,0xBF,0x0F,0xBF,0xDF,0xFF,0xFF}
};
void Delay(unsigned int i )
{
unsigned int k ;
for (k=0;k<i;k++);
}
uchar keyscan(void)
{
keyout2=0; keyout1=1;
if(keyin1==0)
{
Delay(10);
if(keyin1==0)
{
s5=1;
Delay(200);
s5=0;
key=1;
}
}
if(keyin2==0)
{
Delay(10);
if(keyin2==0)
{
s5=0;
Delay(200);
s5=1;
if(ke==5) ke=5;
else ke=ke-40;
}
}
while((keyin1==0)||(keyin2==0)) ;
keyout2=1; keyout1=0;
if(keyin1==0)
{
Delay(10);
if(keyin1==0)
{
s5=0;
Delay(10);
s5=1;
key=3;
}
}
if(keyin2==0)
{
Delay(20);
if(keyin2==0)
{
s5=1;
Delay(200);
s5=0;
if(ke==245)ke=245;
ke=ke+40;
}
}
while((keyin1==0)||(keyin2==0)) ;
return key;
}
void main ()
{
while(1)
{
key=keyscan();
n=key ;
if(n==1)
{
s5=0;
Delay(10);
s5=1;
a=0x01;
for (k=0;k<8;k++)
{
P0=~a;
a=_crol_(a,1);
for (m=0;m<20;m++);
for (m=0;m<ke;m++)
{w=0x01;
for(j=0;j<8;j++)
{ if(n==3)break;
key=keyscan();
n=key ;
P2=w;
P3=led2[k][j];
Delay(50);
w<<=1;
}
}
}
}
if(n==3 )
{
s5=0;
Delay(10);
s5=1;
a=0x01;
for (k=0;k<8;k++)
{
P0=~a;
a=_cror_(a,1);
for (m=0;m<20;m++);
for (m=0;m<ke;m++)
{w=0x01;
for(j=0;j<8;j++)
{ if(n==1)break;
key=keyscan();
n=key ;
P2=w;
P3=led1[k][j];
Delay(50);
w<<=1;
}
}
}
}
}
}
|