컴퓨터 지식 네트워크 - 컴퓨터 프로그래밍 - 왜 키보드를 뜯어서 다시 설치하면 타자를 칠 수 없습니까? 그 위의 등불은 켜자마자 번쩍인다.

왜 키보드를 뜯어서 다시 설치하면 타자를 칠 수 없습니까? 그 위의 등불은 켜자마자 번쩍인다.

기계건반

기계식 키보드는 일반적으로 금속 접점 스위치의 원리와 유사하여 접점을 켜거나 분리합니다. 실제 응용에서는 기계 머리의 구조적 형태가 여러 가지가 있으며, 가장 많이 사용되는 것은 교차 접촉이다. 그것의 장점은 견고하고 내구성이 있고 단점은 방수가 되지 않는다는 것이다. 두드리기 힘들면 타자가 빨라도 글자가 빠지기 쉽다. 하지만 지금은 좀 더 좋은 기계 키보드에 클릭 기능이 추가되어 있습니다. 실제로, 기계적인 구조에서 클릭 기능을 개량 하 고, 캐시를 증가 하 고, 빠른 타이핑에서 낱말 누출을 방지 한다. 그 수명은 약 5000 만에서 1 억회로 평균 사용자가 10 년 동안 키보드를 약 20 만 번 두드린다. 그래서 좋은 기계 키보드는 평생 쓸 것이다.

박막

플라스틱 박막 키보드는 4 층이 있다. 플라스틱 필름의 한 층에는 볼록한 전도성 고무가 있고, 그 중 한 층은 격리층이고, 상하 두 층은 접점이 있다. 키를 눌러 고무 볼록점을 눌러 상하 2 층 접점이 닿도록 하여 코드를 출력합니다. 이 키보드는 기계적으로 마모되지 않고 안정성이 높아 현재 시장에서 상당한 비중을 차지하고 있지만 많은 JS 에서도 상대적으로 저렴한 키보드를 접점식 키보드로 사용하고 있습니다. 그것의 가장 큰 특징은 가격이 낮고, 소음이 적고, 비용이 낮다는 것이다.

전도성 고무 키보드

전도성 고무 키보드 접점의 접촉은 전도성 고무로 만들어졌다. 그 구조는 볼록점이 있는 전도성 고무층으로 되어 있고, 볼록점은 전도성이 있으며, 이 부분은 각 키에 대한 것이고, 서로 연결된 평면 부분은 전도성이 없다. 키 캡을 누르면 볼록점이 전도성이기 때문에 아래쪽 접점이 눌려 제때 맞지 않으면 볼록점이 튕겨집니다. 현재 쓰는 것도 비교적 많다.

접점식 키보드

용량 성 키보드는 용량 성 스위치의 원리와 유사하며 버튼을 눌러 전극 사이의 거리를 변경함으로써 커패시턴스를 변경하고 일시적으로 충격 펄스가 통과 할 수있는 조건을 형성합니다. 콘덴서의 콘덴서는 매체, 양극 거리 및 양극 면적에 의해 결정된다는 것을 알고 있습니다. 따라서 키 캡이 눌러지면 극 사이의 거리가 변경되어 콘덴서가 변경됩니다. 매개 변수는 적절하게 설계되었고, 키를 누르면 출력이 있고, 키를 누르지 않으면 출력이 없다. 출력은 성형 및 증폭 후 인코더를 구동합니다. 콘덴서 무접촉으로 인해 작업 중 마모, 접촉 불량 등의 문제가 없어 내구성, 감도, 안정성이 우수합니다. 먼지가 전극 사이에 들어가지 않도록 접점식 키 스위치는 밀봉하여 조립한 것이다. 10 만 ~ 3000 만 건의 생명. 하지만 현재 시중에 나와 있는 진정한 접점식 키보드는 많지 않다. 대부분 처음 두 가지 키보드로 실제 접점식 키보드도 가격이 비교적 비싸다.

무선 키보드

물론 가장 고급은 무선 키보드입니다. 이름에서 알 수 있듯이 키보드와 컴퓨터 사이에는 직접적인 물리적 연결이 없으며 입력한 정보는 적외선이나 전파를 통해 특수 수신기로 전송됩니다. 수신기는 PS/2 또는 COM 포트, USB 포트 등을 연결하기만 하면 일반 키보드와 거의 동일하게 연결됩니다. , 그리고 구매할 때 반드시 차이에 주의해야 합니다. 무선 키보드에는 일반적으로 logo 뒤에 접미사 "RF" 가 붙어 라디오 전파가 지원됨을 나타냅니다. 현재 대부분의 제품의 주파수는 900 MHz, 455 MHz, 330MHz 입니다. 정보.

무선 키보드에는 건전지 전원이 필요하며 적외선 무선 키보드에 대한 엄격한 지향성, 특히 수평 위치 관계에 더 민감합니다. 수신기의 수신 각도가 제한되어 있기 때문에 (중앙선 6m), 키보드가 수신기에 너무 가까우면 고장이 나고 감도가 낮을 때 키를 빠르게 칠 수 없다. 그렇지 않으면 글자가 새어 나올 것이다. 라디오를 사용하는 키보드는 훨씬 유연합니다. 라디오가 방사형으로 전파된다는 점을 감안하면 근거리 작업의 동일 모델 (동일 주파수) 키보드가 서로 간섭하지 않도록 일반적으로 4 개 이상의 채널이 있으며 간섭이 발생하면 수동으로 주파수를 전환할 수 있습니다. 이동 요구를 충족시키기 위해 무선 키보드는 일반적으로 크기가 작고 마우스 기능이 통합되어 있습니다. 수신기와 호스트 사이에는 두 개의 인터페이스가 있습니다. 하나는 PS2 이고 다른 하나는 COM 포트입니다. 이 두 인터페이스 중 하나를 호스트에 연결하는 것으로 충분하지만 키보드의 마우스를 사용하지 않으려면 수신기의 PS2 포트만 호스트에 연결하면 되지만 COM 은 그렇지 않습니다! 수신기에는 외부 전원이 필요하지 않으며 키보드에 내장된 3 번 알카라인 배터리는 3 개월 동안 정상적으로 사용할 수 있습니다.

키보드의 발전 추세

키보드 개발의 경우, 키보드의 키 수가 점차 증가하고 있으며 (무제한은 아닙니다. 결국 키보드의 면적이 제한되어 있기 때문입니다.) 다기능 멀티미디어 방향으로 발전하고 있습니다. 초기에 출시된 컴퓨터는 83 키 키보드를 사용했고, 나중에는 84 키 디자인 표준을 도입하여 키보드를 리본, 타이핑 영역, 커서 제어 및 편집을 담당하는 하위 키보드 영역 등 세 영역으로 나누었다. 기능 키 영역의 커서 키와 숫자 키는 이중 기능 기호 키로 사용되며 하나의 "Numlock" 키를 사용하여 두 기능의 전환을 제어합니다. 현재 두 가지 키보드는 이미 드물지만 키보드 주요 영역의 구분은 당시의 기준에 따라 변함이 없다. (윌리엄 셰익스피어, 윈도, 키보드가, 건반, 건반, 건반, 건반, 건반, 건반) 1986 년 IBM 이 10 1 키 키보드를 출시할 때까지 기능이 더욱 확장되지 않았습니다. F 1 1 및 F 12 기능 키 외에도 키보드 중간에 특수 커서 제어 및 편집 키 세트가 추가되고 Microsoft WIN95 가 도입되었습니다. Fn 키, 바로 가기 키, 마우스와 태블릿이 있는 키보드 등이 있습니다.

일반적으로 사용되는 키보드 커넥터로는 AT 커넥터, PS/2 커넥터, USB 커넥터가 있습니다. 현재 대부분의 마더보드는 PS/2 키보드 커넥터, 즉 속칭' 작은 입' 을 제공한다. 호환 가능한 컴퓨터, 특히 오래된 마더보드는 AT 인터페이스, 즉' 큰 입' 을 제공하는 경우가 많다. 다행히 시중에 크기 포트 키보드 변환 커넥터가 있어 몇 달러면 되고, 두 인터페이스 키보드의 호환성 문제를 단번에 해결했다. 일부 회사에서는 USB 인터페이스가 있는 키보드도 출시했습니다. 최신 PC200 1 사양에 따르면 ISA 버스가 사라지면 ISA 버스를 통해 작동하는 모든 인터페이스가 USB 로 대체됩니다. USB 를 사용하면 다른 장치를 동시에 연결할 수 있습니다. 이는 HUB 를 통합하는 것과 같습니다. 예를 들어 마우스를 연결하면 실제로 마더보드의 COM 이나 PS/2 를 절약할 수 있습니다. 일부 키보드에는 PS/2 대 USB 회로가 통합되어 있어 더욱 편리합니다. 현재 그 보급을 가로막는 이유는 가격이 높기 때문이다. USB HUB 내장된 키보드의 경우 대부분 USB 커넥터를 사용합니다. 더 많은 USB 장치를 사용하려면 USB 허브 장치를 추가하여 USB 인터페이스 수를 확장해야 합니다. 하지만 전문 USB 허브는 비용이 많이 들기 때문에 USB 허브를 키보드나 모니터에 통합하고 성공하려고 합니다. 통합 USB 허브의 키보드는 종종 USB 커넥터 1 개를 사용하여 호스트와의 키보드 신호 전송을 유지하고 다른 장치 연결을 위한 USB 커넥터 2 ~ 4 개를 제공하는 경우가 많습니다. 간단히 말해서, 한 입씩 들어가면 전문 USB 허브보다 훨씬 싸다.

단일 칩 시스템에서 일반적으로 사용되는 키보드는 전용 키보드입니다. 이런 키보드는 자율적으로 설계한 것으로, 비용이 많이 들고 전선이 많고 신뢰성이 낮다. 이러한 문제는 더 많은 키보드 버튼이 필요한 애플리케이션 시스템에서 더욱 두드러집니다. 이에 비해 PC 시스템에서 널리 사용되는 PS/2 키보드는 대부분의 시스템 요구 사항을 충족할 수 있는 저렴하고, 일반적이며, 전선이 적습니다 (신호 케이블 2 개만 사용). 따라서 단일 칩 시스템에 PS/2 키보드를 적용하는 것이 좋습니다.

PS/2 프로토콜 및 PS/2 키보드의 작동 원리 및 특성 분석을 바탕으로 AT89C5 1 단일 칩 PS/2 키보드를 지원하는 하드웨어 연결 방법 및 드라이버 설계 및 구현이 제공됩니다.

1PS/2 프로토콜

현재 PC 에서 널리 사용되는 PS/2 커넥터는 miniDIN 6 핀 커넥터입니다. 핀은 1 과 같습니다.

1-데이터 케이블 2-사용되지 않음 : 3-전원지 (gnd);

4-전원 공급 장치 (+5v); 5-시계 (clock 6-사용되지 않음.

그림 1PS/2 커넥터 PS/2 장치는 마스터 및 슬레이브, 마스터 소켓은 마스터, 공용 소켓은 슬레이브 장치로 구분됩니다. 현재 널리 사용되는 PS/2 키보드 마우스는 슬레이브 모드에서 작동합니다. PS/2 인터페이스의 시계와 데이터 케이블은 모두 집전극 개방 구조이며, 반드시 외부 당기기 저항을 해야 한다. 인장 저항은 일반적으로 마스터 장치에 설정됩니다. 마스터-슬레이브 장치 간의 데이터 통신은 양방향 동기화 직렬 전송을 사용하며, 클럭 신호는 슬레이브 장치에서 생성됩니다.

(1) 장치에서 마스터 장치로의 통신

장치에서 마스터 장치로 데이터를 전송할 때 먼저 클럭 라인을 검사하여 클럭이 고평인지 확인합니다. 하이 레벨인 경우 장치에서 데이터 전송을 시작할 수 있습니다. 그렇지 않으면 디바이스에서 데이터 전송을 시작하기 전에 버스 제어를 기다려야 합니다. 각 전송 프레임은 1 1 비트로 구성됩니다. 전송 타이밍 및 각 비트의 의미는 그림 2 에 나와 있습니다.

그림 2 장치에서 마스터 장치로의 통신에서 각 프레임 데이터의 시작 비트는 항상 0 이고, 데이터 검증은 홀수 검사이며, 정지 비트는 항상 1 입니다. 슬레이브가 마스터와 통신할 때 슬레이브는 항상 클럭이 고평일 때 데이터 라인 상태를 변경하고, 마스터는 클럭의 하강에서 데이터 라인 상태를 읽습니다.

(2) 마스터 장치에서 슬레이브 장치로의 통신

마스터 장치가 슬레이브 장치와 통신할 때 마스터 장치는 먼저 클럭 라인과 데이터 케이블을' 전송 요청' 상태로 설정합니다. 구체적인 방법은 다음과 같습니다. 먼저 클럭 라인을 최소 100 μs 이상 내려 통신을 억제한 다음 데이터 케이블을 "전송 요청" 하고 마지막으로 클럭 라인을 놓습니다. 이 과정에서 디바이스에서 10μ s 를 초과하지 않는 시간 간격 내에 이 상태를 확인해야 합니다. 기기가 이 상태를 감지하면 클럭 신호가 생성되기 시작합니다.

이제 각 프레임의 데이터 전송은 12 비트로 구성되며, 그 타이밍과 각 비트의 의미는 그림 3 에 나와 있습니다.

그림 3 은 마스터 장치에서 슬레이브 장치로의 통신보다 프레임당 ACK 비트가 한 개 더 많습니다. 이것은 기계에서 받은 바이트의 응답 비트로, 데이터 케이블을 낮추어 생성됩니다. 응답 비트 ACK 는 항상 0 입니다. 마스터 장치와 슬레이브 장치 간의 통신 중에 마스터 장치는 항상 시계가 저평일 때 데이터 케이블의 상태를 변경하고, 클럭의 상승에서 데이터 케이블의 상태를 읽습니다.

2PS/2 키보드 코딩 및 명령 세트

(1) PS/2 키보드 인코딩

현재 PC 에서 사용하는 PS/2 키보드는 기본적으로 두 번째 스캔 코드 세트를 사용합니다. 이 스캔 코드 세트에 대해서는 \[ 1\] 을 참조하십시오. 스캔 코드에는 생성 코드와 인터럽트 코드의 두 가지 유형이 있습니다. 키를 누르거나 계속 누르면 키보드는 해당 키의 비밀번호를 호스트로 보냅니다. 키가 해제되면 키보드는 해당 키의 깨진 코드를 호스트로 보냅니다.

키보드 키 스캔 코드에 따라 키는 다음 범주로 나눌 수 있습니다.

첫 번째 키 유형으로 패스코드는 1 바이트이고 크래킹 코드는 0xF0+ 패스코드입니다. 키 A 의 경우 패스코드는 0x 1C 이고 크래킹 코드는 0xF0 0x 1C 입니다.

클래스 II 키, 패스코드는 2 바이트 0xE0+0xXX 형식이고 크래킹 코드는 0xE0+0xF0+0xXX 형식입니다. 오른쪽 ctrl 키와 같이 패스코드는 0xE0 0x 14 이고 크래킹 코드는 0xE0 0xF0 0x 14 입니다.

세 번째 유형에는 두 가지 특별한 열쇠가 있다. 인쇄 화면 키의 패스코드는 0xE0 0x 12 0xE0 0x7C 이고 크래킹 코드는 0xe00xf00x7c0xe00xf00x12 입니다. 일시 중지 키의 암호는 0xe10x140x770xe10xf00x140xf00x77 이고 브레이크 코드는 비어 있습니다.

키 조합의 스캔 코드는 키가 나타나는 순서에 따라 전송됩니다. 예를 들어 왼쪽 SHIFT+A: 1 왼쪽 SHIFT, 2, 2, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4

드라이버 설계에서 이 분류에 따라 키에 따라 다르게 처리됩니다.

(2)PS/2 키보드 명령 세트

호스트는 PS/2 키보드로 명령을 보내 키보드를 설정하거나 키보드 상태를 얻을 수 있습니다. 1 바이트를 보낼 때마다 호스트는 키보드에서 0xFA 응답 ("재전송" 및 "에코" 명령 제외) 을 받습니다. 다음은 키보드 초기화 중 드라이버가 사용하는 명령에 대한 간략한 설명입니다 (자세한 키보드 명령 세트는 참조 \[ 1\] 참조).

0xED 호스트는 이 명령 뒤에 키보드에서 num lock, caps lock, scroll lock led 의 상태를 나타내는 매개 변수 바이트를 보냅니다.

0xF3 호스트는 이 명령 후에 키보드 기계의 타이핑 속도와 지연을 정의하는 바이트 인수를 보냅니다.

호스트가 0xF5 비활성화 키보드를 보내면 0xF4 는 키보드를 다시 활성화하는 데 사용됩니다.

3PS/2 키보드 및 마이크로 컨트롤러 연결 회로

PS/2 키보드는 그림 4 와 같이 AT89C5 1 단일 컨트롤러에 연결됩니다. P 1.0 은 PS/2 데이터 케이블을 연결하고 P3.2(INT0) 는 PS/2 시계 케이블을 연결합니다. 단일 칩 마이크로 컴퓨터의 P 1 및 P3 포트 내장 풀링 저항으로 인해 PS/2 클럭 및 데이터 케이블은 단일 칩 마이크로 컴퓨터의 P 1 및 P3 에 직접 연결할 수 있습니다.

4 드라이버 설계

드라이버는 Keil C5 1 언어와 Keil uVision2 프로그래밍 환경을 사용합니다. PS/2 104 키보드 드라이버의 주요 임무는 단일 칩 마이크로 컴퓨터와 키보드의 PS/2 통신을 실현하고, 수신된 키 스캔 코드를 키의 키 키키 키키키인 KeyVal 로 변환하여 시스템 상층 소프트웨어에 제공하는 것입니다.

(1) 단일 칩 마이크로 컴퓨터와 키보드 PS/2 통신 프로그램 설계

PS/2 통신 중 마스터 장치 (단일 칩) 는 클럭 신호가 저평일 때 데이터 신호를 송수신합니다. 단일 칩 마이크로 컴퓨터가 키보드로 명령을 보내기 때문에 키보드 응답이 필요하기 때문에 이 프로그램 부분은 쿼리 방식을 사용합니다. 마이크로컨트롤러가 키보드 데이터를 수신할 때, 데이터 케이블의 신호는 시계가 낮을 때 안정적이므로, 이 부분의 프로그램은 인터럽트를 사용하며 프로그램에 지연 프로그램을 추가할 필요가 없습니다. 단일 칩 키보드 전송 인터페이스 프로그램은 www.dpj.com.cn 웹 사이트를 참조하십시오.

(2) 키보드 스캔 코드 변환 프로그램 설계.

키보드 스캔 코드는 규칙적이지 않기 때문에 해당 키의 키 값 (문자 키는 ASCII 값, 제어 키 (예: F 1, CTRL 은 사용자 정의 값) 은 룩업 테이블에서만 얻을 수 있습니다. 세 가지 유형의 키와 부분 키는 두 개의 키 값에 해당하기 때문에 (예: a 키의 키 값은 CAPS 및 SHIFT 키 상태에 따라 각각 0x4 1(A) 및 0x6 1(a)) 변환 속도와 리소스 소비를 고려하여 설계에 4 를 사용했습니다 [NR _ 키보드 스캔 코드 변환 기본 세트 및 전환 세트 kbe0_plain_map\[NR_KEYS\] 및 kbe0_shiftPS/2 104 키보드 키 스캔 코드 중 가장 네 개의 키보드 테이블은 모두 KB_MAP\[MAKE CODE\]=KEYVAL 로 정의됩니다. 스캔 코드에 해당하는 키 값이 비어 있는 경우 (예: KB_MAP\[0x00\]) 해당 키 값은 NULL_KEY(0x00) 로 정의됩니다. 다음은 기본 키보드 스캔 코드 세트의 코드 예입니다. kb _ plain _ map \ [NR _ keys \] = { ...

Null _ key 0x2c 0x6b 0x690x6f0x300x39 null _ key//스캔 코드 0x40~0x47

File:// 에 해당하는 키는 비어 있습니다. 쉼표, k, I, o, 0, 9, 비어 있습니다.

File:// 에 해당하는 키 값 0x00,',',' k',' I',' o',' 0',' 9', 0x00 입니다.

......}; 그림 4 의 하드웨어 연결 회로에서 이렇게 키보드 변환 테이블을 설계하는 또 다른 이점은 나중에 ACPI 및 Windows 멀티미디어 키를 지원하는 키보드를 확장해야 하는 경우 키 테이블의 해당 부분만 수정하면 된다는 것입니다. ACPI 전력 비밀번호가 0xE0 0x37 인 경우 kbe0 _ plain _ map \ [0x37 \] = kb _ acpi _ PWR 만 수정하면 됩니다.

특수 키 일시 중지는 별도의 프로그램에 의해 처리됩니다. 0xE 1 을 받으면 이 프로그램으로 전달됩니다. 인쇄 화면 키는 이를 각각 0xE0 0x 12 및 0xE0 0x7C 암호를 사용하는 두 개의 "가상 키" 의 조합으로 간주합니다.

0 비트인 LED _ status-scroll lock LED off 0, on1; Bit 1-num 잠금 LED 끄기 0, 켜기1; Bit 2-Caps Lock LED 끄기 0, 켜기1; 비트 3 ~ 비트 7 은 항상 0 입니다. Agcs_status 레코드 왼쪽 및 오른쪽 시프트 ctrl GUI alt 상태, 비트 0-왼쪽 시프트 키, 비트1-왼쪽 ctrl 키, 비트 2-왼쪽 GUI 키, 비트 3-왼쪽 alt 키 E0_FLAG 연결 0xE0 설정1; E 1_FLAG 수신 0xE 1, 설정1; F0_FLAG 는 0xF0 을 받고 1 을 설정합니다. 키의 키 값은 KeyVal 을 통해 상위 레벨에 제공됩니다.

PS/2 키보드 스캔 키 변환 프로그램 ps2_codetrans () 의 프로세스는 그림 5 에 나와 있습니다.

그림 5 스캔 키 변환 절차: if (F0_FLAG) {// 수신된 스캔 코드가 고장났습니다.

스위치 (MCU _ revchar) {//처리 제어 키.

사례 0x11:AGC _ status & = 0xF7 깨짐; //왼쪽 alt 해제

사례 0x12: AGC _ status & = 0xFE 휴식; //왼쪽 시프트 해제

사례 0x14: AGC _ status & = 0xFD 휴식; //왼쪽 ctrl 해제

시나리오 0x58: 다음과 같은 경우 (led _ status & amp0x04)

Led _ 상태 & amp= 0x03// 대문자 잠금 키

Else led _ status = 0x04

Ps2 _ ledchange ();

깨뜨리다

시나리오 0x59: AGC _ status & = 0xEF 휴식; //오른쪽 이동 릴리즈

시나리오 0x77: if (led _ status & 0x02)

Led _ 상태 & amp= 0x05//num 잠금 키

Else led _ status = 0x02

Ps2 _ ledchange ();

깨뜨리다

시나리오 0x7E: 다음과 같은 경우 (led _ status & amp0x0 1)

Led _ 상태 & amp= 0x06// 롤 잠금 키

Elseled _ status = 0x01;

Ps2 _ ledchange ();

깨뜨리다

기본값: break

}

F0 _ FLAG = 0;;

}

그렇지 않으면 {//에서 받은 스캔 코드는 패스코드입니다.

(led _ status & amp0x04) caps _ flag =1; Elsecaps _ flag = 0;

(led _ status & amp0x02) num _ flag =1; Elsenum _ flag = 0;

If(scga _ status & amp;; 0x11) shift _ flag =1; 그렇지 않으면 shift _ flag = 0;;

파일://스캔 코드 키 변환

If ((caps_flag == shift_flag) (! Num _ flag)) keyval = kb _ plain _ map \ [MCU _ revchar \];

Elsekeyval = kb _ shift _ map \ [MCU _ revchar \];

스위치 (MCU _ revchar) {//처리 제어 키 또는 상태 키.

사례 0x11:agcs _ status = 0x08; //왼쪽 alt 키

시나리오 0x12: agcs _ status = 0x01; //왼쪽 shift 키를 누릅니다.

시나리오 0x14: agcs _ status = 0x02; //왼쪽 ctrl 키를 누릅니다.

시나리오 0x59: agcs _ status = 0x10; //오른쪽 shift 키를 누릅니다.

기본값: break

}

} 두 번째 유형의 키에 대한 스캔 키 값 변환 프로세스는 와 유사합니다. 프로그램 세그먼트를 종료할 때 E0_FLAG 및 F0_FLAG 플래그를 지우도록 주의해야 합니다.

PAUSE key 처리기: 0xE 1 을 받으면 E 1 _ flag = 1 을 설정한 다음 이후 7 바이트의 데이터를 PAUSE 의 암호 이후 7 바이트와 비교합니다 7 바이트 모두 비교한 후 E 1_FLAG 플래그를 지웁니다.

키보드 초기화 프로그램 kb_init () 프로세스:

① 전원을 켠 후 키보드의 post 를 받아 신호 0xAA 또는 자체 테스트 오류 신호 0xFC 를 통과합니다. MCU 수신 0xAA, 다음 단계로 이동; 그렇지 않으면 오류 처리가 수행됩니다.

(2) LED 표시등을 끄고 마이크로컨트롤러가 0xED 를 보낸 다음 키보드 응답 0xFA 를 받고 0x00 을 보내 0xFA 를 받습니다.

(3) 기계 지연 및 속도를 설정하십시오. 마이크로컨트롤러는 0xF3 을 보내고, 0xFA 를 받고, 0x00(250ms, 2.0cps) 을 보내고, 0xFA 를 받습니다.

④ led 확인, 0xED 전송, 0xFA 수신, 0x07 전송 (모든 led 켜기), 0xFA 수신 0xED 보내기, 0xFA 받기, 0x00 보내기 (LED 끄기), 0xFA 받기.

⑤ 키보드로 0xF4 를 보내고 0xFA 를 수신 할 수 있습니다.

키보드 LED 변경 ps2_ledchange () 함수 프로세스: 0xED→ 보내기 → 0xFA 받기 → led 보내기 _ status → 0xfa 받기.

라벨

이 드라이버는 Keil uVision2 로 작성되었으며 AT89C5 1 단일 칩에서 실행되어 PS/2 104 키보드, 문자 키 대/소문자 전환, num 잠금 전환, 제어 키 및 키 조합을 지원합니다. 이 프로그램은 다른 임베디드 또는 단일 칩 시스템에서 PS/2 키보드를 사용하는 데도 도움이 됩니다.

참고

1 아담 채프스키. ATPS/2 키보드 커넥터. /ps2prots.html

4 Linux 2.4. 10 커널 프로그램 defkeymap.cdn _ keyb.ckbd.ckybdev.ckboard.ckbd _ kern.hkd ..

PS/2 프레임의 첫 번째 비트는 시작 비트, 0, 8 비트 데이터 비트, 1 바이트의 키보드 스캔 코드 (스캔 코드 1-4 바이트), 패리티 비트, 마지막으로 정지 비트 1 입니다. 이러한 신호는 데이터 케이블 (핀 1) 을 통해 전송됩니다. 키가 없을 때 데이터 케이블과 always 라인은 모두 1 에 남아 있습니다. 다음 키를 누르면 클록 클락이 펄스를 보내고 데이터 케이블이 데이터를 보냅니다. 호스트 (이 경우 89c5 1 MCU) 는 always 펄스의 하강에서 데이터 케이블을 샘플링하여 데이터를 가져옵니다. 키보드 스캔 코드에는 pass 코드와 break 코드가 포함되어 있습니다. 키를 누르면 전송되고, 키를 들어 올리면 break 코드가 전송됩니다. 자세한 내용은 동봉된 PS/2 기술 참고 자료를 참조하십시오.

위 원칙에 따라 키보드의 펄스 라인을 89c5 1 의 외부 인터럽트 입력 포트 (INT0 또는 INT 1) 에 연결할 수 있습니다. 키를 누르고 들어 올리면 펄스가 생성되어 MCU 가 중단됩니다. 키보드의 데이터 케이블을 89c5 1 (예: P 1.0) 의 입력 포트에 연결합니다. 인터럽트 처리기에서 입력 포트에서 데이터를 읽은 다음 순환 전환을 통해 읽은 데이터 비트를 처리합니다. 1 (시작 비트), 10 (패리티) 및 1 1 (정지 비트) 은 폐기할 수 있으며 문제가 없으면 패리티 비트를 적용할 수 있습니다 데이터 프레임이 수신되면 나머지 2-9 비트 (즉, 스캔 코드) 는 직렬 포트를 통해 PC 로 전송되며, PC 의 직렬 포트 모니터링 소프트웨어 (예: "직렬 디버깅 도우미") 를 통해 볼 수 있습니다. 하드웨어 연결 및 소스 코드는 다음과 같습니다.

소스 코드:

ORG 0000H

주 프로그램으로 AJMP MAIN 전송

ORG 0003H 외부 인터럽트 P3.2 핀 INT0 포털 주소

AJMP INT 외부 인터럽트 서비스 하위 프로그램으로 전송

을 눌러 섹션을 인쇄할 수도 있습니다 다음은 마스터 프로그램의 CPU 인터럽트 모드를 설정합니다.

주영: MOV SCON, # 50H 직렬 포트 1 모드로 설정

MOV·TMOD, # 20H 전송 속도 발생기 T 1 모드 2 에서 작동.

MOV PCON, # 80H 전송 속도가 2400x2=4800BPS 로 두 배로 증가했습니다.

MOV TH 1, # 0F3H 기본 초기 값 (2400BPS 전송 속도 기본 초기 값을 기준으로 함)

MOV TL 1, # 0F3H 기본 초기 값 (2400BPS 전송 속도 기본 초기 값을 기준으로 함)

SETB EA;; CPU 총 인터럽트 요청 열기

SETB IT0;; INT0 의 트리거 모드를 펄스 음수 에지 트리거로 설정합니다.

Setbex0; INT0 인터럽트 요청 열기

SJMP 위안

INT:CLR EA;; CPU 에 대한 모든 인터럽트 요청을 일시적으로 종료합니다.

CJNE R0, #0, L 1

L3: INC R0

SJMP L5

L 1:L2 CJNE R0 # 9

SJMP L3

L2: CJNE R0, # 10, L4

Setbtr1; 시동 타이머 T 1

모브 스부브

MOV R0, #0

L5: setbea; 일시 중단 허용

레티; 서브루틴 종료

L4: MOV C, P 1.0

RRC A

SJMP L3

키를 눌렀다가 놓으면 스캔 코드가 컴퓨터에 표시됩니다.

키보드에 전원이 들어오면 자체 테스트를 수행합니다. 이때 키보드의 램프 세 개가 모두 켜져 있습니다. 자체 테스트가 완료되면 나가서 16 진수 문자 AA 를 보냅니다. 주인을 공경하다.

上篇: 캐논 a3200is는 어떻습니까? 재미 있고 조작하기 쉽습니다. 下篇: 호스트 전원 공급 장치에 왜 전류 소리가 나나요?
관련 내용