//MS80C51 //4*4键盘扫描 //P2^1~P2^3接键盘row //P2^4~P2^7接键盘column //LED_SCAN.H为LED显示所需要的自定义头文件 #include "LED_SCAN.H" #include <reg51.h> #define unchar unsigned char //返回特殊数据1的位数 //如00001000返回4,再如00000100返回3 unchar GetLocation(unchar value) { unchar location=0; if(value!=0) { while(value) { location++; value=value>>1; } } return location; } void Delay() { unsigned char a,b; for(a=0;a<50;a++) for(b=0;b<100;b++); } void main() { unchar row=0; unchar column=0; P2=0x0f; //00001111 while(1) { if(P2!=0x0f) { row=GetLocation(~(P2|0xf0)); //找出被按下的键在哪一排 P2=0xf0; //11110000 if(P2!=0xf0) { column=GetLocation(~((P2>>4)|0xf0)); //找出被按下的键在哪一列 } else { row=0; column=0; } } Delay(); LedStore(row,column); //装载 LedScan(); //LED显示 row=0; column=0; P2=0x0f; } }