 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
clownfish Član

Pridružen-a: Pet 05 Avg 2005 13:05 Prispevkov: 765 Aktiv.: 3.23 Kraj: Povir / Ljubljana
|
Objavljeno: Čet Jan 17, 2008 11:15 am Naslov sporočila: branje tipk |
|
|
Na nekem kontrolerju imam LCd in 4 tipke.
tipke so esc, gor/+, dol/- in ENT.
Osnovno branje tipk deluje tako, da preberem tipko in štejem čas koliko časa je pritisnjena. Če je pritisnjena več kot nek nastavljen čas je tipka veljavna.
Potem čakam, da je tipka spuščena, da nadaljujem.
Želel bi pa, da če tipko držim, da mi čez čas začne ponavljati.. torej podobno kot na Pc tipkovnici kjer imaš za nastaviti čas do ponavljanja in čas ponavljanja.
Torej da odpade dodatno preverjanje če je tipka spuščena.
Ima kdo že kaj takega sprogramiranega??? |
|
Nazaj na vrh |
|
 |
rajko Član

Pridružen-a: Čet 29 Jun 2006 20:09 Prispevkov: 98 Aktiv.: 0.42 Kraj: Trbovlje
|
Objavljeno: Čet Jan 17, 2008 2:12 pm Naslov sporočila: |
|
|
Tipko beri določen čas, če je po tem času še vedno pritisnjena jo enostavno ignoriraj in izvedi željeni program. Razen seveda, če za eno tipko ne potrbuješ dve različni dolžini preverjanja pritisnjenosti, kar pa je glede na 4 tipke malo verjetno. |
|
Nazaj na vrh |
|
 |
igo Član

Pridružen-a: Sre 11 Okt 2006 19:11 Prispevkov: 3641 Aktiv.: 16.01
|
Objavljeno: Čet Jan 17, 2008 2:22 pm Naslov sporočila: |
|
|
Če šteješ čas držanja tipke, imaš že vse napravljeno.
Ti samo zaznavaj dogodek, ko števec pride naokrog ( "overflow" števca) in to upoštevaj kot ponoven pritisk na tipko. Držanje tipke bo učinkovalo enako kot zelo hitro pritiskanje. V PIC zbirniku bi bilo takole:
Koda: |
btfss Tipka1 ; je tipka pritisnjena?
goto Ven1 ; Ne
; Da
incfsz StevcT1,f ; Povečaj StevcT1. Je ze okrog?
return ; NE
; Da
bsf Tipka1P ; Vklopi Tipka1 Pritisnjena - V programu sedaj veš, da je bila tipka uspešno pritisnjena, zato lahko izvedeš tisto, kar se mora takrat zgoditi.
Naslednjic bo zaznalo pritisnjeno tipko, ko bo StevcT1 spet prišel iz 256 na 0.
....
movlw .111 ; Ce je cakanje na 256 povecanj StevcT1 predolgo,
movf StevcT1 ; naj StevcT1 prileze naokrog cez naprimer 256-111=145 povecanj
return ;
Ven1
clrf StevcT1
bcf Tipka1P ; Izklopi Tipka1 Pritisnjena
return |
Sedaj pa to "vstavi" v svoj program.
LP,
Igor _________________ Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor |
|
Nazaj na vrh |
|
 |
clownfish Član

Pridružen-a: Pet 05 Avg 2005 13:05 Prispevkov: 765 Aktiv.: 3.23 Kraj: Povir / Ljubljana
|
Objavljeno: Čet Jan 17, 2008 4:02 pm Naslov sporočila: |
|
|
Sedaj imam narejeno takole..
tipke berem z v timer interuptu, ki teče z 64Hz.
Če je tipka <> 0 (torej je nekaj pritisnjeno)jo shranim v stara_tipka in poženem timer_tipka.
ob naslednjem interuptu pogledam če je pritisnjena še vedno ista tipka in povečam števec. Če je bila spuščena ali je pritisnjena druga tipka restiram števec na 0 in spremenim vrednost v stara_tipka.
v glavni funkciji kjer preverjam tipke pa imam..
Citiram: |
if ((tipka==1)&&(timer_tipka>10))
- funkcija 1
else if ((tipka==2)&&(timer_tipka>10))
- funkcija 2
else if ((tipka==3)&&(timer_tipka>10))
- funkcija 3
|
v bistvu pa bi rabil še en parameter..
torej:
če je tipka pritisnjena stalno več kot 1s in še vedno pritisnjena vsake 1/5 sekunde vrnem kot, da je tipka na novo pritisnjena...
podobno deluje vnos na napravah... pritisneš se parameter poveča, držiš in čez čas se parameter povečuje avtomatsko brez, da bi tipko spustil.. |
|
Nazaj na vrh |
|
 |
igo Član

Pridružen-a: Sre 11 Okt 2006 19:11 Prispevkov: 3641 Aktiv.: 16.01
|
Objavljeno: Čet Jan 17, 2008 4:26 pm Naslov sporočila: |
|
|
Ne kompliciraj z novimi spremenljivkami.
Koda: |
if ((tipka==1)&&(timer_tipka>10)) // Ali je timer_tipka>10 ?
- timer_tipka=5 // V stevec timer_tipka vstavimo konstanto 5 , za naslednjic.
- funkcija 1 // Izvede se funkcija 1 , naslednjic se bo izvedla, ko bo timer_tipka prilezla iz =5 na >10 . Torej čez polovico krajši čas, kot je bil potreben, da je iz =0 prilezel do >10 .
else if ((tipka==2)&&(timer_tipka>10)) // Ali je timer_tipka>10 ?
- timer_tipka=3 // V stevec timer_tipka vstavimo konstanto 3 , za naslednjic.
- funkcija 2 // Izvede se funkcija 2 , naslednjic se bo izvedla, ko bo timer_tipka prilezla iz =3 na >10 . Torej čez tretjino krajši čas, kot je bil potreben, da je iz =0 prilezel do >10 .
else if ((tipka==3)&&(timer_tipka>10)) // Ali je timer_tipka>10 ?
- timer_tipka=7 // V stevec timer_tipka vstavimo konstanto 7 , za naslednjic.
- funkcija 3 // Izvede se funkcija 3 , naslednjic se bo izvedla, ko bo timer_tipka prilezla iz =7 na >10 . Torej čez dve tretjini krajši čas, kot je bil potreben, da je iz =0 prilezel do >10 . |
Če spremenljivki tipka_timer prednastaviš večjo vrednost (npr. 7), se bo funkcija izvajala pogosteje (krajši čas od 7 do 10), če pa ji prednastaviš nižjo vrednost (npr. 3), se bo izvajala redkeje.
Za bolj fino nastavljanje naj prekinitev pogosteje povečuje tipka_timer, da boš lahko preverjal z npr. >100 za enak čas kot sedaj z >10 .
LP,
Igor _________________ Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor |
|
Nazaj na vrh |
|
 |
clownfish Član

Pridružen-a: Pet 05 Avg 2005 13:05 Prispevkov: 765 Aktiv.: 3.23 Kraj: Povir / Ljubljana
|
Objavljeno: Čet Jan 17, 2008 4:49 pm Naslov sporočila: |
|
|
igo je napisal/a: |
Ne kompliciraj z novimi spremenljivkami. |
IGO
ZVITA in odlična rešitev... točno to kar sem potreboval!
Bom sprobal na konkretnem primeru in javim kako se obnese!
HVALA! |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 494 dni
Powered by phpBB © 2001, 2005 phpBB Group
|