현재 위치 - 인적 자원 플랫폼망 - 미니프로그램 자료 - 키보드 스캐너의 기능은 무엇입니까?
키보드 스캐너의 기능은 무엇입니까?
Epson ds770 스캐너의 키 입력 기능

스캔 기능을 시작합니다. 엡슨 ds770 스캐너의 기능은 대상 애플리케이션이나 엡슨 사진 공유 사이트로 데이터를 스캔하고 전송하는 것입니다. 사용하기 전에 스캔해야 할 파일을 엡슨 ds770 에 넣은 다음 스캐너 버튼을 클릭하여 스캔해야 합니다.

단일 칩 키보드 스캐너

2*3 키보드는 너무 간단해서 재활용할 가치가 없다. 특히 이중순환이다.

가장 간결하고 효과적인 절차는 다음과 같습니다.

Sbitp10 = p10;

Sbitp11= p11;

Sbitp12 = p12;

Sbitp13 = p13;

Sbitp14 = p14;

Charscan_key(void)

{

P13 = 0;

만약 (! P10) 복귀 0;

만약 (! P11) return1;

만약 (! P12) 복귀 2;

P13 =1;

P14 = 0;

만약 (! P10) return 3 :

만약 (! P11) return 4;

만약 (! P12) return 5;

}

이 프로세스는 가장 적은 변수를 사용하며 다른 인터페이스는 포함하지 않습니다.

코드가 가장 적고 실행 효율이 가장 높다.

이 키보드 스캐너를 어떻게 해석합니까?

0x 10 이 이진으로 변환될 때 000 10000 이고, 고 4 자리가 열인 경우 프로그램은 열별로 스캔하고, 가장 낮은 열부터 마스크로 1 명만 남깁니다.

P1= 0xf0; //모든 0 행 스캔 코드를 보냅니다. 즉, 모든 열이 먼저 높고 행 위치가 낮습니다. 이것이 초기 값입니다. 회로도를 보고 버튼을 누르면 머릿속에서 프로그램을 분석할 수 있는 것이 좋습니다.

If((P 10xf0)! =0xf0)// 키를 눌렀을 경우, 이 말이 참일 경우, 키가 하나 이상 눌러져 있지만 어느 열인지 분간할 수 없습니다. 그것은 버튼만 눌렀다는 것을 증명할 수 있을 뿐, 물론 어느 줄인지 분간할 수 없다.

Scancode = 0xfe// 이 말은 스캔 코드에 초기 값을 설정하는 것이고 0xfe 는 바이너리1111/kloc 입니다

While((scancode0x 10)! =0)// 한 줄씩 스캔합니다. 아까 말씀드렸듯이 이 0x 10 은 바이너리 000 10000, 스캔 코드1/kloc-0 입니다 이 방법은 여러 키를 동시에 누르는 경우를 처리할 수 없습니다. 한 키를 누르면 뒤가 스캔되지 않기 때문에 낮은 것이 우선입니다. 이때 스캔 코드 자체가 해당 행의 값입니다.

P 1 = 스캔 코드; //라인 스캔 코드를 출력합니다. 스캔 코드의 값은111111/kloc 입니다

If((P 10xf0)! =0xf0)// 이 판단에서 P 1 은 AND 입니다. 키가 없는 경우 P 1 은 scancode 의 값과 같아야 합니다. 0xf0 이후와 그 후, 고 4 자리는 1 1 10000 을 남겼다. 확실히 1 1 10000 과 같지 않습니다. 예를 들어 1 1 100000 이면 표현식은 참입니다.

Tmp 코드 = (p10xf0) | 0x0f; //이 문장에서 P 1 의 값과 0x0f 는 또는 연산하고, 낮은 4 자리는 1 열 스캔 코드입니다.

Return ((~ scan code)+(~ tmpcode)); //다른 비트는 모두 1 으로 채워져 있기 때문에 각 획의 결과는 1 이고, 반대로 출력한 결과는 1 코드만 있습니다.

Else scan code = (scan code1) | 0x01; //줄 스캔 코드를 왼쪽으로 한 자리 이동하여 스캔 코드를111111/kloc-0 에서 가져옵니다 0x00 1 의 가장 낮은 비트를11111/kloc 로 변경했습니다 1111111및/kloc-가 차례로 변경됩니다

위 절차를 반복하여 모든 검사를 완료합니다.

간단히 말해서, 키 지터를 제거하는 것입니다. 단일 칩 마이크로 컴퓨터가 키 값을 올바르게 읽고 간섭 신호를 차단할 수 있도록 합니다.

일반적으로 키에 사용되는 스위치는 기계적 탄성 스위치입니다. 기계적 접점이 열리거나 닫히면 키 스위치가 닫히면 즉시 안정적으로 켜지지 않으며, 켜도 즉시 꺼지지 않습니다. 그래서 폐쇄와 개방의 순간에 일련의 떨림이 있는데, 이런 현상을 피하는 조치는 키의 떨림을 없애는 것이다.

이 키보드 스캐너를 이해하는 방법 (급함! ! ! ! ) 을 참조하십시오

프로그램에 문제가 있습니다!

#includereg5 1.h

# math.h 포함

#includeintrins.h

#defineucharunsignedchar

# define tur 1

#defineFALSE0

Intkey

Intdel

VoidTkey (유효하지 않음);

* * * * * * * * * * * 주 프로그램 * * * * * * * * *

Voidmain (유효하지 않음)

{

Voidtkey (유효하지 않음);

Void delay (int) :

Scon = 0x00;

TI = 0;;

비록 (정말로)

{

Tkey ();

지연 (2000 년);

}//이것은 무한 루프입니다.

}

VoidTkey (유효하지 않음)

{

Ucharreadkey// 다시 읽기 키;

Ucharx_temp, y _ temp

/* 당신이 준 프로그램은 당신의 키보드가 4X4 */

P1= 0x0f; //행에 하이 레벨을 보내고 열에 로우 레벨을 보냅니다.

X _ temp = p10x0f; //회선 상태 다시 읽기

If (if(x _ temp = = 0x0f)gotokeyout;; /* 행에 로우 레벨이 있는 경우 0x0f 와 같지 않습니다.

/* 키를 눌렀음을 나타냅니다.

P1= 0xf0; //주어진 열에 고평을 보내고, 행에 저평을 보냅니다.

Y _ temp = p10xf0; //줄 상태를 다시 읽습니다.

Readkey = x _ temp | y _ temp// 행 상태 열 상태를 결합하여 키를 나타냅니다.

Readkey = ~ readkey// 반대 접근 방식을 취하다

스위치 (리드 키)//키 코드를 결정합니다.

{

케이스 0x11:키 = 0; 깨뜨리다

Case0x21:key =1; 깨뜨리다

Case0x41:키 = 2; 깨뜨리다

케이스 0x81:키 = 3; 깨뜨리다

케이스 0x12: 키 = 4; 깨뜨리다

Case0x22: 키 = 5; 깨뜨리다

Case0x42: 키 = 6; 깨뜨리다

Case0x82: 키 = 7; 깨뜨리다

케이스 0x14: 키 = 8; 깨뜨리다

Case0x24: 키 = 9; 깨뜨리다

Case0x44: 키 =10; 깨뜨리다

Case0x84: 키 =11; 깨뜨리다

케이스 0x18: 키 =12; 깨뜨리다

Case0x28: 키 =13; 깨뜨리다

Case0x48: 키 =14; 깨뜨리다

Case0x88: 키 =15; 깨뜨리다

기본값: 키 =16; 깨뜨리다

}

Keyout: _ nop _ ();

}

/* * * * * * * * * * * 지연 절차 * * * * * * * * *

잘못된 지연

{

For(del;; Del 0 del-);

}

키보드 스캔은 어떻게 작동합니까? 프로그램에서 어떤 전문가가 답을 주어야 합니까?

*

P2 포트는 4X4 매트릭스 키보드입니다.

P0 포트는 8 개의 발광 다이오드로 버튼을 표시하는 데 사용됩니다.

*/

#includereg52.h

UnsignedcharTrg

UnsignedcharCont

VoidKeyRead(void)

{

UnsignedcharReadData

P2 = 0x0f;;

Readdata = p2;

P2 = 0xf0;

Readdata = (readdata | p2) 0xff;

Trg = trg=readdata(readdata^cont););

Cont = ReadData

}

VoidKeyProc(void)

{

If(Trg)// 누르면.

{

P0=trg^0xff;; //코드가 실행되었습니다

}

If(Cont)// 키를 누르면.

{

}

If(Trg==0Cont==0)// 누르고 놓기.

{

P0 = 0xff

}

}

Voidmain ()

{

Trg = 0;;

Cont = 0;;

While( 1)

{

키 리드 ();

Keyproc ();

}

}