#include #include #define RL(x) _crol_(x,1); // 重新定義 RL左旋函式 void delay(int t); void main(void) { unsigned char kb_buf,x,tmp; while(1) { kb_buf = 0xfe; for (x=0;x<4;x++) { P0 = kb_buf; tmp = P0; while((tmp & 0xf0) != 0xf0) //將P0.3~P0.0清為0, 判斷P0.7~P0.4是否皆為1,如果不是,代表有按鍵被壓下 { delay(3); //延遲, 判斷是否為彈跳訊號 tmp = P0; if ((tmp & 0xf0) != 0xf0) //如果P0.7~P0.4仍然有0的情況, 則表示非彈跳訊號 P2 = P0; //將P0的按鍵值送到P2顯示 do{ tmp = P0; //讀回按鍵值 }while((tmp & 0xf0) != 0xf0); //直到P0.7~P0.4皆為1為止(代表按鍵已放開) } kb_buf = RL(kb_buf); //掃描資料左旋, 準備掃描下一行 } } } void delay(int t) // 延遲函數開始 { int i,j; // 宣告整數變數i,j for (i=0;i