Inviato il: 22/01/2015 09:02:52
|
Ciao a tutti.
Mentre stavo lavorando sul codice del timer, aperto in un'altra discussione, ho elaborato questo metodo per inserire un valore a due o piu' cifre usando soltanto due tasti.
il sistema che stavo usando prima consisteva nell'incrementare il valore della cifra da impostare di 1 ad ogni pressione e confermato con l'altro tasto.
Ma questo sistema porta via molto tempo se si deve impostare un valore alto
Con questo nuovo metodo invece, si imposta una sola cifra per volta in modo da poter impostare valori anche di 4 cifre in pochi secondi.
La cifra che si sta' impostando e' lampeggiante e premendo il bit5 viene incrementata di 1, una volta raggiunto il valore che si vuole si preme il bit3 e si passa alla cifra seguente.
Il codice e' questo:
PRAGMA NO_NUM_LINE
'CODE NAME: SET VALUE WITH TWO NUMBER VERSION 4_0
'AUTHOR: ECOLOGIX 1971
'STARTED : 17_01_2015
'FINISHED: 22_01_2015
'PPTEA VERSION: 4_2_4
'MEMORY OCCUPED: 229 TOKEN
'BIT5 INCREMENTA CIFRA LAMPEGGIANTE
'BIT3 CAMBIA CIFRA
'PER CAMBIARE IL NUMERO DI CIFRE DA SETTARE E' SUFFICIENTE MODIFICARE IL VALORE DELLA COSTANTE NUM_CIFRE CHE
'ORA VALE 2
'IL VETTORE CIFRA VERRA' DIMENSIONATO AUTOMATICAMENTE
'POI BISOGNA AGGIUNGERE ALTRI VALORI ALL'ISTRUZIONE DATA CHE SONO IL NUMERO DI CIFRE E LA POSIZIONE DEL CURSORE
'EVOLUZIONE
'RISPETTO ALLE VERSIONE PRECEDENTE CI SONO MENO CICLI GOSUB/RETURN
'RIMPIAZZATI DA COMANDI GOTO ED IN PIU' NEL COMANDO DATA
'OLTRE AL NUMERO DI CIFRA E LA POSIZIONE DEL CURSORE C'E' ANCHE IL VALORE MAX CHE DEVE ASSUMERE LA CIFRA
'QUEST'ULTIMO UTILE SE I VALORI DA IMPOSTARE SONO ORARI E QUINDI SI RESETTANO A 60 ANZICHE' 100
'
'DA NOTARE CHE SE LA PRIMA CIFRA (DECINE) E' UGUALE A ZERO, LA SECONDA NON SI AZZERA, MA ANDRA' AUTOMATICAMENTE
'A VALORE 1
CONSTANT NUM_CIFRE=2
DIM CIFRA(NUM_CIFRE) AS WORD
VALORE=71 'IPOTETICO VALORE DI PARTENZA
STR_VALORE=RIGHT("0"&VALORE,2)
CIFRA(1)=LEFT(STR_VALORE,1)
CIFRA(2)=RIGHT(STR_VALORE,1)
DATA 1,&H1A,10,2,&H1B,10 ' NUMERO CIFRE, POSIZIONE CURSORE, VALORE MASSIMO ASSUNTO DALLA CIFRA
READ N_CIFRA, POS,MAX
LCDCLEAR
X=CIFRA(N_CIFRA)
:ATTENDERE
CIFRA(N_CIFRA)=X
IF INPBIT(5)=1 THEN :INCREMENTA
IF INPBIT(3)=1 THEN :AVANZA_CIFRA
:VISUALIZZA
LCDPOS=POS
LCDWRITE=" "
WAITMS 75
LCDPOS=&H11
LCDWRITE="VALORE = "&CIFRA(1)&CIFRA(2)
WAITMS 75
GOTO :ATTENDERE
:INCREMENTA
X++
IF X=MAX THEN :AZZERA_CIFRA
GOTO :VISUALIZZA
:AZZERA_CIFRA
CLR X
IF CIFRA(1)=0 THEN :INCREMENTA' QUESTA RIGA EVITA CHE IL VALORE IMPOSTATO SIA MINORE DI 1
GOTO :VISUALIZZA
:AVANZA_CIFRA
IF N_CIFRA=(NUM_CIFRE) THEN :FINE
READ N_CIFRA, POS,MAX
X=CIFRA(N_CIFRA)
GOTO :VISUALIZZA
:FINE
LCDPOS=&H21
LCDWRITE="VALORE IMPOSTATO"
END
</pre>
Ecologix
Modificato da ecologix1971 - 22/01/2015, 09:19:33
|