我终于明白了,感谢大家的提醒,第二排键盘不能发送数据是因为把P3.1口拉低了,问题在于P3.1口有第二功能引脚TXD,此引脚只有在高电平下才能工作;而我一直把它拉低,所以即使检测到键盘按下也不能发送数据,所以在发送数据前还得把P3.1口拉高
正确程序如下:
unsigned char code table[]={
48,49,50,51,
52,53,54,55,
56,57,58,59};
void display();
void main()
{
TMOD=0x20;
TH1=0XE8;
TL1=0XE8;
TR1=1;
SM0=0;
SM1=1;
while(1)
{
display();
}
}
void display()
{
P3=0xfe;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
switch(temp)
{
case 0xe0:num=1;break;
case 0xd0:num=2;break;
case 0xb0:num=3;break;
case 0x70:num=4;break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
P3=0xff;
P1=table[num];
SBUF=table[num];
while(!TI);
TI=0;
}
P3=0xfd;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
switch(temp)
{
case 0xe0:num=5;break;
case 0xd0:num=6;break;
case 0xb0:num=7;break;
case 0x70:num=8;break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
P3=0xff;
P1=table[num];
SBUF=table[num];
while(!TI);
TI=0;
}
P3=0xfb;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
switch(temp)
{
case 0xe0:num=9;break;
case 0xd0:num=10;break;
case 0xb0:num=11;break;
case 0x70:num=12;break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
if(num==9)
{
P3=0xff;
SBUF=table[num];
while(!TI);
TI=0;
}
else
{
SBUF=49;
while(!TI);
TI=0;
P3=0xff;
SBUF=table[num-10];
while(!TI);
TI=0;
}
}
P3=0xf7;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
switch(temp)
{
case 0xe0:num=13;break;
case 0xd0:num=14;break;
case 0xb0:num=15;break;
case 0x70:num=16;break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
SBUF=49;
while(!TI);
TI=0;
P3=0xff;
SBUF=table[num-10];
while(!TI);
TI=0;
}
} |