Autor Tema: XC8 y LCD, cadenas de caracteres especiales  (Leído 3153 veces)

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

Desconectado Loudness

  • PIC16
  • ***
  • Mensajes: 147
XC8 y LCD, cadenas de caracteres especiales
« en: 04 de Septiembre de 2018, 10:47:51 »
Hola de nuevo.

Vamos a ver como puedo explicarme sin liarme demasiado a escribir (imposible, seguro que voy a escribir bastante :D)

En los ratos libres sigo estudiando xc8 y, para tal menester me he comprado este libro:

https://www.apress.com/la/book/9781484232729

Aunque esta en ingles pero es bastante facil de leer.
De este libro precisamente he cogido unas librerias para lcd (se las incluyo) que parece funcionan y para escribir frases (p.e "Hola mundo") en pantalla he descubierto (yo no lo he descubierto realmente :lol:) dos metodos distintos:

Primer Metodo: metiendo caracter a caracter por su codigo ascii:

Código: [Seleccionar]
        Lcd_Set_Cursor(1,1);    // linea 1 posicion 1
    Lcd_Write_Char(0x48);  // Codigo Ascii letra "H" (01001000)
    Lcd_Write_Char(0x4F); // Codigo Ascii letra "O" (01001111)
    Lcd_Write_Char(0x4C); // Codigo Ascii letra "L" (01001100)
Lcd_Write_Char(0x41); // Codigo Ascii letra "A" (01000001)
....                 // etc etc

Lo malo es que con mensajes largos esto se convierte en algo bastante tedioso. Para eso esta el segundo metodo

Segundo metodo: utilizar char para hacer una cadena de caracteres y llamarla con una instruccion para leer cadenas:

Código: [Seleccionar]
        char MENSAJE[11] = "HOLA MUNDO";
....
Lcd_Write_String (MENSAJE);

Lo mires por donde lo mires el segundo metodo es mucho mas comodo.

Cual es mi problema estonces?.
Mi problema es cuando quiero escribir una frase no con alfabeto romano, sino utilizando caracteres especiales (letras griegas, katakana, simbolos) que no se pueden meter directamente en la instruccion char, aqui solo me queda el primer metodo:

Código: [Seleccionar]
Lcd_Set_Cursor(1,1);    // linea 1 posicion 1
    Lcd_Write_Char(0xE0);  // Codigo Ascii letra griega "alfa"     (11100000)
    Lcd_Write_Char(0xD2); // Codigo Ascii letra katakana "me" (11010010)
    Lcd_Write_Char(0xF2); // Codigo Ascii simbolo "yen"          (11111100)
        ......

Y esa es la duda que quiero consultarles: Hay alguna manera de crear "cadenas de caracteres especiales" para sacar en el LCD de una manera similar al alfabeto romano? 

Tambien he estado estudiando y probando con sprintf pero no logro que funcione....

Agradecere cualquier ayuda o consejo que puedan darme.

* lcd_0613.c
(1.58 kB - descargado 205 veces)

* lcd_0613.h
(0.86 kB - descargado 189 veces)

* LCD caracteres 180904.pdf
(23.81 kB - descargado 231 veces)

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:XC8 y LCD, cadenas de caracteres especiales
« Respuesta #1 en: 04 de Septiembre de 2018, 22:06:02 »
Citar
Y esa es la duda que quiero consultarles: Hay alguna manera de crear "cadenas de caracteres especiales" para sacar en el LCD de una manera similar al alfabeto romano? 

Como los caracteres que vos queres son especiales del LCD, es decir no corresponden con el ASCII, no vas a poder escribir una letra griega y que eso se convierta como las letras comunes. Por eso vas a tener que especificar letra por letra. Si es mas incomodo, pero podes usar el LCD_Write_String() , observa que el ultimo caracter debe ser 0x00 o '\0' que es lo mismo.

Código: C
  1. char MENSAJE[] = {'H','O','L','A',' ',0xE0,'\0',};
  2. ....
  3. Lcd_Write_String (MENSAJE);

Otra forma no se me ocurre para nada... Lo que podes hacer es darle un nombre si queres que sea mas simple de ver, pero nada mas

Código: C
  1. #define ALPHA 0xE0
  2.  
  3. char MENSAJE[] = {'H','O','L','A',' ',ALPHA,'\0',};
  4. ....
  5. Lcd_Write_String (MENSAJE);

Y los ejemplos que te doy claramente son para cuando tenes algun caracter en especial.  Sino lo haces como vos tenes. con sprintf podrias hacer asi:

Código: C
  1. sprintf(MENSAJE,"HOLA %c",ALPHA);
  2. Lcd_Write_String (MENSAJE);
« Última modificación: 04 de Septiembre de 2018, 22:08:05 por KILLERJC »

Desconectado Loudness

  • PIC16
  • ***
  • Mensajes: 147
Re:XC8 y LCD, cadenas de caracteres especiales
« Respuesta #2 en: 05 de Septiembre de 2018, 00:44:56 »
Gracias KILLERJC por tu mensaje.

Sea como sea me espera una ardua tarea verdad :lol:?


Otra forma no se me ocurre para nada... Lo que podes hacer es darle un nombre si queres que sea mas simple de ver, pero nada mas

Código: C
  1. #define ALPHA 0xE0
  2.  
  3. char MENSAJE[] = {'H','O','L','A',' ',ALPHA,'\0',};
  4. ....
  5. Lcd_Write_String (MENSAJE);


Creo que esto va a ser lo mejor, de lo contrario me voy a equivocar si o si con tanto hexadecimal...

Saludos


 

anything