interfaz LCD con msp430

1

Estoy haciendo un tacómetro de contacto menos basado en imanes. Estoy usando el microcontrolador msp430g2253 y el HD44780 lcd. He hecho ciertos cálculos para calcular las rpm en el código principal y ahora quiero que los valores se impriman en la pantalla LCD, pero aquí no puedo entender cómo hacerlo.

rpm = cycles*60/1000000; //This is what i want to print on the lcd i.e the value stored 
                           in variable rpm

El código de lcd que he usado solo toma * char como entrada, así que no puedo encontrar una manera de convertir el entero a char (sé que suena cojo pero ... stilll ..... ) e imprimirlo en lcd.

El siguiente código es parte del código completo de lcd, pero se usa para imprimir en lcd.

void lcdprint(char *text)
{
char *c;
c = text;
while((c !=0) && (*c!=0))
{
    SendByte(*c , dat);
    c++;
}
}

Entonces, ¿cómo debo modificar este código para imprimir el valor entero en lcd? ¿Necesito crear una función para este propósito o qué?

Algunos detalles: 1.Microcontrolador utilizado: MSP430G2253 2.Software para codificación: Code composer studio (CCS) 3.LCD: HD44780

    
pregunta Abhishek Tyagi

2 respuestas

2

No tengo experiencia en programación para TI uC. Utilizo principalmente PICs. En los programas en los que necesito mostrar números en la pantalla LCD, imprimo caracteres por caracteres en la pantalla LCD.

Supongamos que necesito imprimir el número 123.
Primero hago una función que divide el número en números individuales.
Luego muestro cada número en la pantalla LCD. Puedes mejorar el código según tus necesidades.
Ejemplo-

unsigned char hundreds=0,tens=0,ones=0; //are public to all functions

void
convert_int_char(int input_integer)
{
ones = input_integer % 10; // will give value of 3
tens = ((input_integer % 100) - ones)/10; // will give value of 2
hundreds = (input_integer - ((tens*10)+ones)) / 100; // will give out value of 1 
}

void
lcd_display_char(unsigned char number)
{
 SendByte(number+48 , dat); // Part of your function, to make things more clear.
}
//+48 stands to make the number ascii number. Please see ASCII table.
    
respondido por el Triak
2

Con suerte, su compilador ya tiene la función itoa() o sprintf() .

Si no, tienes que implementarlo tú mismo. Lo importante es que esto debe hacerse de derecha a izquierda:

const char *number_to_string(unsigned int number)
{
    #define BUFFER_SIZE 12
    static char buffer[BUFFER_SIZE];  /* must be static to be able to return it */
    char *p;

    p = &buffer[BUFFER_SIZE - 1];
    *p-- = '
const char *number_to_string(unsigned int number)
{
    #define BUFFER_SIZE 12
    static char buffer[BUFFER_SIZE];  /* must be static to be able to return it */
    char *p;

    p = &buffer[BUFFER_SIZE - 1];
    *p-- = '%pre%';  /* end of string */
    do {
        unsigned int digit = number % 10;
        *p-- = '0' + digit;
        number = number / 10;
    } while (number > 0);
    return p;  /* first digit might not be at the start of the buffer */
}
'; /* end of string */ do { unsigned int digit = number % 10; *p-- = '0' + digit; number = number / 10; } while (number > 0); return p; /* first digit might not be at the start of the buffer */ }

Si divide por menos de 1000000, puede generar dígitos fraccionarios insertando el punto decimal en el lugar apropiado.

    
respondido por el CL.

Lea otras preguntas en las etiquetas