Czy jest możliwe podłączenie klawiatury komputerowej z gniazdem PS2??
Jeżeli tak to jak to by wyglądało??
Jak napisać program w BASCOM??
Pozdrawiam!!
Klawiatura komputerowa z PS2 na mikroprocesor AVR
- Tranzystor
- Użytkownik
- Posty: 889
- Rejestracja: 28 sie 2005, 19:19
- Lokalizacja: Świętochłowice
- Kontakt:
-
K_o_n_r_a_d
- Użytkownik
- Posty: 123
- Rejestracja: 29 lip 2005, 10:21
- Lokalizacja: Lublin
Kiedyś zrobiłem coś takiego (działa bardzo dobrze):
Skopiuj podprogram Odczyt_klawiatury i też powinno działać.
Więcej informacji znajdziesz tu:
http://www.beyondlogic.org/keyboard/keybrd.htm
Pozdrawiam, Konrad.
Kod: Zaznacz cały
$crystal = 4000000
Config Portd = Input
Portd = &B1111111
Config Lcdpin = Pin , Db4 = Portb.3 , Db5 = Portb.2 , Db6 = Portb.1 , Db7 = Portb.0 , E = Portb.5 , Rs = Portb.7
Config Lcd = 16 * 2
Dim Klawisz As Byte , Komenda As Byte
Dim I As Byte , Ile As Byte
Dim Wyswietlacz As Byte
Kl_dat Alias Pind.4
Kl_clk Alias Pind.2
Cls
Cursor Off Noblink
Do
Gosub Odczyt_klawiatury
Incr Wyswietlacz
If Wyswietlacz = 5 Then Lowerline
If Wyswietlacz = 10 Then
Cls
Wyswietlacz = 0
End If
Lcd Hex(klawisz) ; " "
Loop
End
'#################################################
Odczyt_klawiatury:
Klawisz = 0
Gosub Czekaj_na_0_na_clock
For I = 0 To 7
Gosub Czekaj_na_1_na_clock
Gosub Czekaj_na_0_na_clock
Klawisz.i=Kl_dat
Next I
Gosub Czekaj_na_1_na_clock
Gosub Czekaj_na_0_na_clock
Gosub Czekaj_na_1_na_clock
Gosub Czekaj_na_0_na_clock
Return
Czekaj_na_1_na_clock:
Bitwait Kl_clk , Set
Return
Czekaj_na_0_na_clock:
Bitwait Kl_clk , Reset
Return
'################################################
Więcej informacji znajdziesz tu:
http://www.beyondlogic.org/keyboard/keybrd.htm
Pozdrawiam, Konrad.
Dla odmiany w C:
Kod: Zaznacz cały
#define ATKbdPort PORTD
#define ATKbdPin PIND
#define ATKbdDir DDRD
//
#define ATKbdDta 0
//
#define ATKbdGetDta (ATKbdPin & (1 << ATKbdDta))
//
unsigned char volatile dane = 0, nowy = 0, i = 0;
// Odczyt danych z klawiatury realizowany jest w ramach
// obsługi przerwania zewnętrznego INT0
// linia CLK podłączona do PD2
// linia DATA podłączona do PD0
SIGNAL(SIG_INTERRUPT0)
{
switch(i){
case 0 : // bit startu
dane = 0;
i++;
break;
case 1 : // bity danych
if(ATKbdGetDta) dane |= 0x01;
i++;
break;
case 2 :
if(ATKbdGetDta) dane |= 0x02;
i++;
break;
case 3 :
if(ATKbdGetDta) dane |= 0x04;
i++;
break;
case 4 :
if(ATKbdGetDta) dane |= 0x08;
i++;
break;
case 5 :
if(ATKbdGetDta) dane |= 0x10;
i++;
break;
case 6 :
if(ATKbdGetDta) dane |= 0x20;
i++;
break;
case 7 :
if(ATKbdGetDta) dane |= 0x40;
i++;
break;
case 8 :
if(ATKbdGetDta) dane |= 0x80;
i++;
break;
case 9 : // bit parzystości - pomijamy
i++;
break;
case 10 : // bit stopu
nowy = 1;
i = 0;
break;
}
}
unsigned char getATkbd(void)
{
while(!nowy); // oczekiwanie na odebranie nowego znaku
nowy = 0; // zerowanie flagi odebrania znaku
return dane;
}- Tranzystor
- Użytkownik
- Posty: 889
- Rejestracja: 28 sie 2005, 19:19
- Lokalizacja: Świętochłowice
- Kontakt: