#include void main(void) { int de = 500; P2 = 0xf0; if((P2 & 0xf0) != 0xf0) while(de--); if((P2 & 0xf0) != 0xf0) { P2= 0xfe; if((P2 & 0xfe) == 0xee) P1 = 0x07; if((P2 & 0xfe) == 0xde) P1 = 0x7f; if((P2 & 0xfe) == 0xbe) P1 = 0x6f; if((P2 & 0xfe) == 0x7e) P1 = 0x49; //头文件 //根据扫描原理:将行置低电平,列置高电平 //判断是否有键按下 //延时去抖动 //再次判断是否有键按下 //扫描第一行 //扫描第一行第一列 //显示第一个键 //扫描第一行第二列 //显示第二个键 //扫描第一行第三行 //显示第三个键 //扫描第一行第四行 //显示第四个键 //########################### P2 = 0xfd; //扫描第二行 if((P2 & 0xfd) == 0xed) //扫描第二行第一列 P1 = 0x66; //显示第五个键 if((P2 & 0xfd) == 0xdd) //扫描第二行第二列 P1 = 0x6d; //显示第六个键 if((P2 & 0xfd) == 0xbd) //扫描第二行第三列 P1 = 0x7d; //显示第七个键 if((P2 & 0xfd) == 0x7d) //扫描第二行第四列 P1 = 0x76; //显示第八个键 //############################# P2 = 0xfb; //扫描第三行 if((P2 & 0xfb) == 0xeb) //扫描第三行第一列 P1 = 0x06; //显示第九个键 if((P2 & 0xfb) == 0xdb) //扫描第三行第二列 P1 = 0x5b; //显示第十个键 if((P2 & 0xfb) == 0xbb) //扫描第三行第三列 P1 = 0x4f; //显示第 11 个键 if((P2 & 0xfb) == 0x7b) //扫描第三行第四列 P1 = 0x40; //显示第 12 个键 //########################## P2 = 0xf7; //扫描第四行 if((P2 & 0xf7) == 0xe7) //扫描第四行第一列 P1 = 0x01; //显示第 13 个键 if((P2 & 0xf7) == 0xd7) //扫描第四行第二列 P1 = 0x3f; //显示第 14 个键 if((P2 & 0xf7) == 0xb7) //扫描第四行第三列 P1 = 0x09; //显示第 15 个键 if((P2 & 0xf7) == 0x77) //扫描第四行第四列 P1 = 0x46; //显示第 16 个键 } } //---------------------------------------------//行\列 P2.4 p2.5 P2.6 P2.7 // | | | | //P2.0-------|-------|--------|--------|---------//P2.1-------|-------|--------|--------|---------//P2.2-------|-------|--------|--------|----------//P2.3-------|-------|--------|--------|----------