键扫描函数:这一句俺没看懂: while((scancode&0x10)!=0) 这句怎么理解啊?为什么这句是逐行扫描的开始?
求解
/* 键扫描函数 */ uchar keyscan(void) { uchar scancode,tmpcode; P1 = 0xf0; // 发全0行扫描码 if ((P1&0xf0)!=0xf0) // 若有键按下 { delay(); // 延时去抖动 if ((P1&0xf0)!=0xf0) // 延时后再判断一次,去除抖动影响 { scancode = 0xfe; while((scancode&0x10)!=0) // 逐行扫描 //就是这一句 { P1 = scancode; // 输出行扫描码 if ((P1&0xf0)!=0xf0) // 本行有键按下 { tmpcode = (P1&0xf0)|0x0f;
/* 返回特征字节码,为1的位即对应于行和列 */ return((~scancode)+(~tmpcode)); } else scancode = (scancode<<1)|0x01; // 行扫描码左移一位 } } } return(0); // 无键按下,返回值为0 }
|