?? l5-9.c
字號:
/**********************************************************************
程序名稱:L5-9.c
程序功能:4×4矩陣非編碼鍵盤的應用
程序作者:張三
創建時間:2008-3-28
**********************************************************************/
#include<reg51.h>
#define unchar unsigned char
#define unint unsigned int
unchar HSM,LJC,keyvalue; // HSM為行掃描碼,LJC為列檢測數據,keyvalue為鍵值
unchar tmp; // 用于主函數中接收鍵值
void delayXms( unint x );
unchar keyscan( void );
/**********************************************************************
函數名稱:main( void )
函數功能:主函數,鍵值處理
函數作者:張三
創建時間:2008-3-28
**********************************************************************/
void main( void )
{
while( 1 ){
tmp = keyscan( );
switch( tmp ){
case 0x11: P0 = 0x3f; break; // 0
case 0x21: P0 = 0x06; break; // 1
case 0x41: P0 = 0x5b; break; // 2
case 0x81: P0 = 0x4f; break; // 3
case 0x12: P0 = 0x66; break; // 4
case 0x22: P0 = 0x6d; break; // 5
case 0x42: P0 = 0x7d; break; // 6
case 0x82: P0 = 0x07; break; // 7
case 0x14: P0 = 0x7f; break; // 8
case 0x24: P0 = 0x6f; break; // 9
case 0x44: P0 = 0x77; break; // A
case 0x84: P0 = 0x7c; break; // b
case 0x18: P0 = 0x39; break; // C
case 0x28: P0 = 0x5e; break; // d
case 0x48: P0 = 0x79; break; // E
case 0x88: P0 = 0x71; break; // F
default: P0 = 0x00;
}
delayXms( 100 );
}
}
/**********************************************************************
函數名稱:delayXms( unsigned int x )
函數功能:延時函數,Xms
函數作者:張三
創建時間:2008-3-28
**********************************************************************/
void delayXms( unint x )
{
unchar y, z;
for( ; x>0; x-- )
for( y=0; y<4; y++ )
for( z=0; z<250; z++ ) ;
}
/**********************************************************************
函數名稱:unchar keyscan( void )
函數功能:鍵盤掃描及鍵值確定
函數作者:張三
創建時間:2008-3-28
**********************************************************************/
unchar keyscan( void )
{
P1 = 0xf0; // 行線全為低電平, 列線全為高電平
LJC = P1&0xf0; // 第1次讀列檢測狀態
if( LJC != 0xf0 ){
delayXms( 10 ); // 若有鍵被按下, 則延時10ms
LJC = P1&0xf0; // 第2次讀列檢測狀態:0xe0, 0xd0, 0xb0, 0x70
if( LJC != 0xf0 ){ // 若有閉合鍵, 則逐行掃描
HSM = 0xfe; // 掃描碼分別為0xfe,0xfd,0xfb,0xf7
while((HSM&0x10)!=0){ // 若掃描碼為0xef, 則結束掃描
P1 = HSM; // 輸出行掃描碼
LJC = P1&0xf0; // 讀列檢測數據:0xe0, 0xd0, 0xb0, 0x70
if( LJC != 0xf0 ){ // 本行有閉合鍵
keyvalue = ( ~HSM )+( ~(LJC|0x0f) ); // 計算鍵值
return( keyvalue ); // 返回鍵值
}
else HSM = (HSM<<1)|0x01; // 行掃描碼左移1位,準備掃描下一行
}
}
}
return( 0x00 );
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -