maticova klavesnice v C
HUDA
hudaklan
Středa Březen 17 12:05:12 CET 2004
Souhlasi.
HUDA
----- Original Message -----
From: "Jakub Ladman" <ladmanj@volny.cz>
To: "Multiple recipients of list" <hw-news@list.gin.cz>
Sent: Saturday, February 17, 2001 1:03 AM
Subject: Re: maticova klavesnice v C
> Rozumim-li tomu spravne, tak sluvko display ve vasem pripade je prave
takova
> matice 4x? LED. Pokud ano, tak mam prakticky hotovo.
> Dekuji
> Jakub Ladman
>
> ----- Original Message -----
> From: "František Hudeček" <hudaklan@volny.cz>
> To: "Multiple recipients of list" <hw-news@list.gin.cz>
> Sent: Friday, February 16, 2001 8:02 AM
> Subject: Re: maticova klavesnice v C
>
>
> > This is a multi-part message in MIME format.
> >
> > ------=_NextPart_000_005B_01C097EE.3D5BA240
> > Content-Type: text/plain;
> > charset="iso-8859-2"
> > Content-Transfer-Encoding: 7bit
> >
> > Do prilohy jsem dal program rizeni ctyrmistneho displeje a cteni
maticove
> > klavesnice s opakovanim stisknuteho znaku. Sloupce klavesnice jsou
> > HW sprazeny s e sloupci displeje.
> > V kazdem preruseni se osetri jeden sloupec displeje a precte se jeden
> > radek z klavesnice. Po precteni vsech radek je proveden vypocet znaku
> > a jeho ulozeni do klavesoveho buferu.
> >
> > HUDA
> >
> > ----- Original Message -----
> > From: Jakub Ladman <ladmanj@volny.cz>
> > To: Multiple recipients of list <hw-news@list.gin.cz>
> > Sent: Thursday, February 15, 2001 3:20 PM
> > Subject: Re: maticova klavesnice v C
> >
> >
> > > 1) Poopravuju se, ten interval mezi prerusenimi nema byt 10ms, ale
1ms.
> > (f.
> > > celeho m-plexu: 1/(4*1ms) = 250Hz).
> > > Dulezite je to, ze na stejnem m-plexu bude taky matice 4x4 LED a ta
> nesmi
> > > blikat a musi mit dostatecny jas. (u kazdeho tlacitka bude jedna
ledka)
> > > Tak tedy dalsi dotaz - je tato frekvence pro ty ledky vhodna?
> > > Puvodne jsem to nechtel motat dohromady, ale uz je to venku.
> > > 2) MH1KK1 - da se to jeste nekde sehnat? Nad necim takovym jsem
puvodne
> > > uvazoval, ale kdyz on je docela velky, a navic tam ten m-plex tak jako
> tak
> > > musi byt.
> > > Diky
> > > Jakub Ladman
> > > ----- Original Message -----
> > > From: "Snail Instruments" <snail@iol.cz>
> > > To: "Multiple recipients of list" <hw-news@list.gin.cz>
> > > Sent: Thursday, February 15, 2001 1:09 PM
> > > Subject: Re: maticova klavesnice v C
> > >
> > >
> > > > >Ted se chystam na cteni maticove klavesnice 4x4 tlacitka pod
> > prerusenim.
> > > >
> > > > Otazkou zustava, je-li preruseni v tomto pripade nezbytne. Jestlize
> > hlavni
> > > > program nema cas zpracovavat stisk tlacitek, pak je zbytecne jejich
> stav
> > > > vubec sledovat. Az si cas udela, pak je mozne tlacitka nacist.
> > > >
> > > > >a prerusovat asi po 10ms.
> > > > >Multiplex si predstavuji tak, aby se opakoval kazde 4 preruseni.
> > > >
> > > > Testovat tlacitka s intervalem 40ms je uz dost pomale, muze se stat,
> ze
> > > > kratky stisk tlacitka unikne pozornosti programu, tech 10ms by bylo
> tak
> > > > akorat, spolehlive potlaci zakmity.
> > > >
> > > > >jak byste z te klavesnice predavali vysledky hlavnimu programu?
> > > > Na to musi myslet hlavni program, predavat se da treba aktualni stav
> > > > klavesnice v globalni promenne.
> > > >
> > > > J. Hanzal
> > > >
> > > >
> > > >
> =======================================================================
> > > > Electronical devices for chemical laboratory, custom electronics
> design
> > >
> > -----------------------------------------------------------------------
> > > > Snail Instruments Josef Hanzal, M. S.
> > > > Vojanova 615 phone/fax: +420-311-624433
> > > > 266 01 Beroun e-mail: snail@iol.cz
> > > > Czech Republic URL:
> http://www.vitrum.cz/snail/
> > > > GPS: 49deg58'28" North, 14deg 4'35" East
> > > >
> =======================================================================
> > > >
> > > >
> > >
> > >
> >
> > ------=_NextPart_000_005B_01C097EE.3D5BA240
> > Content-Type: text/plain;
> > name="klav.txt"
> > Content-Transfer-Encoding: quoted-printable
> > Content-Disposition: attachment;
> > filename="klav.txt"
> >
> > unsigned char code KLAVESY[64]=3D{ // pro foliovou klavesnici
> > 0x0ff, // nic bit radku 4
> > K1, // 1
> > K2, // 2
> > 0x0ff, // 12
> > K3, // 3
> > 0x0ff, // 1 3
> > 0x0ff, // 23
> > 0x0ff, // 123
> > KE, // ESC
> > 0x0ff, // 1 ESC
> > 0x0ff, // 2 ESC
> > 0x0ff, // 12 ESC
> > 0x0ff, // 3ESC
> > 0x0ff, // 1 3ESC
> > 0x0ff, // 23ESC
> > 0x0ff, // 123ESC
> >
> > 0x0ff, // nic bit radku 3
> > K4, // 4
> > K5, // 5
> > 0x0ff, // 45
> > K6, // 6
> > 0x0ff, // 4 6
> > 0x0ff, // 5 6
> > 0x0ff, // 456
> > KM, // MENU
> > 0x0ff, // 4 MENU
> > 0x0ff, // 5 MENU
> > 0x0ff, // 45 MENU
> > 0x0ff, // 6MENU
> > 0x0ff, // 4 6MENU
> > 0x0ff, // 5 6MENU
> > 0x0ff, // 456MENU
> >
> > 0x0ff, // nic bit radku 2
> > K7, // 7
> > K8, // 8
> > 0x0ff, // 78
> > K9, // 9
> > 0x0ff, // 7 9
> > 0x0ff, // 8 9
> > 0x0ff, // 789
> > 0x0ff, // NIC
> > 0x0ff, // 7 NIC
> > 0x0ff, // 8 NIC
> > 0x0ff, // 78 NIC
> > 0x0ff, // 9NIC
> > 0x0ff, // 7 9NIC
> > 0x0ff, // 8 9NIC
> > 0x0ff, // 789NIC
> >
> > 0x0ff, // nic bit radku 1
> > KL, // L
> > K0, // 0
> > 0x0ff, // L0
> > KR, // R
> > 0x0ff, // L R
> > 0x0ff, // 0R
> > 0x0ff, // L0R
> > KN, // ENT
> > 0x0ff, // L ENT
> > 0x0ff, // 0 ENT
> > 0x0ff, // L0 ENT
> > 0x0ff, // RENT
> > 0x0ff, // L RENT
> > 0x0ff, // 0RENT
> > 0x0ff, // L0RENT
> > };
> >
> > void timer0(void) interrupt 1 using 1 // preruseni od citace 0
> > { // ovlada displej, klavesnici
> > TL0=3DLOW(KPRER0);
> > TH0=3DHIGH(KPRER0);
> > DISPRL=3D0x00; // posli 00 na radek
> > DISPRH=3D0x00; // posli 00 na radek
> >
> > if (citac) // citac pro zpozdeni
> > citac--;
> > if (ccitac) // citac pro zobrazovani casu
> > ccitac--;
> >
> > DISPS=3DSLOUPCE[sloupec];
> > pom=3DTVARYZN[displej[sloupec]]; // vyzvedni tvar znaku
> > if (pom=3D=3DTNULA) // zobrazuj nulu??
> > {
> > if (!zobr) // predchazejici byla take nula??
> > if (sloupec>tecka)
> > if (sloupec)
> > pom=3D0x0000; // ano, nezobrazuj ji
> > }
> > else
> > zobr=3D1; // nastav priznak predchazejici neni 0
> > if (!fblik) // pri blikani nebudeme svitit
> > if (bsloupec) // test na blikani jen jednoho znaku
> > {
> > if (bsloupec=3D=3Dsloupec+1) // test na blikani jen jednoho =
> > znaku
> > pom=3D0x0000; // ano, zhasni znak
> > }
> > else
> > pom=3D0x0000; // zhasni znak
> > if (tecka=3D=3Dsloupec) // zobrazovat desetinnou tecku??
> > if (pom) // je vubec co zobrazovat
> > pom|=3D0x8000; // pridej deset. tecku
> >
> > DISPRL=3Dpom; // posli znak na radek
> > DISPRH=3D(pom>>8); // posli znak na radek
> >
> > // rutina pro klavesnici
> > p_c=3DKLAVC; // precti port s klavesnici
> > p_c=3Dp_c/16; // orotuju na nizsi
> > p_c^=3D0x0f; // oxoruju nizsi bity
> >
> > p_key[sloupec]=3Dp_c; // a dam do bufferu
> > if ((sloupec=3D=3DMAXKDISP-1) && (dklav =3D=3D 0)) // kdyz vsechny
=
> > sloupce precteny
> > { // a delay cas uz vyprsel
> > for (p_c=3D0;p_c<MAXKDISP;p_c++)
> > {
> > if (p_key[p_c] !=3D0x00)
> > {
> > p_c=3DKLAVESY[(16*p_c)|(p_key[p_c])]; // dostanu cislo
> > if (p_c !=3D0xff) // je stisknuta skutecna klavesa
> > {
> > if ((pklav<MAXKLAV)) // osetreni opakovani znaku
> > {
> > oklav =3D p_c;
> > klav[pklav] =3D p_c;
> > pklav++;
> > dklav =3D KDELAY;
> > }
> > }
> > break;
> > }
> > }
> > }
> > else
> > {
> > if (dklav)
> > dklav--;
> > }
> >
> > if (k_cas)
> > k_cas--;
> >
> > if (sloupec) // je uz posledni sloupec??
> > sloupec--; // neni, zmensit
> > else
> > {
> > sloupec=3DMAXDISP-1; // sloupce znovu
> > zobr=3D0; // nastav priznak nul
> > }
> >
> > if (blik) // je blikani znakovky ??
> > {
> > if (!blikani--) // jeste zustat??, zmensi pocitadlo
> > { // uz zmenit stav blikani
> > blikani=3DKBLIK; // nastav pocitadlo znovu
> > fblik=3D!fblik; // zmen priznak stavu
> > }
> > }
> > else
> > fblik=3D1; // nastav, neblikat-svitit
> >
> > }
> >
> > /* funkce cteni klavesnice i s opakovanim stisknuteho znaku
> > unsigned char ctiznak(void)
> > {
> > unsigned char c_b;
> > if (pklav>0) // neni prazdny buffer
> > { // precti 1 znak a posun buffer a odecti naplneni o 1
> > c_b=3Dklav[0];
> > memmove(klav,klav+1,MAXKLAV-1);
> > klav[MAXKLAV-1]=3D0; // nuluju posledni byte bufferu
> > pklav--; // snizuju naplneni bufferu
> > }
> > else // je prazdny buffer
> > {
> > if (oklav !=3D 0xff) // osetreni opakovani znaku
> > {
> > if (k_cas =3D=3D-1)
> > k_cas=3DKODELAY;
> > if (k_cas =3D=3D0 )
> > {
> > oklav=3D0xff; // dam posledni klavesu nic
> > k_cas =3D-1;
> > }
> > }
> > c_b=3D0xff; // buffer je prazdny - zadne pismenko zpet
> > }
> > return (c_b);
> > }
> >
> > unsigned char ckbhit(unsigned char cekat)
> > {
> > unsigned char zn;
> > if (cekat) // budeme cekat na klavesu ???
> > while((zn=3Dctiznak())=3D=3D0xff); // ano, cekame na klavesu
> > else // ne, necekame na klavesu
> > zn=3Dctiznak(); // neni, vrat ze neni klavesa
> > return(zn); // vrat znak
> > }
> >
> > unsigned char cgetch (void)
> > {
> > return ckbhit(1);
> > }
> >
> > ------=_NextPart_000_005B_01C097EE.3D5BA240--
> >
> >
>
>
Další informace o konferenci Hw-list