Si aún no eres usuario, puedes crear una cuenta o entrar
Librería LCD con 3 pines para microcontroladores PIC

No todo va ser Arduino en ésta vida y Manuel desde MicroPic.es nos informa de una estupenda librería para manejo de pantallas LCD que utiliza tan sólo 3 pines para su control y un bus de datos de 4 bits. La librería es muy sencilla y fué originalmente diseñada utilizando un microcontrolador PIC 16F84.

Código fuente y enlace a continuación...

Gracias Manuel!





Código fuente de la librería:

// flex_lcd_3_pins.c 

//Modificación de Flex_lcd por Duende_Azul y Akenafab
//Trabaja con 3 pines y 74VHC164
//8-Bit Serial-In, Parallel-Out Shift Register 

//La LCD se usa en modo 4bits
//Revisar diagrama de conexion Adjunto
//Se ha utilizado a una velocidad de @40MHz sin ningun problema 

//No esta habilitada la lectura del LCD
//RW debe ir a gnd 

//Definir pines antes de llamar libreria//
//#define LCD_E     PIN_A0
//#define LCD_CK    PIN_A1   
//#define LCD_DAT   PIN_A2 

//========================================
int RS_bit;
#define lcd_type 2        // 0=5x7, 1=5x10, 2=2 lines
#define lcd_line_two 0x40 // LCD RAM address for the 2nd line 

 
int8 const LCD_INIT_STRING[4] =
{
 0x20 | (lcd_type << 2), // Func set: 4-bit, 2 lines, 5x8 dots
 0xc,                    // Display on
 1,                      // Clear display
 6                       // Increment cursor
 };

 
//-------------------------------------
void lcd_send_nibble(int8 nibble, int rs_bit)
{

int x;
if(RS_bit==1)
   nibble=nibble|0x10;

for(x=0;x<5;x++){
         output_bit(LCD_DAT,shift_right(&nibble,1,0));
         delay_cycles(1);
         output_low(LCD_CK);
         delay_us(1);
         output_high(LCD_CK);}

 output_high(LCD_E);
 delay_us(2);
 output_low(LCD_E);
}

//-----------------------------------
//----------------------------------------
// Send a byte to the LCD.
void lcd_send_byte(int8 address, int8 n)
{
//output_low(LCD_RS);
RS_bit=0;
delay_us(100);

 
if(address)
   //output_high(LCD_RS);
   RS_bit=1;
else
   //output_low(LCD_RS);
   RS_bit=0;

 delay_cycles(1);

 
output_low(LCD_E);

lcd_send_nibble(n >> 4,RS_bit);
lcd_send_nibble(n & 0xf,RS_bit);
}

//----------------------------
void lcd_init(void)
{
int8 i;

//output_low(LCD_RS);
RS_bit=0;

output_low(LCD_E);

delay_ms(20);

for(i=0 ;i < 3; i++)
   {
    lcd_send_nibble(0x03,RS_bit);
    delay_ms(5);
   }

lcd_send_nibble(0x02,RS_bit);

for(i=0; i < sizeof(LCD_INIT_STRING); i++)
   {
    lcd_send_byte(0, LCD_INIT_STRING[i]);

    delay_ms(5);
    
   }

}

//---------------------------- 

void lcd_gotoxy(int8 x, int8 y)
{
int8 address;

if(y != 1)
   address = lcd_line_two;
else
   address=0;

address += x-1;
lcd_send_byte(0, 0x80 | address);
}

//-----------------------------
void lcd_putc(char c)
{
 switch(c)
   {
    case 'f':                //limpia pantalla
      lcd_send_byte(0,1);
      delay_ms(8);
      break;

    case 'n':                //cambio de linea
       lcd_gotoxy(1,2);
       break;

    case 'b':                //retrocede 1 caracter
       lcd_send_byte(0,0x10);
       break;

    default:
       lcd_send_byte(1,c);
       break;
   }
}

//------------------------------ 

void lcd_setcursor_vb(short visible, short blink) { 
  lcd_send_byte(0, 0xC|(visible<<1)|blink); 
}

Código de ejemplo:

#include <16F88.h> 

#FUSES INTRC_IO,NOWDT,PUT,MCLR,NOBROWNOUT,NOLVP,NOPROTECT,NODEBUG,CCPB0,NOFCMEN,NOIESO
#use delay(Internal=8M) 

 
//------------ Pines del LCD ---------------------//
#define LCD_E     PIN_A0
#define LCD_CK    PIN_A1   
#define LCD_DAT   PIN_A2
//--------------------------------------------------// 

#include "flex_lcd_3pins.c"            // Cargamos libreria del lcd 

 
void main(){

 
delay_ms(100);

            output_a(0);
            output_b(0);

            lcd_init();              // inicializamos el LCD
            lcd_setcursor_vb(1,1);  //cursor visible,papadeo 

while(1){

         printf(lcd_putc,"f-LCD 3 pin Mode-n* !.|.|..|.|.! *");
         delay_ms(1000);
         printf(lcd_putc,"f* Duende_Azul  *n *  Akenafab  *");
         delay_ms(1000);
         
         }//end while
            
}//end main

Consigue los microcontroladores PIC que necesitas:

Microcontrolador PIC 16F84A

Enlace: LCD con sólo 3 pines


Comparte esto con tus amigos!

Si te ha gustado, quizás también te interese...
Space Invaders en GLCD con 16F877A
Publicado el 21/11/2011
Librería PID con Arduino
Publicado el 19/04/2011

Comentarios:



Enviar comentario

Debes disponer de una cuenta de usuario para publicar un comentario.

Si aún no dispones de una cuenta, únete a la comunidad de BricoGeek.com y registrate ahora, te llevará tan solo un minuto y es gratis. También puedes identificate si ya dispones de una cuenta de usuario.
rss

Conecta con BricoGeek.com

Canales sociales

Nos gusta mucho estar en contacto con nuestros lectores y saber más acerca de sus proyecto e inventos.


También puedes sugerir una noticia en el blog
Tienda de Electrónica DIY y Arduino

Lo que se cuece...

Comentarios recientes Más comentado Top noticias
Feed de novedades

Tienda BricoGeek.com

Electrónica para tus proyectos!

Estás preparando un proyecto o quieres iniciarte en la electrónica? Encuentra todo lo que necesitas en la tienda.

Visita la tienda BricoGeek!

La familia de BricoGeek.com

Conoce toda la gente que hace que BricoGeek.com sea posible cada día:

Alejandro Mallo
Colaborador
Manuel Jiménez
Colaborador
Pablo Toimil
Colaborador
Puedes hacer click sobre un autor para ver todas sus noticias


Etiquetas más populares:

Descubre todo el contenido de bricogeek.com con las etiquetas más populares:

Páginas amigas:

Aqui tienes una selección de las páginas que más nos gusta visitar


© BricoGeek.com 2005-2012

Demuestra lo que sabes hacer!