컴퓨터 지식 네트워크 - 컴퓨터 지식 - C51 매트릭스 키보드 스캔 절차, 특히 주요 단계를 설명해주세요. ! !

C51 매트릭스 키보드 스캔 절차, 특히 주요 단계를 설명해주세요. ! !

C51 P1 포트 4X4 키보드 설명

C51 마이크로 컨트롤러 P1 포트로 만든 4X4 키보드입니다. p1 포트의 하위 4비트는 키보드 열 스캔 라인이며, 상위 4비트는 키보드 행,

열 스캔 라인이 출력되고 행 스캔 라인이 입력됩니다.

다음은 프로그램에 대한 설명입니다

(***)는 주의 사항을 나타냅니다

1. 먼저 키보드 전체가 눌려져 있는지 확인합니다. , 행 스캔인 경우 라인 입력이 모두 1이 아닌 경우 (1111)은 키가 눌려 있음을 의미합니다.

P1 = 0xf0;if((P1&0xf0)!=0xf0) 키가 없는 경우 pressed, all 1, then return -1 ;

눌린 키가 있으면 지연하고 키가 눌렸는지 다시 판단합니다. Delay();if((P1&0xf0)!=0xf0) If 아무 키도 누르지 않으면 -1을 반환합니다.

키를 눌렀을 때 계속 진행됩니다. *** 또는 키를 읽을 때 키가 눌리지 않을 정도로 진동하기 때문입니다. 키 값을 입력하면 *** 열 스캔 라인이 모두 0, P1 = 0xf0을 출력합니다.

2. 키 값을 읽기 위해 입력. 위와 다르게 판단할 때마다 *** 열의 한 스캔 라인만 0을 출력합니다. 즉, P1=0xfe, 0xfd, 0xfb , 0xf7;

첫 번째, 열 스캔 라인 P1.0, sCode = 0xfe; 행 스캔 라인이 모두 1이면 이 열에서 키가 눌러지지 않고 다음 열이 스캔됩니다.

sCode = _crol_(sCode,1); ***sCode는 한 비트 왼쪽으로 이동합니다. 즉, 4번 스캔되고 모든 행 스캔 라인이 모두 0이면 키가 눌러지지 않습니다.

Return return -1;

행 스캔 라인이 모두 0이 아닌 경우, 즉 키를 누르고 이제 키 값을 읽을 수 있는 경우

kCode = ~P1; //P1=EE,ED...

for(i =0;i<16;i++)

{

if( kCode == KeyCodeTable[i])

return i;

}

1. 첫 번째 kCode = ~P1; 역방향 행 스캔에 대한 p1 값 line은 1, 2, 4, 8일 수 있습니다. 동일한 열 스캔 라인에 대해 해당 값은 1, 2, 4, 8입니다.

총 p1에는 16개의 값이 있으며 이는 x11입니다. 0x12,0x14,0x18,0x21,0x22,0x24,0x28,

0x41,0x42, KeyCodeTable[i] 테이블 0x44,0x48,0x81,0x82,0x84,0x88

(kCode == KeyCodeTable[i])가 true이면 해당 i 값이 키 번호입니다.

2. 반환된 i 값은 키 번호, return i;입니다.

uchar Keys_Scan()

{

uchar sCode,kCode,i,k;

P1 = 0xf0;

if((P1&0xf0)!=0xf0) //열 스캔

{

Delay();

if((P1&0xf0)!=0xf0 )//디바운스

{

sCode = 0xfe

for(k=0;k<4;k++)

{

P1 = sCode;//낮은 비트 찾기

if((P1&0xf0)!=0xf0)//P1 및 0xf0과 같을 경우에만 else를 실행하고 AND는 0xf0이고 true는 True이고 하나의 false는 false입니다.

{

kCode = ~P1 //P1=EE,ED...

for( i=0;i <16;i++)

{

if(kCode == KeyCodeTable[i])

return i;

}

}

else

sCode = _crol_(sCode,1);

}

}

}

return -1;

}

上篇: 120 위안 무료 호스트 게임 소프트웨어 下篇: Foxmail 원격 호스트 강제 종료
관련 내용