老师给的要求是:1) 开机是点亮12发光二极管,闪烁三下 2) 按照顺时针循环依次点亮发光二极管 3) 通过按键将发光二极管的显示改为顺逆时针方式 我前两条在板子上成功了,用按键控制不知道该怎么弄。。我们发的板子是P3.6 P3.7为两行 P0.5 P0.6 P0.7为三列的矩阵键盘 求大神帮忙了 !妹子在这里感激不尽!! #include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar flag1=0,flag2=0,flag3=0,flag4=0,flag5=0,flag6=0;
sbit LED1 = P2^0;
sbit LED2 = P2^1;
sbit LED3 = P2^2;
sbit LED4 = P2^3;
sbit LED5 = P2^4;
sbit LED6 = P2^5;
sbit LED7 = P2^6;
sbit LED8 = P2^7;
sbit LED9 = P3^2;
sbit LED10 = P3^3;
sbit LED11 = P3^4;
sbit LED12 = P3^5;
sbit key1 = P0^5;
void delay(unsigned int factor) //延时n*1ms
{
unsigned int i,j;
for(i=factor;i>0;i--)
for(j=111;j>0;j--);
}
void keyscan(void)
{
uchar n;
//扫描第一行
P3=0xbf;
n=P3;
n&=0xf0;
if(n!=0xf0)
{
delay();
P0=0xbf;
n=P0;
n&=0xf0;
if(n!=0xf0)
{
switch(n)
{
case(0xd0):flag1=1;break;
case(0xb0):flag2=1;break;
case(0x70):flag3=1;break;
}
}
}
//扫描第二行
P3=0x7f;
n=P3;
n&=0xf0;
if(n!=0xf0)
{
delay();
P0=0x7f;
n=P0;
n&=0xf0;
if(n!=0xf0)
{
switch(n)
{
case(0xd0):flag4=1;break;
case(0xb0):flag5=1;break;
case(0x70):flag6=1;break;
default:flag1=1;break;
}
}
}
}
void main()
{
char i,j;
int m,n;
for(j=0;j<3;j++)
{
P2=0x00;
P3=0x00;
delay(600);
P2=0xff;
P3=0xff;
delay(600);
}
while(1)
{ keyscan();
if(flag1)
{ m=0x80;
n=0x80;
for(i=0;i<=8;i++)
{ P2=~m;
m=m>>1;
delay(600);
}
LED8=1;
for(j=0;j<=5;j++)
{ P3=~n;
n=n>>1;
delay(600);
}
LED9=1;
}
if(flag2)
{int p,q;
int i,j;
while(1)
{ p=0x80;
q=0x80;
for(i=0;i<=8;i++)
{ P2=~p;
p=p<<1;
delay(600);
}
LED1=1;
for(j=0;j<=5;j++)
{ P3=~q;
q=q<<1;
delay(600);
}
LED12=1;
}
}
}
}
|