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
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.
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.
Abhishek Tyagi
Triak
Abhishek Tyagi