Wątek przeniesiony 2014-12-17 11:38 z C/C++ przez ŁF.

Przekonwerotwanie programu do pętli.

0

Witam,
mam problem, mam program który działa, ale jest on przystosowany tylko do sółw które maja 5 znaków. Chciałbym go zrobić w pętle aby można było programu używać do różnych słów. Program jest napisany na uC ale w języku C więc na pewno będzie wiadomo o co chodzi. Na wyświetlaczu ma się przesuwać tekst, z tym że na poczatku musi się on wysunąć z boku w taki sposób:

|o
|lo
|llo
|ello
|Hello

LCD_GoTo(X,Y) - ustawia w którym miejscu ma się pojawiać dany znak, Y jest zawsze 0 bo korzystam z zerowej linijki wyświetlacza.
LCD_WriteData (Text[a]) - wysyła w wskazane miejsce znak.

Prosiłbym o jakąś podpowiedź jak się za to zabrać. Wszystko co dało rade to zamieniłem na funkcje a nie wpisywane cyfry.

/*
 * main.c
 *
 *  Created on: 15 gru 2014
 *      Author: User
 */

#include "HD44780.h"
#include <string.h>
#include <util/delay.h>

int main(){
	LCD_Initalize();
	LCD_Clear();
	char Text[]="Hello";
	uint8_t a,b,c;
	a=strlen(Text)-1;

	while(1){

	LCD_GoTo(b,0);
	LCD_WriteData(Text[a]);
	_delay_ms(300);
	a=strlen(Text)-1;
	b=1;

	LCD_GoTo(b,0);
	LCD_WriteData(Text[a]);
	a--;
	b--;
	LCD_GoTo(0,0);
	LCD_WriteData(Text[a]);
	_delay_ms(300);
	a=strlen(Text)-1;
	b=2;

	LCD_GoTo(b,0);
	LCD_WriteData(Text[a]);
	a--;
	b--;
	LCD_GoTo(b,0);
	LCD_WriteData(Text[a]);
	a--;
	b--;
	LCD_GoTo(b,0);
	LCD_WriteData(Text[a]);
	_delay_ms(300);
	a=strlen(Text)-1;
	b=3;

	LCD_GoTo(b,0);
	LCD_WriteData(Text[a]);
	a--;
	b--;
	LCD_GoTo(b,0);
	LCD_WriteData(Text[a]);
	a--;
	b--;
	LCD_GoTo(b,0);
	LCD_WriteData(Text[a]);
	a--;
	b--;
	LCD_GoTo(b,0);
	LCD_WriteData(Text[a]);
	_delay_ms(300);
	a=strlen(Text)-1;

	for(c=0;c<=16;c++){
		LCD_GoTo(c,0);
		LCD_WriteText(Text);
		_delay_ms(300);
		LCD_Clear();
	}

	}
}
 
0

Mózg przegrzany problem rozwiązany : ) Do zamknięcia.

1
for(i = 0; i < strlen(Text); ++i){
		LCD_GoTo(0, 0);
		LCD_WriteData(substring(Text, strlen(Text) - i - 1, strlen(Text));
		_delay_ms(100);
}
char *substring(const char *str, uint8_t start, uint8_t end){	
	uint8_t l = end - start;
        char *substr = (char*)malloc(sizeof(char)*l + 1);
        memset (substr, '\0', l + 1);
        strncpy (substr, str + start, l);
        
        return substr;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1