1.先判断是否有建按下,P0低四位置为0,高四位为1, 2.延时防抖在判断(中断可以省) 3.P0低四位的第一位置0;检查高四位的那一个位为0; 4.返回编码uchar key_scan() { uchar rCode,cCode; P0=0XF0; if((P0&0XF0)!=0xf0) { Delay(); if((P0&0XF0)!=0xf0) { rCode=0xfe; if((P0&0XF0)!=0xf0) { P0=rCode; while(rCode&0x10) { cCode=(P0&0Xf0)|0x0f; return (~rCode)+(~cCode); } } else rCode=rCode<<1|0x01; } } else retrunt 0; }