{
i |= ~KeyValue; //組成完整的字節(jié)
if (~i &RCtrl)
//該鍵是上檔鍵
{
kpd->shiftcnt++; //上檔鍵個數(shù)加1 ??
//這里不對
for(j=0;j<6;j++)
{
if((0x01<<j)==RCtrl)
{
kpd->shiftval = j+1; //上檔鍵值存入上檔鍵值緩沖 ??
}
}
}
else
{
for(j=0;j<6;j++)
{
if((0x01<<j)==~i)
{
kpd->funcnt++; //功能鍵個數(shù)加1 ??
kpd->funval =j+1; //上檔鍵值存入上檔鍵值緩沖 ??
}
}
}
}
KEY_DDR = OUT; //數(shù)據(jù)端口還原為輸出
}
/*******************************************************************************
*函數(shù)原型: void key();
*功能:鍵盤掃描,返回上檔鍵個數(shù),上檔鍵值,功能鍵個數(shù),功能鍵值
*參數(shù):
*說明:
*******************************************************************************/
void key()
{
uchar krpt = RConti;
static uchar keycnt;
static uchar keyesc;
keyret keytemp =
{
0x00, 0x00, 0x00, 0x00
};
if (keydone) //上次按鍵任務(wù)已完成
{
scankey(&keytemp); //掃描鍵盤
if (!keytemp.funcnt || keytemp.shiftcnt > 1) //功能鍵計(jì)數(shù)器為0或上檔鍵個數(shù)多于1





