Re: tlačítko a zákmity
Aleš Novák
ales.novak@t-email.cz
Čtvrtek Červen 22 18:49:29 CEST 2006
Bez potreby autorepeatu to resim ve svych programech nejak takto.
S autorepeatem mam silenou rutinu, kterou nemam odvahu zverejnovat.
Ale s trochou premysleni by sla jiste upravit i tahle :-)
V kazdem "spravnem" programu je timerem vyvolavano preruseni takze
neni problem do nej vlozit neco jako generator udalosti pri stisku
tlacitka. Nepisete typ procesoru, tohle je pro x51.
;Tohle do datového segmentu
KeySens: ds 1 ;po startu nula (nebo cokoliv)
OldKey: ds 1 ;po startu nula
Key_Event: ds 1 ;po startu nula
sbit Key1 = P3_0 ;stisknuté tlačítko = nula
sbit Key2 = P3_1
;------------------------------------------------------------------------------
;Tohle volat každých 10ms (v přerušení od timeru).
;Generuje události od až 8 tlačítek (bez autorepeatu). V okamžiku stisku
;nekterého tlačítka (nebo tlačítek), nastaví příslušné bity na adrese
;Key_Event. Pak nějakou dobu ignoruje další změny na vstupech.
;Key_Event je zpracován a nulován v hlavní smyčce.
;------------------------------------------------------------------------------
;-------------- Generování událostí od tlačítek -------------------------------
;------------------------------------------------------------------------------
KeyEv: mov a,KeySens ;necitlivost na zákmity
jz KeyEvGo
dec KeySens
ret
KeyEvGo: call KeyScan ;aktuání stav tlačítek (1=stisknuto)
xch a,OldKey ;schovat na příště
xrl a,OldKey ;změnilo se od minule něco?
jz KeyEvEx ;nezměnilo
anl a,OldKey ;byl to stisk?
jz KeyEvSH ;nebyl, bylo to uvolnění
orl a,Key_Event ;přidáme k ještě nevyřízeným stiskům
mov Key_Event,a ;
KeyEvSH: mov KeySens,#3 ;po stisku nebo uvolnění 3x ignorovat
KeyEvEx: ret
;------------------------------------------------------------------------------
;-------------- Načítání stavu tlačítek ---------------------------------------
;------------------------------------------------------------------------------
KeyScan: clr a ;aktuální stav tlačítek uloží
cpl a ;do akumulátoru
mov c,Key2 ;stisknuté tlačítko bude mít
rlc a ;příslušný bit = 1
mov c,Key1
rlc a
cpl a
ret
Novalex
lm> a opět jeden začátečnický dotaz..
lm> u svých hodin se snažím udělat pomocí tlačítek nějáké nastavení..
lm> na tlačítko jsem dal přerušení reagující na hranu, ale samozřejmě se mi
lm> díky zákmitům vyvolává několikrát..
lm> vyřeší to RC filtr? nebo na to mám jít úplně jinak..
lm> děkuji za odpověď.
Další informace o konferenci Hw-list