Klavesnica PC

Ahoj, dalo by sa pomocou 89C4051 snimat klavesnica PC tak, aby kazdy znak, ktory vysle klavesnica zosnimal (paralelne ku klavesnici by to bolo zapojene) a danu stlacenu klavesu by dekodoval a poslal pomocou RS232 do PC napr. do nejakeho terminalu na RS232, kde by to zobrazovalo. Zaroven, pri nekomunikacii klavesnici s PC by napr kazdych 5 min poslalo znak medzery alebo konca riadku…

Za namety popripade pomoc vopred dakujem…

Zkus jen někde vyšpekulovat jaká data z te klavesnice lezou , zapojení ps/2 nebo (mini)din přes ktere se klavesnice připojuje k pc a z nějakeho pinu budeš odebírat data z klavesnice což bude podle mě osmi bitovej seriovej přenos nebo tak něco. zkus mrknout sem winide51.wz.cz/51/doc.php do ukázek programů, třeba tam něco najdeš, já od nich mám usb programator a dělám v jejich softveru protože jsem se na něm učil ve škole. a přes google něco určitě taky najdeš :wink:

Ve školce KTE pana Vonáška byla rutina pro počítačovou klávesnici a PIC16F877A. Je mi jasné, že rutinu nepoužiješ pro 89C4051, ale u rutiny byla i teorie, takže by ti článek mohl mírně napovědět.

podrobny popis klavesnice PC AT je popsana v knize KOMUNIKACE MIKROKONTROLERU S OKOLIM 1,je to ke stazeni i v download, nevim jestli je tam k tomu i disketa ke stazeni,tu mam kdyztak napis poslu ji, ( http://forum.mcontrollers.com/t/kniha-komunikace-mikrokon-s-okolim-dva-dily-data/361/1 ), ale uz je to nefunkci,skus poprosit admina jestli ti to jeste neobnovi,je tam popis zapojeni,kody klaves,i program ale v ASM pro PIC,

Zatial dik moc…skusim nieco napisat a dam tu na kontrolu, dufam, ze pomozete …

dik…

Tak som nieco zbuichal, skuste kuknut a dat rady. Konstanty zatial neprepocitane… cerpane info viac menej z

mytutorialcafe.com/Microcont … rd%202.htm

$MOD51

;soft

kbdata        equ   P1.3
kbclock       equ   P1.2
kbdata1       equ   30h
kbdata2       equ   31h
timer1        equ   38h
timer2        equ   39h

org 00h

jmp    start

org     0Bh

jmp    citac0


org     023h

jmp    rs232


org     30h

start:  mov TMOD, #00100001B  ;C/C0 - mod1,  C/C1 - pre uart
        mov TCOM, #00000000B  ;obe citace vypnute
        mov SCON, #01000000B  ;UART rezim1
        mov PCON, #00000000B  ;normalna rychlost
        mov IE,   #00011010B  ;povolenie preruseni podla potreby
        mov TH0,  #01111111B  ;Hbyt C/C0                      ?????
        mov TL0,  #11111111B  ;Lbyt C/C0                      ?????
        mov TH1,  #11111111B  ;nastavenie rychlosti UART      ?????

        mov TR0,  #1B         ;spusti C/C0
        mov TR1,  #1B         ;spusti C/C1
        mov r5,   #00H


;snimanie KB

snimkb:  jb kbclock, $
         call citajkb
         jnc snimkb
         acall posliznak
         clr C
         sjmp snimkb
         
,rutina pre citanie znaku z kb 

citajkb: call citajznak
         cjne a,#0F0h, pustene
         JB Kbclock,$ 
         call citajznak
         Setb C
         call convertuj
         ret
        
pustene: clr C
         ret
         
         
citajznak:
         clr A
         Jnb Kbclock,$
         mov R0,#08h
citajznak2:
         Jb Kbclock,$
         Mov C,Kbdata
         Rr A
         mov acc.7,C
         Jnb Kbclock,$
         Djnz R0,citajznak2
         Jb Kbclock,$
         Jnb Kbclock,$
         Jb Kbclock,$
         Jnb Kbclock,$
         ret
                  
                  
convertuj:
         Mov DPTR,#TableKeyboard
         movc A,@A+DPTR
         mov kbdata1,A
         ret
                  
poslizank:
         mov R7, kbdata1
         mov SBUF, R7
         mov timer2, r5
         ret
         
citac0:  inc timer1
         jnz ok
         inc timer2
         mov r6, timer2
         cjne r6, #200H , ok       
         mov a, #13H
         call posliznak
         mov timer1, #00H
         mov timer2, #00H
ok:     reti 




TableKeyboard:
DB 00
DB 0F9H
DB 00
DB 0F5H,0F3H,0F1H,0F2H,0FCH
DB 00H
DB 0FAH,0F8H,0F6H,0F4H
DB 0C0H
DB '~'
DB 00H
DB 00H
DB 0C1H
DB 0C2H
DB 00H
DB 0C3H
DB 'Q1'
DB 00H,00H,00H
DB 'ZSAW2'
DB 00H,00H
DB 'CXDE43'
DB 00H,00H
DB ' VFTR5'
DB 00H,00H
DB 'NBHGY6'
DB 00H,00H,00H
DB 'MJU78'
DB 00H,00H
DB ',KIO09'
DB 00H,00H
DB './L;P-'
DB 00H,00H,00H
DB 27H
DB 00H
DB '='
DB 00H,00H
DB 0C5H
DB 0C6H
DB 0AH
DB ']'
DB 00H
DB '\'
DB 00H,00H,00H,00H,00H,00H,00H,00H
DB 08H
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H
DB 00H,00H
DB 0DH
DB 00H
DB 0FBH
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H
DB 0F7H
end

ka_x51_01.asm (2.69 KB)

čau, ja když jsem todle stavěl, tak jsem vycházel s týdle stránky:
hw.cz/docs/keyboard/keyb_at.html
je tam i dekódovací tabulka pro jednočipi, řek bych že je tam všechno, akorát tam maj chybu že klávesnice generuje data při vzestupný hraně, ale to neni pravda, je to při sestupný (je to tam nikde jako poznámka)

k čemu pak to má sloužit ???

snad ne k chatování :smiley::smiley:

pozor, v tech tabulkach jsou chyby. Delal jsem s jejich vyuziti radic klavesnice a chvili mi trvalo nez jsem na to prisel. Kdybys to chtel pouzit, dej vedet, pohledal bych v cem byl problem

Čau,
mohl by ses mi nato mrknout, ja osobně jsem na žádnej problém nenarazil, ale zase je pravda že klávesnici používam jenom pro základní klávesy s jedním kódem. Možná do budoucna až budu přepisovat tu rutinu co mam teď napsanou bych se nato moh připravit :slight_smile: .
Díky
S pozdravem Tichy

problem byl tusim u sipek a podobnych klaves, bylo tam prohozene poradi bajtu. A pujdu do prace, mrknu na to.

S šipkama dělam furt, ale stima jsem problém nikdy nemel. Ale nevim jestli jsem je implementoval v době kdy jsem zjišťoval kódy kláves podle LCD nebo podle HW.CZ, Jinak dík za jakýkoliv info.
s pozdravem Tichy