키보드를 사용하여 필요한 소스를 8051 년 9 월 2002년 21:39

F

FrEEk

Guest
안녕

나는 소스 코드는 PS2 마우스 및 키보드를
구현 필요a 8051 마이크로 컨트롤러에 기능을 제공합니다.

유일하게 같은 소스를
본 적 있니?
감사합니다

 
시도

http://www.beyondlogic.org/keyboard/keybrd.htm

어떤 소스 코드가있습니다.당신이 8051에 xlate 수있을 것 같아요.

 
아주 유용한 링크를 클릭하십시오.감사합니다 barny.

<img src="http://www.edaboard.com/images/smiles/icon_smile.gif" alt="미소" border="0" />
 
www.philips.com보십시오

거기에 애플 리케이션 노트에서 MCU를위한 키보드 인터페이스입니다

 
내가
ps 이하에 대한 코드를 보내겠다 / 내고 그것에 대해 작동합니다 /
2 키보드뿐만 아니라, PS / 2 마우스는 뜻 2 프로토콜

이 프로그램 (ps 이하로 보내 /
2 장치)
9600 baudrate COM 포트에 데이터를 trasnfer 것입니다/ / 저자 : Chaitanya Thummar
/ /이있는 PS /
2 프로토콜에 대한 코드입니다# 포함 <p89v51rx2.h>
고속 1 정의 #
하한가 0 정의 #

sbit data_bit = P3 ^ 3;
sbit CLK = P3 ^ 2;

무효 MSDelay (서명 숯불 지연)
(
서명되지 않은 숯불 난;
은 (i = 0; 난 <지연; 난 )
(
)
)

무효 ps2_write (서명 숯불 명령)
(
서명되지 않은 숯불 난;
서명되지 않은 문자 패리티 = 1;
data_bit = high를;

CLK = high를;
MSDelay (100);

CLK = 낮음;
MSDelay (100);

data_bit = 낮음;
MSDelay (10);
CLK = high를;
/ 장치에 대한 클럭의 제어를 취하지 * * /
동안 (CLK == 높은가격순); / / 고의적으로 비워두이 루프
위한은 (i = 0; 난 <8; 난 )
(
만약 (명령 & 0x01)
(
data_bit = high를;
) 다른
(
data_bit = 낮음;
)
/ / 시계가 나올 때까지 기다리는 것이
동안 (CLK == 낮은가격순);
동안 (CLK == 높은가격순);
패리티 = 패리티 ^ (명령 & 0x01);
명령 = 명령>> 1;
)
/ / 패리티 비트
(패리티)
(
data_bit = high를;
) 다른
(
data_bit = 낮음;
)
/ / 클럭 사이클 - 아야처럼.
동안 (CLK == 낮은가격순);
동안 (CLK == 높은가격순);
data_bit = high를;
MSDelay (10);
동안 (CLK == 높은가격순);
/ / 모드 전환
동안 ((CLK == 낮은가격순) | | (data_bit == 낮은가격순));
/ / 수신 데이터를 개최
CLK = 낮음;
)
서명 숯불 ps2_read ()
(
서명되지 않은 숯불 Data1 = 0x00;
서명되지 않은 숯불 난;
서명 숯불 bit1 = 0x01;

/ / 시작 클럭
CLK = high를;
data_bit = high를;
MSDelay (10);
동안 (CLK == 높은가격순);
동안 (CLK == 낮은가격순); / / 시작 비트 먹어
위한은 (i = 0; 난 <8; 난 )
(
동안 (CLK == 높은가격순);
면 (==
높은가격순) data_bit
(
Data1 = Data1 | bit1;
)
동안 (CLK == 낮은가격순);
bit1 = bit1 <<1;
)
/ /, 그것을 무시하고 패리티 비트 먹는다.
동안 (CLK == 높은가격순);
동안 (CLK == 낮은가격순);
/ / 좀 그만 먹어
동안 (CLK == 높은가격순);
동안 (CLK == 낮은가격순);
CLK = 낮음; / / 수신 데이터를 저장할
반환 Data1;
)
무효 serial_init ()
(
FCF = 1;
SCON = 0x50; / * 모드 1, 8 - 비트의 UART, * 수신기를
활성화 /
TMOD = 0x20; / * 타이머 1, 모드 2, 8 - 비트 재장전 * /
TH1 = 253; / * 재장전 가치를 2400
* 보오드 /
ET0 = 0; / *
* 인터럽트를 만들기 위해 우리는이 타이머 싶지 않아요 /
TR1 = 1; / * * 타이머
시작 /
ES = 0; / 시리얼 인터럽트
* 허용 * /
EA는 = 0; / 인터럽트
* 활성화 * /
)

주요 무효 ()
(
서명되지 않은 숯불 카운트 = 0;
serial_init ();
P2 = 0x00;
(를 0xFF) ps2_write;
동안 (카운트! = 3)
(
SBUF = ps2_read ();
(TI의 == 0);
TI는 = 0;
카운트 ;
)
(0xf4) ps2_write;
(1) 동안
(
ps2_read ();
(TI의 == 0);
TI는 = 0;
카운트 ;
))

 

Welcome to EDABoard.com

Sponsor

Back
Top