maticova klavesnice v C
Jakub Ladman
ladmanj
Středa Březen 17 12:05:13 CET 2004
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