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