SYMBOL SW1 = PORTA.3 ' Switch 1 "arriba"
SYMBOL SW2 = PORTA.4 ' Switch 2 "abajo"
SYMBOL SW3 = PORTB.3 ' Switch 3 "enter"
mlcd VAR BYTE ' menu-lcd, este indica la posicion en el menu
POSI VAR BYTE '
sw1var var byte
sw2var var byte
sw3var var byte
venter var bit
hora var byte
minuto var byte
Define LCD_DREG PORTB
Define LCD_DBIT 4
Define LCD_RSREG PORTB
Define LCD_RSBIT 0
Define LCD_EREG PORTB
Define LCD_EBIT 1
input PORTB.3
INPUT PORTA.3
input PORTA.4
hora = 00
minuto = 00
mainmenu: 'menu de configuracion
mlcd = 1 'variable que indica la posicion
lcdout $fe,1, "CONFIGURACION" 'actual del menu
pause 1000
impmenu:
gosub imprimir 'imprime el menu
menu:
button sw1,1,0,0,sw1var,1,arriba 'mira sw1 boton arriba
button sw2,1,0,0,sw2var,1,abajo 'mira sw2 boton abajo
BUTTON SW3,1,0,0,sw3var,1,enter 'mira sw3 boton enter
goto menu
'******************************************
'* movimiento dentro del menu *
'******************************************
arriba:
mlcd = mlcd + 1 'se pulso sw1, suma 1 a mlcd
if mlcd = 5 then mlcd = 1 'items del menu 1-4, si es 5 vuelve a 1
goto impmenu ' vuelve a imprimir y mirar botones
abajo:
mlcd = mlcd - 1 ' se pulso sw2, resta 1 a mlcd
if mlcd = 0 then mlcd = 4 ' si menu llego a 0, vuelve a 4
goto impmenu
enter: ' se pulso enter en mlcd=1 ( ajuste horas)
ajhora:
mlcd = 11 'mlcd=11 es ajuste de horas
gosub imprimir
ajhora1:
button sw1,1,0,0,sw1var,1,mashora 'mira boton arriba, + horas
button sw2,1,0,0,sw2var,1,menoshora 'mira boton abajo, - horas
BUTTON SW3,1,0,0,sw3var,1,ajmin 'enter pasa a minutos
goto ajhora1
ajmin:
mlcd = 10 'mlcd = 10, configuracion de minuitos
gosub imprimir ' imprime configuracion de minutos
ajmin1:
button sw1,1,0,0,sw1var,1,masmin ' mira boton arriba, + minutos
button sw2,1,0,0,sw2var,1,menosmin ' mira boton abajo, - minutos
BUTTON SW3,1,0,0,sw3var,1,finajhora 'mira boton enter, termina
goto ajmin1
mashora: 'rutina que suma horas
hora = hora + 1
if hora = 24 then hora = 00 'mantiene horas debajo de 24
goto ajhora
menoshora: ' rutina que resta horas
hora = hora - 1
if hora = 255 then hora = 23 'evita que horas baje de 00
goto ajhora
masmin: ' rutina que suma minutos
minuto = minuto + 1
if minuto = 60 then minuto = 00 ' evita que sean 60
goto ajmin
menosmin: ' rutina que resta minutos
minuto = minuto -1
if minuto = 255 then minuto = 59 ' evita que baje de 0
goto ajmin
finajhora: 'confirmacion de ajuste horario
mlcd = 12 'mlcd=12 es la pantalla de confirmacion
gosub imprimir 'muesta en el lcd
confhora: 'espera que pulses una opcion
button sw1,1,0,0,sw1var,1,mainmenu ' sw1 es salir
BUTTON SW3,1,0,0,sw3var,1,guardahora 'sw3 es guardar
goto confhora
guardahora 'aca se guarda la hora
mlcd = 13 ' es a modo ejemplo
gosub imprimir ' ya que no guarda nada
pause 1500 '
goto mainmenu
imprimir:
select case mlcd
CASE 1
POSI = 129 : GOSUB tag : GOSUB MSG1
POSI = 193 : GOSUB MSG2
CASE 2
POSI = 129 : GOSUB tag : GOSUB MSG2
POSI = 193 : GOSUB MSG3
CASE 3
POSI = 129 : GOSUB tag : GOSUB MSG3
POSI = 193 : GOSUB MSG4
CASE 4
POSI = 129 : GOSUB tag : GOSUB MSG4
POSI = 193 : GOSUB MSG5
case 10 ' ajuste minutos
posi = 128 : gosub msg11
POSI = 193 : GOSUB MSG7
case 11 ' ajuste horas
posi = 128 : gosub msg6
POSI = 193 : GOSUB MSG7
case 12 ' confirmacion hora
posi = 129 : gosub msg8
POSI = 193 : GOSUB MSG9
case 13 ' guardando
posi = 129 : gosub msg0
POSI = 129 : GOSUB MSG10
END SELECT
return
'************************************************* *************************************************
' Lista de mensajes
'************************************************* *************************************************
MSG0: LCDOUT $FE,1 :return 'limpialcd
MSG1: LCDOUT $FE,POSI,"OPCION 1 " :RETURN
MSG2: LCDOUT $FE,POSI,"OPCION 2 " :RETURN
MSG3: LCDOUT $FE,POSI,"OPCION 3 " :RETURN
MSG4: LCDOUT $FE,POSI,"OPCION 4 " :RETURN
MSG5: LCDOUT $FE,POSI,"OPCION 5 " :RETURN
MSG6: LCDOUT $FE,POSI,"Ajuste horas" :RETURN
MSG7: LCDOUT $FE,POSI,dec2 hora,":",dec2 minuto," " :RETURN
MSG8: LCDOUT $FE,POSI,"GUARDAR -> OK " :RETURN
MSG9: LCDOUT $FE,POSI,"SALIR -> + " :RETURN
MSG10: LCDOUT $FE,POSI,"GUARDANDO HORA" :return
MSG11: LCDOUT $FE,POSI,"Ajuste MINUTOS" :RETURN
tag: LCDOUT $FE,128,">" :RETURN
End