Hola a todos, esto es muy importante, me encuentro trabajando con una LCD 20x4. El cual uso como compilador XC8. Baje una libreria muy buena, la cual compartire y realizare una pregunta:
La libreria es la siguiente:
	
	
	
		
Ahora quiero agregar un código que se encargue de adicionar caracteres especiales. Consegui una página muy buena que genera las coordenadas para dibujar estos caracteres.
Aqui la tienen; http://www.quinapalus.com/hd44780udg.html
Esperando su grata y buena respuesta que ayudará aportar una buena lógica al código. Me despido. Gracias ...
				
			La libreria es la siguiente:
		Código:
	
	#ifndef __flex_lcd_H
#define __flex_lcd_H
#define _XTAL_FREQ 40000000
//Configuracion de los Puertos del LCD
#define LCD_RD7     LATDbits.LATD7       // D7
#define TRISRD7     TRISDbits.TRISD7
#define LCD_RD6     LATDbits.LATD6       // D6
#define TRISRD6     TRISDbits.TRISD6
#define LCD_RD5     LATDbits.LATD5       // D5
#define TRISRD5     TRISDbits.TRISD5
#define LCD_RD4     LATDbits.LATD4       // D4
#define TRISRD4     TRISDbits.TRISD4
#define LCD_EN      LATDbits.LATD2       // EN
#define TRISEN      TRISEbits.TRISE2
#define LCD_RS      LATDbits.LATD1       // RS
#define TRISRS      TRISEbits.TRISE1
#define      LCD_FIRST_ROW           128
#define      LCD_SECOND_ROW          192
#define      LCD_THIRD_ROW           148
#define      LCD_FOURTH_ROW          212
#define      LCD_CLEAR               1
#define      LCD_RETURN_HOME         2
#define      LCD_CURSOR_OFF          12
#define      LCD_UNDERLINE_ON        14
#define      LCD_BLINK_CURSOR_ON     15
#define      LCD_MOVE_CURSOR_LEFT    16
#define      LCD_MOVE_CURSOR_RIGHT   20
#define      LCD_TURN_OFF            0
#define      LCD_TURN_ON             8
#define      LCD_SHIFT_LEFT          24
#define      LCD_SHIFT_RIGHT         28
//Declaracion de Prototipos
void Lcd_Init(void);
void Lcd_Out(unsigned char y, unsigned char x, const char *buffer);
void Lcd_Out2(unsigned char y, unsigned char x, char *buffer);
void Lcd_Chr_CP(char data);
void Lcd_Cmd(unsigned char data);
static void _send_nibble(unsigned char data);
static void _send_byte(unsigned char data);
void lcd_add_character(unsigned char addr, unsigned char * pattern);
void lcd_command(unsigned char command);
void lcd_data(unsigned char data);
//Funciones de Retardos
void delay_ms10(int del){
    unsigned int ii;
    for (ii=0;ii<del;ii++){
        __delay_ms(10);
    }
}
void lcd_goto(unsigned char py, unsigned char px){
    //Funcion de Posicionamiento del Cursor en el LCD
}
void lcd_init(){
    unsigned char data;
    TRISRD7 = 0;
    TRISRD6 = 0;
    TRISRD5 = 0;
    TRISRD4 = 0;
    TRISEN = 0;
    TRISRS = 0;
    LCD_RD7 = 0;
    LCD_RD6 = 0;
    LCD_RD5 = 0;
    LCD_RD4 = 0;
    LCD_EN = 0;
    LCD_RS = 0;
    __delay_us(5500);
    __delay_us(5500);
    __delay_us(5500);
    __delay_us(5500);
    __delay_us(5500);
    __delay_us(5500);
    for(data = 1; data < 4; data ++)
    {
        LCD_RD7 = 0;    LCD_RD6 = 0;    LCD_RD5 = 1;    LCD_RD4 = 1;    LCD_EN = 0;
        LCD_RS = 0;    LCD_RD7 = 0;    LCD_RD6 = 0;    LCD_RD5 = 1;    LCD_RD4 = 1;
        LCD_EN = 1;    LCD_RS = 0;
        __delay_us(5);
        LCD_RD7 = 0;    LCD_RD6 = 0;    LCD_RD5 = 1;    LCD_RD4 = 1;    LCD_EN = 0;
        LCD_RS = 0;
        __delay_us(5500);
    }
    LCD_RD7 = 0; LCD_RD6 = 0; LCD_RD5 = 1; LCD_RD4 = 0; LCD_EN = 0; LCD_RS = 0;
    LCD_RD7 = 0; LCD_RD6 = 0; LCD_RD5 = 1; LCD_RD4 = 0; LCD_EN = 1; LCD_RS = 0;
    __delay_us(5);
    LCD_RD7 = 0; LCD_RD6 = 0; LCD_RD5 = 1; LCD_RD4 = 0; LCD_EN = 0; LCD_RS = 0;
    __delay_us(5500);
    data = 40; Lcd_Cmd(data);
    data = 16; Lcd_Cmd(data);
    data = 1;  Lcd_Cmd(data);
    data = 15; Lcd_Cmd(data);
}
void Lcd_Out(unsigned char y, unsigned char x, const char *buffer){
    unsigned char data;
    switch (y){
        case 1: data = 128 + x; break;
        case 2: data = 192 + x; break;
        case 3: data = 148 + x; break;
        case 4: data = 212 + x; break;
        default: break;
    }
    Lcd_Cmd(data);
    while(*buffer){
        Lcd_Chr_CP(*buffer);
        buffer++;               // Increment buffer
    }
    return;
}
//Imprime una series de caracteres
void Lcd_Out2(unsigned char y, unsigned char x, char *buffer){
    unsigned char data;
    switch (y){
        case 1: data = 128 + x; break;
        case 2: data = 192 + x; break;
        case 3: data = 148 + x; break;
        case 4: data = 212 + x; break;
        default: break;
    }
    Lcd_Cmd(data);
    while(*buffer){
        Lcd_Chr_CP(*buffer);
        buffer++;
    }
    return;
}
//Imprime un solo caracter
void Lcd_Chr_CP(char data){
    LCD_EN = 0; LCD_RS = 1;
    LCD_RD7 = (data & 0b10000000)>>7; LCD_RD6 = (data & 0b01000000)>>6;
    LCD_RD5 = (data & 0b00100000)>>5; LCD_RD4 = (data & 0b00010000)>>4;
    _delay(10);
    LCD_EN = 1; __delay_us(5); LCD_EN = 0;
    LCD_RD7 = (data & 0b00001000)>>3; LCD_RD6 = (data & 0b00000100)>>2;
    LCD_RD5 = (data & 0b00000010)>>1; LCD_RD4 = (data & 0b00000001);
    _delay(10);
    LCD_EN = 1; __delay_us(5); LCD_EN = 0;
    __delay_us(5); __delay_us(5500);
}
//Ejecucion de Comandos del LCD
void Lcd_Cmd(unsigned char data){
    LCD_EN = 0;
    LCD_RS = 0;
    LCD_RD7 = (data & 0b10000000)>>7; LCD_RD6 = (data & 0b01000000)>>6;
    LCD_RD5 = (data & 0b00100000)>>5; LCD_RD4 = (data & 0b00010000)>>4;
    _delay(10);
    LCD_EN = 1; __delay_us(5); LCD_EN = 0;
    LCD_RD7 = (data & 0b00001000)>>3; LCD_RD6 = (data & 0b00000100)>>2;
    LCD_RD5 = (data & 0b00000010)>>1; LCD_RD4 = (data & 0b00000001);
    _delay(10);
    LCD_EN = 1; __delay_us(5); LCD_EN = 0;
    __delay_us(5500);//Delay_5us();
}
#endifAhora quiero agregar un código que se encargue de adicionar caracteres especiales. Consegui una página muy buena que genera las coordenadas para dibujar estos caracteres.
Aqui la tienen; http://www.quinapalus.com/hd44780udg.html
Esperando su grata y buena respuesta que ayudará aportar una buena lógica al código. Me despido. Gracias ...
			
				Última edición por un moderador: 
			
		
	
								
								
									
	
								
							
							 
   
				 
						 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		