String zerteilen

Bobbybau91

Neues Mitglied
15. Nov. 2013
31
0
0
33
Ayl, Germany
Sprachen
  1. ANSI C
Hallo zusammen,

ich empfange von LabView einen String (uart_string). Dieser wird auf einem Display dargestellt. Nun möchte ich diesen String gerne in 2 Teile aufteilen, damit ich ihn in zwei Zeilen anzeigen kann (jeweils 16 Stellen).
Könnte mir jemand einen Denkanstoß oder ein Beispiel geben? Bin noch ein ziemlicher Anfänger und habe es mit den Sachen, die ich bei Google gefunden habe, noch nicht hinbekommen.


Hier wird der String empfangen:
Code:
ISR(USART_RXC_vect)						// Interrupt-Sub-Routine USART_RXC_vect
{
	unsigned char nextChar;				// Deklaration 'nextChar'
	nextChar = UDR;						// Daten 'UART I/O Data Register' in 'nextChar'

	if(uart_str_complete == 0) 				// Wenn uart_str_complete=0, dann
	{
		if(nextChar != '#')				// Wenn 'nextChar' nicht '#', dann
		{
			uart_string[uart_str_count] = nextChar;	// Daten 'nextChar' in String ablegen
			uart_str_count++;				// uart_str_count inkrementieren
		}
		else 								// sonst 
		{
			uart_string[uart_str_count] = '\0';	// uart_string[] Ende des Strings '\0' zuweisen
			uart_str_count = 0;			// 0 in uart_str_count Null schreiben
			uart_str_complete = 1;			// 1 in uart_str_complete schreiben
		}
	}
}
Danke im Vorraus
 
Hallo,

das könnte zum Beispiel so aussehen ...

(nicht getestet oder kompiliert)

Code:
// Aufruf:
lcd_displaystring_lines16(uart_string)

// ...

void lcd_displaystring_lines16(char *string)
{
    uint8_t i=0;
    lcd_locate(1,1);            // erste Zeile, erste Spalte

    while (string[i] != 0)
    {

        lcd_displaychar(string[i]);    // einzelnes Zeichen ausgeben, wenn
                        // sowas nicht vorahnden ist, dann in
                        // der Routine schauen, die den String ausgibt
    
        i++;
        if (16 == i) lcd_locate(1, 2);    // zweite Zeile, erste Spalte

    }

}

Wenn eine Locate Funktion nicht vorhanden ist, musst du den Adresszeiger selber setzen. Man könnte noch eine Länge größer 32 (2 Zeilen) abfangen.

Dirk :ciao:
 
Wenn es eine String-Routine gibt, dann auch so:
Code:
void lcd_displaystring_lines16(char *string)
{
    char help = string[16];
    string[16] = '\0';
    lcd_displaystring(string);    // ersten Teilstring ausgeben
    string[16] = help;
    lcd_displaystring(&string[16]);    // zweiten Teilstring ausgeben
}

Natürlich muß man noch sicherstellen, daß 'string' wirklich mehr als 16 Zeichen lang ist.

Gruß Wolfgang
 
Geschafft

Nach einem Abend mit ganz viel Langeweile habe ich es doch selbst hinbekommen ;)

Ich habe es nun so gelöst:
Code:
ISR(USART_RXC_vect)							// Interrupt-Sub-Routine USART_RXC_vect
{
	unsigned char nextChar;					// Deklaration 'nextChar'
	nextChar = UDR;							// Daten 'UART I/O Data Register' in 'nextChar'

	if(uart_str_complete == 0) 				// Wenn uart_str_complete=0, dann
	{
		if(nextChar != '#')					// Wenn 'nextChar' nicht '#', dann
		{
			if (uart_str_count <= 15)
			{
				uart_string1[uart_str_count1] = nextChar;
				uart_str_count1++;
				uart_str_count++;
			}
			if (uart_str_count >= 16);
			{
				uart_string2[uart_str_count2] = nextChar;
				uart_str_count2++;
				uart_str_count++;
			}
		}
		else
		{
			uart_string1[uart_str_count1] = '\0';
			uart_string2[uart_str_count2] = '\0';
			uart_str_count1 = 0;
			uart_str_count2 = 0;
			uart_str_count = 0;
			uart_str_complete = 1;	
		}
	}
}


Danke für die Hilfe
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)