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