#include "reg52.h"
#include "math.h"
#define KEY P1
#define LED P0
typedef unsigned int uint;
typedef unsigned char uchar;
uchar duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,
0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};
void delay(double a)
{
uint b=a*100;
while(b--);
}
int key_scan()
{
int n,m;
for(n=0;n<4;++n)
{
KEY=~(0x01<<n);
if(KEY!=~(0x01<<n))
{
delay(10);
if(KEY!=~(0x01<<n))
{
switch(KEY&0xF0)
{
case 0x70:m=4-n;break;
case 0xb0:m=8-n;break;
case 0xd0:m=12-n;break;
case 0xe0:m=16-n;break;
}
}
while(KEY!=~(0x01<<n));
return m;
}
}
return 0;
}
void smg(int s)
{
if(s>0)
{
LED=duan[s-1];
}
}
void main()
{
while(1)
{
smg(key_scan());
}
}
下面这句
int n,m;
在前面加上valotile试试
valotile int n,m;
P1读之前得写FF,你最好把for前边的值赋值给另外一个变量用那个变量判断,不要再用KEY也就是P1读取了