Wątek przeniesiony 2014-12-17 11:38 z przez ŁF. Powód: Wątek dotyczący podstaw

Przekonwerotwanie programu do pętli.

Odpowiedz Nowy wątek
2014-12-16 22:20
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();
    }
 
    }
}
 

Pozostało 580 znaków

2014-12-16 23:26
0

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

Pozostało 580 znaków

2014-12-16 23:32
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;
}
 

edytowany 2x, ostatnio: ujemny, 2014-12-16 23:36

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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