Autor Tema: Campos editables en un LCD  (Leído 2396 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado jm.garciaf

  • PIC10
  • *
  • Mensajes: 7
Campos editables en un LCD
« en: 22 de Abril de 2015, 17:43:33 »
Buenas tardes foreros!
Soy nuevo en el foro, y principiante en la programación de microcontroladores PIC.
Quería saber si alguna persona podría ayudarme en crear campos editables para mostrar en un LCD.
Lo que yo quiero hacer es mover el cursor de una posición a otra mediante botones (< y > para mover entre campos), y cuando se presione otro boton (ENTER) entra a configurar ese campo.
En el LCD se vería mas o menos así:
1ra Linea: TITULO DE LA PAGINA
2da Linea: CAMPO1:|---           CAMPO2:|---
La idea es que cuando presione ENTER para modificar el campo se muestre una especie de contador que se manejaría con otros botones (+ y - ).
Para aclarar, mi duda radica en como pasar el cursor de un campo a otro sin cambiar la pagina.
Trabajo en lenguaje Ensamblador y el proyecto es con un PIC16F877A.
Cualquier ayuda es mas que bienvenida!
Y desde ya MUCHAS GRACIAS!
José

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Campos editables en un LCD
« Respuesta #1 en: 22 de Abril de 2015, 23:01:01 »
Si es posible hacerlo.

Lo que si deberias. O leer el LCD ( si es que usas el pin de lectura/escritura) o directamente usas 2 registros para mantener el valor de esos 2 campos.
Acerca de modificar esos datos solamente lo podes hacer de 3 formas, cada una mas efectiva pero vas a necesitar saber mas sobre el LCD y como funciona.

- Podes escribir TODA la pantalla del LCD de nuevo
- Podes escribir solo la segunda linea de nuevo ( Con el campo actualizado )
- Podes escribir en los lugares de memoria donde se encuentran los campos esos.

Creo que vos queres implementar el ultimo, por lo cual deberias ver si en tu libreria (si es que no la creaste vos) existe alguna funcion que pueda direccionar los datos a esas posiciones de memoria, en C normalemente lo llaman gotoxy();
En ensamblador vas a tener que mandar un codigo ( que depende de la controladora del LCD ) indicando la direccion para luego poder escribir en ese punto.

Desconectado jm.garciaf

  • PIC10
  • *
  • Mensajes: 7
Re: Campos editables en un LCD
« Respuesta #2 en: 23 de Abril de 2015, 12:57:33 »
Muchas gracias por tu respuesta.!!
La librería la cree yo. Consiste en iniciar el LCD y la rutina para Modo Comando y Modo carácter.
Te paso el código de la pagina a mostrar, como lo tengo ahora.
LCD_PAGE
movlw B'00001100' ;Display ON/Cursor OFF/ Blink Off
call     CONTROL      ;Envia comando al LCD
movlw B'10000000' ;Posicion 1 - Linea 1
call     CONTROL
movlw A'T'
call     DATO
movlw A'I'
call     DATO
movlw A'T'
call     DATO
movlw A'U'
call     DATO
movlw A'L'
call     DATO
movlw A'O'
call     DATO
movlw A' '
call     DATO
movlw A' '
call     DATO
movlw A'S'
call     DATO
movlw A'W'
call     DATO
movlw A':'
call     DATO
movf   SW_DECENA ;Registro que contiene la decena del boton presionado, en ASCII
call     DATO
movf   SW_UNIDAD ; Idem anterior pero contiene la unidad.
call     DATO
movlw B'11000000' ;Posicion 1 - Linea 2
call     CONTROL
movlw A'C'
call     DATO
movlw A'A'
call     DATO
movlw A'M'
call     DATO
movlw A'P'
call     DATO
movlw A'O'
call     DATO
movlw A'1'
call     DATO
movlw A':'
call     DATO
movf   DATO1,W
call     DATO
movf   DATO2,W
call     DATO
movlw A' '
call     DATO
movlw A' '
call     DATO
movlw A' '
call     DATO
movlw A'C'
call     DATO
movlw A'A'
call     DATO
movlw A'M'
call     DATO
movlw A'P'
call     DATO
movlw A'O'
call     DATO
movlw A'2'
call     DATO
movlw A':'
call     DATO
movf   DATO3,W
call     DATO
movf   DATO3,W
call     DATO
movlw B'00001110'   ;Display On/Cursor ON/ Blink OFF
call     CONTROL
movf   POSI_CURSOR,W ; Este registro contiene la posicion de memoria a donde tiene q apuntar el
call     CONTROL           ; Cursor y lo modifico mediante unos botones en otra rutina.
return

Mi problema es que estoy mostrando la pagina de nuevo cada vez que se cambia algún dato, por ejemplo cuando apreto el SW 1 o el SW2 y eso hace q se apague el cursor, se escriba la pagina y se vuelva a prender el cursor, dando la sensación de que el cursor titila.
Y al titilar el cursor, cuando presiono ENTER para editar un campo, a veces funcione y a veces no. Es como que tengo que presionar el botón justo cuando el cursor esta en pantalla.
Yo quería saber si hay alguna manera de dejar fija la pantalla que no contiene ningún dato variable así no la tengo que volver a escribir cada vez que presiono algún botón.
Espero que te sirva la aclaración.
Cualquier ayuda es mas que bienvenida.
Saludos

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Campos editables en un LCD
« Respuesta #3 en: 23 de Abril de 2015, 21:12:53 »
movlw B'11000000' ;Posicion 1 - Linea 2
call     CONTROL


Ese es el comando para modificar la direccion de la DDRAM del LCD

en el HD44780 el comando es:

1aaa aaaa

Donde las a son las direcciones.
La primer linea comienza de 00h a 27h (visible al comienzo sin shif de 0x00 a 0x0F)
La segunda de 40h a 67h (visible al comienzo sin shif de 0x40 a 0x4F)
Entonces para editar solo el primer campo y que lo demas quede sin actualizarse, solo basta con esto:

movlw B'11000111' ;Posicion 7 - Linea 2
call     CONTROL
call     DATO
movf   DATO1,W
call     DATO
movf   DATO2,W
call     DATO


El tema es que veo que estas enviando hasta 19 caracteres en una linea de 16 (Suponiendo que es de 16)
Deberias fijarte el comando en el datasheet de la controladora del LCD
Por la cantidad de datos parece que estas dezplazandolo a los datos a mostrar, por que hay mas de 16 caracteres en esa linea.
« Última modificación: 23 de Abril de 2015, 21:16:37 por KILLERJC »

Desconectado jm.garciaf

  • PIC10
  • *
  • Mensajes: 7
Re: Campos editables en un LCD
« Respuesta #4 en: 27 de Abril de 2015, 16:12:31 »
Hola KILLERJC
Estoy trabajando con un Display de 2 lineas de 20 caracteres.
Me han ayudado mucho, y ya he avanzado bastante con el tema menus.
Sigo con unos problemitas con el cursor (se prende y se apaga), pero creo que el problema viene por un simple acomodo de las subrutinas.

Muchas gracias!

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Campos editables en un LCD
« Respuesta #5 en: 27 de Abril de 2015, 21:54:24 »
Para mi que se prende y apaga por que tu subrutina hace eso.

Tal ves ubicando el comando de Cursor Off en otro lado, por ejemplo cuando salis de la parte del menu donde editas los campos seria lo ideal

Desconectado jm.garciaf

  • PIC10
  • *
  • Mensajes: 7
Re: Campos editables en un LCD
« Respuesta #6 en: 28 de Abril de 2015, 13:04:30 »
Hola KILLERJC

Hoy voy a acomodar todas las rutinas y ver que logro.
Te comento la parte fija de la pantalla (EL TITULO, y los sub títulos de los campos editables), la llamo una sola vez, para que esa parte no se vuelva a escribir.
y solo escribo en los campos.
Creo que lo que tendría que hacer, es prender el cursor (para elegir el campo), y cuando entro a editar, apagarlo y después de la edición volverlo a prender.
Gracias por tu ayuda!


 

anything