# Modificar librería lcd 16x2 en ccs



## robott2 (Feb 28, 2012)

Hola soy nuevo en este foro y espero que este en la sección correcta, estoy iniciando a programar microcontroladores en "c" y uso ccs con el pic 16f877a con una lcd de 16x2 como en los ejemplos que seguido, mi problema es: 
tengo que desplegar mensajes pero en una lcd de 16x4
y cuando uso la libreria  <lcd.c> que trae ccs que es para una lcd de 16x2  no puedo agregar mas lineas que se visualicen en la lcd y mi simulación encima caracteres, me dicen que tengo que modificar la librería para que  trabaje con la lcd que es de 16x4 la cual ocupare pero no se como, me podrían ayudar y decirme como la modifico o que puedo hacer.
Si se preguntan el porque de usar otra lcd es por que así me lo piden.
Gracias y espero que me puedan ayudar.


----------



## ilcapo (Jul 17, 2012)

tendrias que crear tu propia libreria , tenes el PDF del LCD ? tendrias que ver alli los comandos para inicializar el LCD ,los pines de entrada etc  etc etc 

en mi caso siempre tuve problemas con los LCD por el mismo motivo, falta de librerias, y sobre todo FALTA DE INFORMACION DE LOS DATASHEETS DE LOS LCD, o por lo menos los datasheets que he encontrado como mucho mostraba el nombr de cada pin , es como conocer el nombre de los pines del pic y no saber nada del funcionamiento por dentro!  y por eso siempre uso el LCD de 16x2 

alguien tiene info de distintos LCDs ? ya sean datasheets o bibliotecas para el CCS ? saludos y desde ya muchas gracias !


----------



## match82 (Jul 29, 2012)

Hola amigos del foro, me encuentro con un problema y espero puedan ayudarme, estoy haciendo un proyecto con el pic 18f4550, bueno en realidad estoy comenzando, y dispongo de un lcd con un controlador JHD539M8 (16x4), y no se de donde puedo conseguir la libreria para poder manejaro con el ccs, he visto que en el ccs hay una libreria lcd.c pero he leido que solo sirve para lcd con controladores hd 44780  Hitachi, se puede modiicar este archivo para el lcd que dispongo???

Saludos ...


----------



## D@rkbytes (Jul 29, 2012)

Para el CCS existe la librería lcd420.c, pero es para pantallas 4x20.
Alguna vez buscando librerías para LCD, encontré una que se llama Flex_LCD416.c
Es para pantallas 16x4 y la he probado con éxito también en pantallas 16x2.
Esta librería tiene la ventaja que como su nombre lo dice, es flexible y se puede modificar fácilmente para trabajar con otros puertos del PIC.
Comentado una línea se puede omitir el uso del pin R/W de la pantalla.

Aquí adjunto la librería más una simulación en ISIS de ejemplo.
PD. El ejemplo está basado en un 16F873A.
Para usar otro PIC se tienen lógicamente que modificar algunas cosas.

Suerte.


----------



## rachelies (Ago 28, 2012)

Hola:

Pretendo conectar un lcd de 16x2 a un pic 16f873a por medio de 4 líneas para datos más las necesarias para el enable, r/w....
Siempre lo he hecho utilizando los pines del PortB, pero me gustaría hacerlo con el PORTC para dejar libre el B para otras cosas.

Lo voy a programar en CCS, y mirando el driver "LCD.c" que viene con el software, encuetro esto:


```
// As defined in the following structure the pin connection is as follows:
//     D0  enable
//     D1  rs
//     D2  rw
//     D4  D4
//     D5  D5
//     D6  D6
//     D7  D7
//
//   LCD pins D0-D3 are not used and PIC D3 is not used.

// Un-comment the following define to use port B
// #define use_portb_lcd TRUE


struct lcd_pin_map {                 // This structure is overlayed
           BOOLEAN enable;           // on to an I/O port to gain
           BOOLEAN rs;               // access to the LCD pins.
           BOOLEAN rw;               // The bits are allocated from
           BOOLEAN unused;           // low order up.  ENABLE will
           int     data : 4;         // be pin B0.
        } lcd;


#if defined use_portb_lcd
   //#locate lcd = getenv("sfr:PORTB")    // This puts the entire structure over the port
   #ifdef __pch__
    #locate lcd = 0xf81
   #else
    #locate lcd = 6
   #endif
   #define set_tris_lcd(x) set_tris_b(x)
#else
```

¿Si modifico este driver para direccionarlo al puerto C funcionará? ¿Alguien lo ha probado? Es que no se si siempre se utiliza el Port B por las interrupciones o porqué. 
De momento estoy con el diseño del circuito y no tengo acceso a un lcd para probar, por eso me gustaría saber si alguien lo ha probado.

Un saludo y gracias a todos.


----------



## D@rkbytes (Ago 28, 2012)

rachelies dijo:


> ¿Si modifico este driver para direccionarlo al puerto C funcionará? ¿Alguien lo ha probado?


Saludos rachelies
Para usar la librería LCD.C por el puerto C, lo que yo hago es lo siguiente.
Un poco después del principio del archivo, veras algo como esto.

```
////  To use pin access, the following pins must be defined:               ////
////     LCD_ENABLE_PIN                                                    ////
////     LCD_RS_PIN                                                        ////
////     LCD_RW_PIN                                                        ////
////     LCD_DATA4                                                         ////
////     LCD_DATA5                                                         ////
////     LCD_DATA6                                                         ////
////     LCD_DATA7                                                         ////
////                                                                       ////
////  Example of pin access:                                               ////
     #define LCD_ENABLE_PIN  PIN_c3                                    ////
     #define LCD_RS_PIN      PIN_c1                                    ////
     #define LCD_RW_PIN      PIN_c2                                    ////
     #define LCD_DATA4       PIN_c4                                    ////
     #define LCD_DATA5       PIN_c5                                    ////
     #define LCD_DATA6       PIN_c6                                    ////
     #define LCD_DATA7       PIN_c7                                    ////
////                                                                       ////
///////////////////////////////////////////////////////////////////////////////
```
Estas líneas de la librería vienen comentadas.
Las descomento, y las edito conforme en donde yo quiera los pines de datos y control, como arriba.

Para el código citado anteriormente adjunto un esquema de conexión del LCD al 16F873A

Suerte.


----------



## rachelies (Ago 28, 2012)

Vale, muchas gracias. Lo que no sabia es si lo habia que conectar al puerto B por algo en especial.

Un saludo y gracias


----------



## EL SHABRI (Ago 30, 2012)

Q tal muchachos saludos.......estoy aprendiendo a programar PICs en CCS ya he probado el manejo de un LCD de 16x2, ahora deseo manipular un LCD de 16x4.....alguien me puede ayudar y decirme si la distribucion de pines es la misma que para los 16x2 ya que he buscado el datasheet del LCD que dispongo y no lo he encontrado....es el JHD539M8.......de antemano gracias......


----------



## D@rkbytes (Ago 30, 2012)

rachelies dijo:


> Vale, muchas gracias. Lo que no sabia es si lo habia que conectar al puerto B por algo en especial.
> 
> Un saludo y gracias


De nada. Suerte.


EL SHABRI dijo:


> me puede ayudar y decirme si  la distribucion de pines es la misma que para los 16x2 ya que he buscado  el datasheet del LCD que dispongo y no lo he encontrado....es el  JHD539M8.


Busca JHD539-164 y compáralo con el tuyo.
Posiblemente sean iguales.

Saludos.


----------

