单片机一段代码,输入信号感到困惑!!
/*键扫描子程序*/void keyscan(void)
{
P1=0x0F ; //低四位输入
delay(1) ;
temp=P1 ; //读P1口
temp=temp&0x0F ;
temp=~(temp|0xF0) ;
if(temp==1)
key=0 ;
else if(temp==2)
key=1 ;
else if(temp==4)
key=2 ;
else if(temp==8)
key=3 ;
else
key=16 ;
P1=0xF0 ; //高四位输入
delay(1) ;
temp=P1 ; //读P1口
temp=temp&0xF0 ;
temp=~((temp>>4)|0xF0) ;
if(temp==1)
key=key+0 ;
else if(temp==2)
key=key+4 ;
else if(temp==4)
key=key+8 ;
else if(temp==8)
key=key+12 ;
else
key=16 ;
if(key>=12&&key<=16&&kaishi==1&&daoshi==1)
{
dis_buf[7]=table ; //查表得键值
kaishi=0 ;
TR1 = 0 ;
beep1() ;
qiangda=0 ;
}
else if(key == 8 && qiangda==1) // 抢答开始
{
TR1 = 1 ;
kaishi=1 ;
beep2() ;
shezhi=0 ;
}
else if(key == 9) // 复位
{
TR1 = 0 ;
hour = shour ;
kaishi=0 ;
daoshi=1 ;
shezhi=0 ;
qiangda=1 ;
if(shour > 9)
dis_buf[0] = table ;
else
dis_buf[0] = 0xff ;
dis_buf[1] = table ;
dis_buf[7] = table[0] ;
}
else if(key == 4 && kaishi==0) // 设置限时
{
shezhi=1 ;
}
else if(key == 5&& shezhi==1) // 增加时间
{
shour++ ;
if(shour > 99)
{
shour = 0 ;
}
if(shour > 9)
dis_buf[0] = table ;
else
dis_buf[0] = 0xff ;
dis_buf[1] = table ;
hour=shour ; //开始使用新限时
delay(250) ; //延时
}
else if(key == 6&& shezhi==1) // 减少时间
{
if(shour == 0)
{
shour = 100 ;
}
shour-- ;
if(shour > 9)
dis_buf[0] = table ; // 十位
else
dis_buf[0] = 0xff ; // 当十位为0时不显示
dis_buf[1] = table ; // 个位
hour=shour ; //开始使用新限时
delay(250) ; //延时
}
}
貌似shi 用8个口实现了16个口得输入?????
还是理解有误?