Autor Tema: Libreria LCD para c18 Facilisima de usar  (Leído 5598 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado mariano_pic

  • PIC18
  • ****
  • Mensajes: 498
    • Software Electronica Microncontroladores
Libreria LCD para c18 Facilisima de usar
« en: 11 de Febrero de 2010, 15:53:28 »

  Hola a todos, luego de ver los inconvenientes que yo mismo tuve al igual que otros amigos que les gustaría entender la programación de microcontroladores PIC18 con el compilador C18 dado que sus librería son completamente diferentes a los otros compiladores mas famosos como el que algunas veces yo mismo uso el CCS y MIKROC for PICmicro, decidí crear esta librería que trabaja muy parecido a las de estos compiladores con el fin de ayudar a dar ese paso que algunos no quieren dar al C18, no por que sea mejor ni mas fácil de usar si no por que es la base para aprender C30 y si dios nos da fuerzas C32, compiladores muy útiles para programar DSPics, PIC24, PIC32 y bueno también acostumbrarnos mejor dicho vamos al grano.

Esquema del montaje en proteus:


Primera vercion del codigo:
Código: [Seleccionar]
#ifndef __LCD_H
#define __LCD_H
// libreria para el manejo de lcd desarrollado por mariano rocha para c18
// Inicio de creacion 14 enero 2010
#define LcdPort        PORTB
#define Lcd_e          PORTBbits.RB3
#define Lcd_rs         PORTBbits.RB2
#define Busy_Delay     1
#define Lcd_Delay      3

// definicion de comandos para el display

#define Lcd_Clr        0b00000001
#define On_Cur         0b00001110
#define Off_Cur        0b00001100
#define Shif_Cur_Righ  0b00010100
#define Shif_Cur_Left  0b00010000
#define Shif_Viz_Righ  0b00011100
#define Shif_Viz_Left  0b00011000
#define Lcd_Normal     0b00000110


/////////////////////////////////////////////////////
/////////////////////////////////////////////////////
// Funciones
// retardos no precisos de 1mSg
void delay_ms(unsigned short t){
unsigned short x;
unsigned char  j;
for(x=0;x>t;x++){for(j=0;j<80;j++);}
}

/////////////////////////////////////////////////////
/////////////////////////////////////////////////////
void Lcd_Cmd(unsigned char cmd){
Lcd_rs=1;  //modo comando
LcdPort=cmd;
delay_ms(Busy_Delay); // busy delay
Lcd_e=0;   // habilita lcd
delay_ms(Busy_Delay);
Lcd_e=0;   // deshabilita el lcd
Lcd_rs=0;  //modo comando
LcdPort=cmd<<4;
delay_ms(Busy_Delay); // busy delay
Lcd_e=1;   // habilita lcd
delay_ms(Busy_Delay);
Lcd_e=0;   // deshabilita el lcd
delay_ms(Lcd_Delay); // lcd delay
}

/////////////////////////////////////////////////////
/////////////////////////////////////////////////////
void Lcd_gotoxy(unsigned char y,unsigned char x){
  unsigned char fll,fy;
  fy=y-1;
  switch(fy){
  case 0: fll=0b10000000; break;
  case 1: fll=0b11000000; break;
  case 2: fll=0b10100000; break;
  case 3: fll=0b11100000; break;
  case 4: fll=0b10010000; break;
  case 5: fll=0b11010000; break;
  case 6: fll=0b10110000; break;
  case 7: fll=0b11110000; break;
  }
  Lcd_Cmd(fll | x-1);
}
/////////////////////////////////////////////////////
/////////////////////////////////////////////////////
void Lcd_Chr_cp(unsigned char dat){
Lcd_rs=0;  //modo comando
LcdPort=dat;
delay_ms(Busy_Delay); // busy delay
Lcd_rs=1;  //modo dato
Lcd_e=1;   // habilita lcd
delay_ms(Busy_Delay);
Lcd_e=0;   // deshabilita el lcd
Lcd_rs=0;  //modo comando
LcdPort=dat<<4;
Lcd_rs=1;  //modo dato
Lcd_e=1;   // habilita lcd
delay_ms(Busy_Delay);
Lcd_e=0;   // deshabilita el lcd
}
/////////////////////////////////////////////////////
/////////////////////////////////////////////////////
void Lcd_Chr(unsigned char y, unsigned char x, unsigned char dat){
     Lcd_gotoxy(y,x);
     Lcd_Chr_cp(dat);
}
/////////////////////////////////////////////////////
/////////////////////////////////////////////////////
void Lcd_Out_cp(char *text)
{

        while(text)                 
        {
                Lcd_Chr_cp(*text);
                text++;               
        }
        return;
}
/////////////////////////////////////////////////////
/////////////////////////////////////////////////////
void Lcd_Out(unsigned char y, unsigned char x, char *text)
{
        Lcd_gotoxy(y,x);
        while(text)                 
        {
                Lcd_Chr_cp(*text);
                text++;               
        }
        return;
}
/////////////////////////////////////////////////////
/////////////////////////////////////////////////////
void Lcd_OutR(unsigned char y, unsigned char x, unsigned rom char *text)
{
        Lcd_gotoxy(y,x);
        while(text)                 
        {
                Lcd_Chr_cp(*text);
                text++;               
        }
        return;
}
/////////////////////////////////////////////////////
/////////////////////////////////////////////////////
void Lcd_Init(){
Lcd_rs=0;  //modo comando
LcdPort=0b00100000;   // comando funcion set para que el lcd entienda que son 4 lineas
delay_ms(Busy_Delay); // busy delay
Lcd_e=1;   // habilita lcd
delay_ms(Busy_Delay); // busy delay
Lcd_e=0;   // deshabilita el lcd
delay_ms(Busy_Delay); // lcd delay
Lcd_Cmd(0b00101000); // envia el comando completo de configuracion
}
/////////////////////////////////////////////////////
/////////////////////////////////////////////////////

Ejemplo de uso:
Código: [Seleccionar]
   #include <lcd.h>

void main(void){
char text [10]="Mikrosurfer";
TRISB=0;
PORTB=0;
Lcd_Init();
Lcd_Cmd(Lcd_Clr);
Lcd_Cmd(Off_Cur);
Lcd_OutR(1,1,"Ucontrol");
Lcd_Out(2,1,text);
while(1);
}

Además tuve que crear una librería mas completa para ayudar a un amigo en UControl que me lo pidió.

Acá esta la librería con código de ejemplo y simulación


Descargar de http://www.mikropics.webcindario.com/

  Espero que mi pequeño aporte sea de gran ayuda a todos.  ;-)

Necesitas ayuda para tu proyecto electronico?
buscame, tal ves pueda colaborarte.
Blog: http://electronicosembebidos.blogspot.com.co/
mail: electronicosembebidos@gmail.com
Mi grupo de facebook: https://www.facebook.com/groups/ProgramandoPics/

Desconectado jukinch

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 608
Re: Libreria LCD para c18 Facilisima de usar
« Respuesta #1 en: 12 de Agosto de 2010, 01:13:32 »
Mariano_pic:
                   podrías subir la librería más completa que citas más abajo nuevamente. ?
                   el link  está roto.
                    Saludos.
                           Jukinch
« Última modificación: 12 de Agosto de 2010, 01:19:21 por jukinch »
"Divide las dificultades que examinas en tantas partes como sea posible para su mejor solución." -René Descartes


 

anything