KORIŠTENJE RAČUNALA UOBIČAJENA Keyboard SA 89C51

N

Noman Yousaf

Guest
Pozdrav svima

Želim se priključiti zajedničkom računalo tipkovnica s MCU 89C51
može bilo koji tijelo mi reći o ovoj ili bilo kojoj stranici u kojoj ja mogu dobiti softver / hardver informacije o tipkovnici.
Thanks in adv

 
Ovdje je tipkovnica sa avr chip
h ** p: / / www. tmel.com @ / dyn /
products / app_notes.asp? family_id = 607

Sjećam se tipkovnica sa 51 @ tmel Na ovoj stranici, ali cann't naći u aukciji!

 
# define ERROR?

Nope ... lists fino sve aplikacije bilješke uključujući "Razmjena pcat tipkovnicu "....

 
Zdravo.
Možete koristiti PC / AT tipkovnica iz 8051 direktno, bez ikakvih klavijatura Vozač / chipset, jer tastatura je vrlo vrlo jednostavan za upravljanje.
Koristio sam tipkovnicu s NEC sklop, te u nastavku ćete pronaći C izvor (dont 'briga za o "unicode" riječ zloupotrebljavali ponekad u izvorni).
Primijetiti da, iako AT znači "Napredne tehnologije", pronašao sam da nema razloga zbog adresu 102-105 tipke (navedem kad je bio pritisnut taster ili objavljeno) 2, 3 ili 4 bytes of data su potrebne!

Informacije sam pisati kod u nastavku je preuzet iz:
http://www.beyondlogic.org/keyboard/keybrd.htm
http://panda.cs.ndsu.nodak.edu/ ~ achapwes/PICmico/PS2

Sretno.Paolo
--
Paolo Subiaco
http://www.creasol.itCode:# Pragma jezik = proąirena

# uključiti <df0034.h>

# uključiti "keyboard.h"

# uključiti "infhotel.h"

# uključiti "rtc.h"

# uključiti "lang.h"

# uključiti "rs232.h"uchar keyModifier; / / E0, E1,

saddr uchar uniKey; / / ključni udarac pretvoriti u pseudo-unicode formatu (potpisan 128bit)

saddr uchar lastUniKey; / / Store prethodnog ključa u pseudo-unicode formatu

bitni keyReleased; / / 1 ako F0 primio udarac tipkesaddr uchar kbdbytes; / / broj bajtova dobili od tipkovnici

saddr uchar kbdbuffer [KBDBUFFERLEN]; / / tipkovnica buffer

uchar kbdbits; / / broj primljenih bitova (početni bit uključeno)

uchar kbdbyte; / / primanja bajt

uchar kbdto; / / timeout za primanje ključni udarac

bitni kbdtx; / / 1 kad emitira na tipkovnici, 0 prilikom primanja

bitni kbdbit; / / primljenih bita

bitni kbdoddparity; / / 1 ako je neparan broj bita prije paritet

bitni kbderr; / / 1 ukoliko bilo kakve greškeStruct kbd_struct kbd_table;/ / C E n R u

const uchar uni2ascii [UNI2ASCIILEN] = "abcdefghijklmnopqrstuvwxyz0123456789 \ \ '\ x8d \ x8a \ x95 \ x85 \ x97 >,.-. 0123456789 -* /";

/ / E * C ° §

const uchar shiftuni2ascii [UNI2ASCIILEN] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ =! \" $%&/()|?^ l \ * x82 \ x87 \ xf8 \ xf5 <;:_. 0123456789 -* / ";

/ / 0 4 8 C 0 4 8 C 0 4 8 C 0 4 8 C 0/ / Karta keystrokes na karti slične unicode.

uchar const key2uni [132] = (

0x00, K_F9, 0x00, K_F5, K_F3, K_F1, K_F2, K_F12,

0x00, K_F10, K_F8, K_F6, K_F4, K_TAB, 0x25, 0x00,

/ / 10

0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x1c, 0x00,

0x00, 0x00, 0x1a, 0x13, 0x01, 0x17, 0x1d, 0x00,

/ / 20

0x00, 0x03, 0x18, 0x04, 0x05, 0x1f, 0x1e, 0x00,

0x00, 0x40, 0x16, 0x06, 0x14, 0x12, 0x20, 0x00,

/ / 30

0x00, 0x0e, 0x02, 0x08, 0x07, 0x19, 0x21, 0x00,

0x00, 0x00, 0x0d, 0x0a, 0x15, 0x22, 0x23, 0x00,

/ / 40

0x00, 0x2e, 0x0b, 0x09, 0x0f, 0x1b, 0x24, 0x00,

0x00, 0x2f, 0x30, 0x0c, 0x2a, 0x10, 0x26, 0x00,

/ / 50

0x00, 0x00, 0x2b, 0x00, 0x28, 0x27, 0x00, 0x00,

0x00, 0x00, K_ENTER, 0x29, 0x00, 0x2c, 0x00, 0x00,

/ / 60

0x00, 0x2d, 0x00, 0x00, 0x00, 0x00, K_BACKSP, 0x00,

0x33, 0x1c, 0x00, 0x36, 0x39, 0x00, 0x00, 0x00,

/ / 70

0x32, 0x31, 0x34, 0x37, 0x38, 0x3a, K_ESC, 0x00,

K_F11, 0x3c, 0x35, 0x3d, 0x3e, 0x3b, 0x00, 0x00,

/ / 80

0x00, 0x00, 0x00, K_F7

);poniłtava getKeyStroke (uchar * CH) (

/ / Povratak prvi udarac tipke u kbdbuffer []

uchar I;

if (kbdbytes) (

ch * =* kbdbuffer;

kbdbytes -;

for (i = 0; i <kbdbytes; i )

kbdbuffer = kbdbuffer [i 1];

if (kbdbytes == KBDBUFFERLEN-1) (

kbdclk = 1; / / release kbdclk da ponovno omogućite tipkovnici RX

kbdclkm = 1;

)

# ifdef DEBUGKBD

rs232putbyte2hex ((uchar) * ch, '\ n');

# endif

povratak;

) Else (

* ch = 0;

povratak;

)

)/ / Novi pougljiti kada je primljena, reinitialize varijablu (koristi ga kbdGetChar)

# define kbdNewChar () (keyModifier = 0; keyReleased = 0;)/ * Vrati u uniKey karakter čita iz kbdbuffer, 0 ako nema znakova na raspolaganju * /

poniłtava kbdGetChar (void) (

uchar ch;

/ / U ovom trenutku sam se i glasi:

/ / A.
novi potpuna ili djelomična ključni udarac

/ / B.
završetku prethodne djelomične primio udarac tipke

/ / C.
drugi dio prethodne djelomične primio udarac tipkeif (uniKey)

lastUniKey = uniKey;

uniKey = 0; / / uniKey inicijalizirati na nulu (korisno ako "ne briga ključ" je prešani / objavljeno)

a (1) (

getKeyStroke (& ch); / / će se pohraniti u ch sljedeći dio pritisaka na tipke

if (ch == 0) (

/ / Ne keystrokes available

povratak;

)

if (ch == 0xF0) (

keyReleased = 1;

) Else if (ch == 0xE0) (

keyModifier = 1;

) Else if (ch == 0xE1) (

keyModifier = 2;

) Else if (ch == 0xAA) (

/ / Mora reinitialize tipkovnica

kbd_initialize (); / / PowerOn: inicijalizirate tipkovnice i prazna kbdbuffer []

kbdbytes = 0;

uniKey = 0;

kbdNewChar (); / / inicijalizirati varijable koje koriste ovu funkciju (keyRelease, keyModifier, ...)

povratak;

) Else if (ch <0x84) (

if (keyModifier == 0) (

preklopnik (CH) (

slučaju 0x12: / / lijevi SHIFT

slučaju 0x59: / / desni SHIFT

kbd_table.shift =! keyReleased; break;

slučaju 0x14: / / LIJEVO KONTROLA

kbd_table.ctrl =! keyReleased; break;

slučaju 0x11: / / lijevi ALT

kbd_table.alt =! keyReleased; break;

slučaju 0x58: / / CAPS LOCK

if (keyReleased == 1) (

kbd_table.capsLock ^ = 1;

kbd_initialize ();

) Break;

slučaju 0x77: / / NUM LOCK

if (keyReleased == 1) (

kbd_table.numLock ^ = 1; / / NUM LOCK uvijek aktivan!

kbd_initialize ();

) Break;

slučaju 0x7E: / / dođite BRAVA

if (keyReleased == 1) (

kbd_table.scrollLock ^ = 1;

kbd_initialize ();

) Break;

slučaju 0x07: / / F12

if (lastUniKey! = K_F12 | | keyReleased) (

uniKey = K_F12;

if (keyReleased)

uniKey | = 0x80;

)

break;

Zadano:

uniKey = key2uni [ch];

if (keyReleased) (

uniKey | = 0x80;

)

)

kbdNewChar ();

povratak;

) Else if (keyModifier == 1) (

preklopnik (CH) (

slučaju 0x14: / / PRAVO KONTROLA

kbd_table.ctrl = 1 ^ keyReleased; break;

slučaju 0x11: / / desni ALT

kbd_table.alt = 1 ^ keyReleased; break;

slučaju 0x4A: / / tipkovnica /

uniKey = 0x25; break;

slučaju 0x5A: / / tipkovnice ENTER

uniKey = K_ENTER; break;

slučaju 0x6B: / / K_LEFT

uniKey = K_LEFT; break;

slučaju 0x74: / / K_RIGHT

uniKey = K_RIGHT; break;

slučaju 0x72: / / K_DOWN

uniKey = K_DOWN; break;

slučaju 0x75: / / K_UP

uniKey = K_UP; break;

slučaju 0x70: / / K_INSERT

uniKey = K_INSERT; break;

slučaju 0x71:

uniKey = K_DELETE; break;

slučaju 0x6c:

uniKey = K_HOME; break;

slučaju 0x69:

uniKey = K_END; break;

slučaju 0x7d:

uniKey = K_PGUP; break;

slučaju 0x7a:

uniKey = K_PGDOWN; break;

slučaju 0x7c:

uniKey = K_SYSRQ; break;

)

if (keyReleased) (

uniKey | = 0x80;

)

kbdNewChar ();

povratak;

) Else if (keyModifier == 2) (

if (keyReleased == 0) (

# ifdef DEBUGKBD

rs232putchar ( 'E');

rs232putchar ('1 ');

rs232putchar ( '');

rs232putbyte2hex (CH, '');

# endif

)povratak;

)

)

)

)poniłtava kbd_sendData (uchar podataka) (

/ / Priprema za prijenos komandi na tipkovnici, a zatim pričekajte

/ / ISR završiti do mjenjača, pričekajte da se i ack retransmit naredbu

/ / Ako NOACK.

uchar i, j, CH;for (i = 5; I; i -) (

kbdtx = 1; / / reci prekinuti rutinu u TX podataka

kbdbyte = data;

kbdbits = 0;

kbdoddparity = 0;

kbderr = 0;

kbdto = 20; / / tipkovnica mora dovršili operaciju u roku od 15ms

kbdintmask = 1;

kbdclk = 0; / / potegnuti sat niska

kbdclkm = 0;

for (j = 0; j <100; j ); / / čekati 100uS

kbddata = 0; / / pull podataka niska, a zatim otpustite sat

kbddatam = 0;

for (j = 0; j <10; j );

kbdclk = 1;

kbdclkm = 1;

kbdintflag = 0;

kbdintmask = 0;

/ / OK, start bita je prenosiva, a zatim prekinuti rutinu će učiniti ostalo/ / Čekati dok će podaci biti TXed

for (j = 100; j, j -) (

unconditionalmsleep (2);

if (kbdtx == 0)

break;

)

kbdNewChar ();

if (j == 0) (

kbdtx = 0;

kbddata = 1; / / tipkovnica nije povezan: postavite kbd_data kao input, a zatim izađite

kbddatam = 1;

povratak;

)

if (kbderr) (

# ifdef DEBUGKBD

rs232puts ( "kbd_sendData: Data TXed, ali je dobio NACK \ n");

# endif

unconditionalmsleep (10); / / podaci prenose, ali ne i priznat

nastavi;

)

for (j = 25; j, j -) (

/ / Čekati ack

unconditionalmsleep (2);

dok (getKeyStroke (& CH), CH) (

kbdNewChar ();

if (ch == 0xfa)

break;

)

if (ch == 0xfa) (

povratak;

) Else if (ch) (

# ifdef DEBUGKBD

rs232puts ( "kbd_sendData: dobio odgovor 0x");

rs232putbyte2hex (CH, '\ n');

# endif

)

)

)

)
poniłtava kbd_initialize (void) (

/ / Vraćanje tipkovnici & leds stopu u skladu s tim da kbd_table struktura

/ / Mora biti nazvan po tipkovnici powerOn (kada je tastatura 0xAA slanje podataka)

unconditionalmsleep (20);

/ / Nemojte mijenjati brzina i kašnjenje ...
zadana je 10.9cps i 500ms

/ / kbd_sendData (KBD_CMD_SET_RATE);

/ / kbd_sendData (0x00); / / maksimalna brzina, minimalno kašnjenje

kbd_sendData (KBD_CMD_SET_LEDS);

kbd_sendData (kbd_table.scrollLock | (kbd_table.numLock <<1) | (kbd_table.capsLock <<2));

kbdNewChar ();

uniKey = 0;

)poniłtava kbdinit (void) (

kbdclk = 1; / / kbdclock = output

kbdclkm = 1;

kbdclku = 1;

kbddata = 1;

kbddatam = 1;

kbddatau = 1;

kbdintegp = 0;

kbdintegn = 1;

kbdintflag = 0;

kbdintmask = 0;

kbdintprio = 1;

kbdtx = 0;

kbdbytes = 0;

kbdbits = 0;

kbdbyte = 0;

kbdbit = 0;

kbderr = 0;

kbdoddparity = 0;

kbdto = 0;

kbd_table.capsLock = 0;

kbd_table.scrollLock = 0;

kbd_table.numLock = 1;

kbd_table.shift = 0;

kbd_table.alt = 0;

kbd_table.ctrl = 0;

/ / Inicijalizirate tipkovnicu samo kad 0xAA (PowerOn) će biti primljena

/ / Kbd_initialize ();

)statički prekinuti [INTP3_vect] poniłtava kbdinterrupt (void) (

/ / Zove se kbdclk ide sve niske => reza mora kbddata

if (kbdto == 0) (/ / Control tipkovnici timeout (2 ms primiti udarac tipke

kbderr = 0;

kbdbits = 0;

kbdoddparity = 0;

kbdto = 3; / / set keyboad vremena

kbdtx = 0;

kbddata = 1;

kbddatam = 1;

)

if (kbdtx) (

/ / Prenijeti na tipkovnici

kbdbits ;

if (kbdbits <= 8) (

if (kbdbyte & 1) (

kbdoddparity ^ = 1;

kbddata = 1;

) Else (

kbddata = 0;

)

kbdbyte>> = 1;

) Else if (kbdbits == 9) (

/ / Prenositi paritet

kbddata = ~ kbdoddparity;) Else if (kbdbits == 10) (

/ / Stop prijenos bita

kbddata = 1;

kbddatam = 1;

) Else if (kbdbits == 11) (

/ / Get Priznajete

kbderr = kbddata;

kbdtx = 0;

kbdto = 0;

)

) Else (

/ / Primanja iz klavijatura

kbdbit = kbddata; / / read podataka

if (kbdbits == 0) (

if (kbdbit) (

/ / Kontrola početi bitni (mora biti nula!)

kbderr = 1;

)

) Else if (kbderr == 0) (

if (kbdbits> = 1 & & kbdbits <= 8) (

kbdbyte>> = 1;

if (kbdbit) (

kbdbyte | = 0x80;

kbdoddparity ^ = 1;

)

) Else if (kbdbits == 9) (

/ / Kontrolni bit

if (kbdbit == kbdoddparity) (

kbderr = 1;

)

) Else if (kbdbits == 10) (

/ / Stop bita

if (kbdbit == 0) (

kbderr = 1;

)

)

)

if (( kbdbits) == 11) (

if (kbderr == 0) (

/ / Nema greške => pohraniti bajt primili na kbdbuffer

kbdbuffer [kbdbytes] = kbdbyte;

if (( kbdbytes) == KBDBUFFERLEN) (

kbdclk = 0; / / povlačenjem kbddata niska, tipkovnica komunikacija će biti inhibirankbdclkm = 0;

)

kbdtimeout = KBDTIMEOUT;

)

kbdto = 0;

)

)

kbdintflag = 0; / / reset prekidati flag

)uchar kbdAsciiConv (void) (

/ / Read uniKey globalna varijabla: return 0 ne ascii

if (uniKey & 0x80 | | uniKey == 0)

return 0; / / ključ izdali ili nepoznato

uniKey & = 0x7f;

if (uniKey <= 26) (

if (kbd_table.shift ^ kbd_table.capsLock) (

povratak shiftuni2ascii [uniKey];

) Else (

povratak uni2ascii [uniKey];

)

) Else if (uniKey <= 0x30) (

if (kbd_table.shift) (

povratak shiftuni2ascii [uniKey];

) Else (

povratak uni2ascii [uniKey];

)

) Else if (uniKey <UNI2ASCIILEN) (

povratak uni2ascii [uniKey];

)

return 0;

)

 
Zdravo,
Lokalitet "Panda" je svibanj se koristiti bilo koje druge stranice ali ie "Beyondlogic" ima pravo info u žele ... Pokušao sam ga i napravio program u Skupštini Jezik koji koriste informacije. [/ B]

 
http://www.semiconductors.com/acrobat/applicationnotes/AN434.pdf

 
http://www.beyondlogic.org/ Dobar site za PC interfaceing [/ url]
 
Čitanje jednog AT PC tipkovnicehttp://www.mcselec.com/an05.htm
<img src="http://www.edaboard.com/images/smiles/icon_smile.gif" alt="Osmjeh" border="0" />
 
Dragi prijatelji,

Jedan od naših PRIJATELJ je poslao dugu LONG "C" code gore ..ali

zašto mislite da netko
nije ...-> Gdje su hader datoteke.?

RONY.

 

Welcome to EDABoard.com

Sponsor

Back
Top