uchar kbscan(void) /*键扫描函数*/
{
uchar j;
uchar sccode,recode;
P2=0x0f; /*发0行扫描码*/
if((P2 & 0x0f)!= 0x0f) /*若有键按下*/
{
dlms();
if((P2&0x0f)!= 0x0f) /*逐行扫描初值*/
{
sccode=0xfe;
for(j=4;j>0;j--)
{
while((sccode&0x10)!=0)
{
P2=sccode; /*输出行扫描码*/
if((P2&0xf0)!=0xf0) /*本行有键按下*/
{
recode=(P2&0xf0)|0x0f;
return((~sccode)+(~recode)); /*返回特征字节码*/
}
else
sccode=(sccode<<1)|0x01; /*行扫描码做移一位*/
}
}
}
}
return(0); /*无键按下,返回0值*/
}
{
uchar j;
uchar sccode,recode;
P2=0x0f; /*发0行扫描码*/
if((P2 & 0x0f)!= 0x0f) /*若有键按下*/
{
dlms();
if((P2&0x0f)!= 0x0f) /*逐行扫描初值*/
{
sccode=0xfe;
for(j=4;j>0;j--)
{
while((sccode&0x10)!=0)
{
P2=sccode; /*输出行扫描码*/
if((P2&0xf0)!=0xf0) /*本行有键按下*/
{
recode=(P2&0xf0)|0x0f;
return((~sccode)+(~recode)); /*返回特征字节码*/
}
else
sccode=(sccode<<1)|0x01; /*行扫描码做移一位*/
}
}
}
}
return(0); /*无键按下,返回0值*/
}