lunes, 3 de enero de 2011

Libreria CCS para manejo de LCDs alfanumericos

Pues aqui dejo una libreria que me hice para manejar LCDs alfanumericos con 6 pines de un microcontrolador y su correspondiente explicación de funcionamiento.
En el video adjunto se puede ver un proyecto haciendo uso de la misma.

alphaLCDLowPin rev.3 (01-ENE-2011)
Funcionamiento:
// Libreria CCS para el manejo basico de LCDs alfanumericos basados en el chip
//    HD44789. Es valida para LCDs de 1 a 4 lineas (cualquier numero de
//    caracteres por linea), con caracteres de 5x8 puntos.
// Esta libreria implementa la escritura en el lcd (no permite la lectura)
//    en modo 4 bits. de manera que utiliza solo 6 pines (2 de control y 4
//    de datos).
//    Incorpora una pantalla de test (mostrada al inicializar el LCD,
//    se pueden comentar/descomentar las lineas correspondientes para
//    desactivarla/activarla.
//    Mantiene el control de la posicion del cursor en todo momento,
//    por lo que si al LCD se le envia una cadena mayor del numero de caracteres
//    por linea que tiene, la cadena continua escribiendose en la linea
//    siguiente (en la anterior debido a la organizacion de la memoria del LCD
//    se saltaba una linea).
// Definicion de pines utilizados del LCD:
//    Conecta el pin RW a masa (unicamente se realizan escrituras).
//    El pin VEE (o V0 en algunos casos) se le da tension mediante el cursor de
//    un potenciometro conectado entre +5v y 0v para el ajuste de contraste.
//    Los pines DB0,DB1,DB2 y DB3 no se utilizan (se pueden dejar al aire).
// Metodos implementados:
// lcd_init (): debe ser llamada antes de utilizar el LCD para inicializarlo.
//    por defecto se inicia con lcd on, cursor off, y blink off (modo 1,0,0).
// lcd_gotoxy(x, y): mueve el cursor a la columna(x)/linea(y) deseada,
//    (el primer caracter de la primera linea es 1,1).
// lcd_putc(c): Escribe la cadena c en el lcd (al llegar al final de una linea
//    continua en la siguiente, si es la ultima recomienza por la primera).
// lcd_clear(): Borra la pantalla del lcd y mueve al cursor a la posicion 1,1
// lcd_clearFrom(int8 x, int8 y, int8 charsToClear): borra desde x e y indicados
//    el numero de caracteres indicado en charsToClear.
// lcd_mode(int1 lcdOn,cursorOn,blinkOn): Cambia el modo del lcd entre
//    pantalla encendida1 o apagada0 (util para hacer parpadear el lcd),
//    cursor0 (linea debajo del caracter) o cursor1, parpadeo1 (cuadro intermitente
//    que ocupa todo el caracter) parpadeo0.
// lcd_send_byte(BOOLEAN esComando, int8 n): Manejo avanzado para el envio de
//    comandos manuales (normalmente no se usara) esComando=true es enviar
//    comando avanzado (ver datasheet) y esComando=false es enviar dato.
// void lcd_DefineChar(int8 charIndex,int8 byte7,int8 byte6,int8 byte5,int8
//    byte4,int8 byte3,int8 byte2,int8 byte1,int8 byte0): Crear caracter personal.
//    Se pueden definir hasta 8 caracteres personalizados (charIndex[0]..charIndex[7].



Descarga del archivo

6 comentarios:

sertecelectronica dijo...

hola exelente trabajo me evito tener que diseñar una placa nueva para un proyecto pero no puedo hacer funcionar los caracteres especiales. Pordias poner un Ej...

villamany dijo...

Los caracteres los creas tu (hasta 8) 0=pixel apagado, 1=pixel encendido

Creo recordar que era asi:

//crear caracteres personalizados cgram en LCD
//creamos un caracter "flecha bajar" como caracter especial 0
lcd_DefineChar(0, 0b10001,
0b11011,
0b01110,
0b10101,
0b11011,
0b01110,
0b00100,
0b00000);
//ahora uno flecha subir como caracter especial 1
lcd_DefineChar(1, 0b00100,
0b01110,
0b11011,
0b10101,
0b01110,
0b11011,
0b10001,
0b00000);

//para imprimir la flecha bajar
lcd_putc(0x00);

//para imprimir la flecha subir
lcd_putc(0x01);


Lo digo de memoria, tendria que comprobar si era asi. Un saludo...

PedroG. dijo...

Hola he probado la libreria y funciona muy bien pero como le mando
una variable numerica.
Saludos

villamany dijo...

int variable=123;
lcd_clear();
printf(lcd_putc,"valor:%u",variable);

Un saludo...

Anónimo dijo...

Gracias villamany, probado y funcionando.
Saludos..

Anónimo dijo...

Puedes volver a subir el archivo?

Gracias!