klávesnice - key down(up) PICAXE
Moderátor: Moderátoři
- Persink163054
- Příspěvky: 29
- Registrován: 05 říj 2011, 00:00
klávesnice - key down(up) PICAXE
sestavil jsem si tuto specifickou klávesnici kterou zpracovávám následujícím kodem pro procesor PICAXE. Vybrané tlačítko pak odešle na seriovou linku text se znakem příslušné klávesy a to pak následně zpracovávám v Delphi7.
Problém který řeším, je jak upravit stávající kod, tak aby se na sériovou linku odeslal jen jeden text(znak). Tedy stlačím tlačítko, odešlu jeho text(znak) a i když jej stále držím, už se neodešle nic.
Pro další poslání je tedy nutné tlačítko uvolnit a zmáčknout nové.
Předem děkují za cenné rady.
zdrojový kod:
main: rem začatek programu
readadc A.1,b0 ; klávesnice připojena na vstup A.1 (pin 3)
select case b0 ; vybereme správné tlačítko a odešleme na seriovou linku
case > 250
serout 3,N9600, ("L")
case > 193
serout 3,N9600, ("1")
case > 154
serout 3,N9600, ("2")
case > 128
serout 3,N9600, ("3")
case > 110
serout 3,N9600, ("6")
case > 95
serout 3,N9600, ("5")
case > 85
serout 3,N9600, ("4")
case > 75
serout 3,N9600, ("LS")
case > 70
serout 3,N9600, ("PS")
case > 64
serout 3,N9600, ("7")
case > 59
serout 3,N9600, ("8")
case > 54
serout 3,N9600, ("9")
case > 51
serout 3,N9600, ("0")
case > 48
serout 3,N9600, ("P")
end select
low b.1 ; vypínání a zapínání LED, jako optická kontrola
pause 25 ; že došlo k naprogramování a PICAXE odesílá data
high b.1
pause 25
goto main ; návrat na začátek
- Přílohy
-
jen klavesnice.GIF- schéma klávesnice
- (7.32 KiB) Staženo 238 x
-
jen klavesnice.GIF- (7.32 KiB) Staženo 234 x
-
petrfilipi
- Příspěvky: 2901
- Registrován: 13 zář 2005, 00:00
- Persink163054
- Příspěvky: 29
- Registrován: 05 říj 2011, 00:00
Moc díky.
Zdrojový kod:
main: rem začatek programu
readadc A.1,b0 ; klávesnice připojena na vstup A.1 (pin 3)
; proměnná b0 je stav tlačítek
select case b0 ; proměnná b1 je příznak stisknutí. Je-li b1=0
; je povoleno odeslání na ser.linku. Vzápětí se
case > 250 ; hodnota b1=1
if b1 = 0 then
serout 3,N9600, ("L")
let b1 = 1
end if
case > 193
if b1 = 0 then
serout 3,N9600, ("1")
let b1 = 1
end if
case > 154
if b1 = 0 then
serout 3,N9600, ("2")
let b1 = 1
end if
case > 128
if b1 = 0 then
serout 3,N9600, ("3")
let b1 = 1
end if
case > 110
if b1 = 0 then
serout 3,N9600, ("6")
let b1 = 1
end if
case > 95
if b1 = 0 then
serout 3,N9600, ("5")
let b1 = 1
end if
case > 85
if b1 = 0 then
serout 3,N9600, ("4")
let b1 = 1
end if
case > 75
if b1 = 0 then
serout 3,N9600, ("LS")
let b1 = 1
end if
case > 70
if b1 = 0 then
serout 3,N9600, ("PS")
let b1 = 1
end if
case > 64
if b1 = 0 then
serout 3,N9600, ("7")
let b1 = 1
end if
case > 59
if b1 = 0 then
serout 3,N9600, ("8")
let b1 = 1
end if
case > 54
if b1 = 0 then
serout 3,N9600, ("9")
let b1 = 1
end if
case > 51
if b1 = 0 then
serout 3,N9600, ("0")
let b1 = 1
end if
case > 48
if b1 = 0 then
serout 3,N9600, ("P")
let b1 = 1
end if
readadc A.1,b0 ; klávesnice připojena na vstup A.1 (pin 3)
case = 0 ; b0=0, nestisknuto žádné tlačítko
if b1 = 1 then ; bylo-li b1=1, změní se na b1=0 a počká se
; na stisk
let b1 = 0
end if
end select
low b.1 ; vypínání a zapínání LED, jako optická kontrola
pause 25 ; že došlo k naprogramování a PICAXE odesílá data
high b.1
pause 25
goto main ; návrat na začátek
-
petrfilipi
- Příspěvky: 2901
- Registrován: 13 zář 2005, 00:00
Další vylepšení by mohlo být řešení nějakou vysílací procedurou, do které by vstupoval kód stisknutého znaku. Abys to otrocky nemusel kopírovat pro každou hodnotu.
Pak bys mohl jak hodnoty z analogového vstupu, tak i výstupní kódy uložit do dvou polí. Porovnával bys v cyklu hodnotu z analogového vstupu s jedním polem a pak bys hned měl výsledek v druhém poli. Jde o to, že pak jednoduše můžeš rozšířit množství rozeznávaných hodnot, aniž bys musel měnit vlastní porovnávací proceduru.
Taky pozor na odskok kontaktu při spínání tlačítka.
Petr