LCD-Schnittstelle mit msp430

Ich mache einen kontaktlosen Tachometer basierend auf Magneten. Ich verwende den Mikrocontroller msp430g2253 und HD44780 lcd. Ich habe bestimmte Berechnungen zur Berechnung der Drehzahl im Hauptcode durchgeführt und möchte jetzt, dass die Werte auf dem LCD gedruckt werden, aber hier kann ich nicht verstehen, wie das geht.

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

Der Code von lcd, den ich verwendet habe, nimmt nur * char als Eingabe, daher kann ich keine Möglichkeit finden, die Ganzzahl in char umzuwandeln (ich weiß, es klingt lahm, aber ... immer noch ...) und zu drucken es auf lcd.

Der folgende Code ist ein Teil des gesamten LCD-Codes, aber dieser wird zum Drucken auf LCD verwendet.

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

Also, wie soll ich diesen Code ändern, um den ganzzahligen Wert auf LCD zu drucken. Muss ich für diesen Zweck eine Funktion erstellen oder was??

Einige Details: 1.Verwendeter Mikrocontroller: MSP430G2253 2.Software für die Codierung: Code Composer Studio (CCS) 3.LCD: HD44780

Antworten (2)

Ich habe keine Programmiererfahrung für TI uCs. Ich benutze meistens PICs. In den Programmen, in denen ich Zahlen auf dem LCD-Bildschirm ausgeben muss, drucke ich Zeichen für Zeichen auf dem LCD.

Nehmen wir an, ich soll die Zahl 123 ausdrucken.
Zuerst erstelle ich eine Funktion, die die Zahl in einzelne Zahlen aufteilt.
Dann zeige ich jede Nummer auf dem LCD an. Sie können den Code nach Ihren Bedürfnissen verbessern.
Beispiel-

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.
Ich hatte den gleichen Code im Kopf, aber hier muss ich einen unbekannten Wert drucken, der von beliebiger Potenz sein kann, entweder in Zehnern oder Hunderten oder Tausend usw., also löst die Verwendung des obigen Codes dieses Problem nicht, habe ich recht?
Fügen Sie einfach weitere Tausend, Zehntausend, Hunderttausend hinzu.
ok ... ich denke, ich kann es versuchen. Vielen Dank für Ihre Eingaben

Mit etwas Glück hat Ihr Compiler bereits die itoa()or- sprintf()Funktion.

Wenn nicht, müssen Sie es selbst implementieren. Wichtig ist, dass dies von rechts nach links erfolgen muss:

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-- = '\0';  /* 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 */
}

Wenn Sie durch weniger als 1000000 dividieren, können Sie Nachkommastellen ausgeben, indem Sie an der entsprechenden Stelle den Dezimalpunkt einfügen.

Der Compiler hat die Funktion itoa(), aber wenn ich das verwende, gibt es mir eine Art Fehler ... ich werde das überprüfen und mich wieder bei Ihnen melden.