#define	KEYP P1		// 掃瞄輸出埠(高位元)及鍵盤輸入埠(低位元)
unsigned char scan[4]={ 0xef, 0xdf ,0xbf ,0x7f }; // 7顯示器及鍵盤之掃瞄碼 
// ======= 掃瞄4*4鍵盤及4個7節顯示器函數 ================
void scanner(void)					// 掃瞄函數開始 
{	unsigned char col,row,dig;  	// 宣告變數(col:行,row:列,dig:顥示位)
	unsigned char rowkey,kcode;		// 宣告變數(rowkey:列鍵值,kcode:按鍵碼)
	for(col=0;col<4;col++)    		// for迴圈,掃瞄第col行 

	{	KEYP  = scan[col];			// 高4位輸出掃瞄信號,低4位元輸入列值 
		SEG7P = disp[col];			// 輸出第col行數字 
		rowkey= ~KEYP & 0x0f;
		// 讀入KEYP低4位，反相再清除高4位求出列鍵值 	
		if(rowkey != 0)				// 若有按鍵 
		{	if(rowkey == 0x01)     	row=0;	// 若第0列被按下 
			else if(rowkey == 0x02)	row=1;	// 若第1列被按下 
			else if(rowkey == 0x04)	row=2;	// 若第2列被按下 
			else if(rowkey == 0x08)	row=3;	// 若第3列被按下 
			kcode = 4 * col + row;			// 算出按鍵之號碼 
			for(dig = 0; dig < 3 ; dig++)	// 顯示陣列之左3字 
				disp[dig]=disp[dig+1];		// 將右側編碼左移1位 
			disp[3]=TAB[kcode];				// 鍵值編碼後，寫入最右側 
			while(rowkey != 0)				// 當按鈕未放開 	
				rowkey=~KEYP & 0x0f;		// 再讀入列鍵值 
		}						//	if敘述(有按鍵時)結束 	
		delay1ms(4);			//	延遲4ms
	}							//	for迴圈結束(掃瞄col行)
}								//	掃瞄函數scanner()結束	
