Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Europejski lider sprzedaży techniki i elektroniki.
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[C][Atmega32] Interpretacja argumentów funkcji

kozikowski11 08 Lis 2009 14:53 963 5
  • #1 08 Lis 2009 14:53
    kozikowski11
    Poziom 17  

    Witam, mam maly problem z prawidlowym zapisem argumentu dla tej funkcji:

    Code:

    void LcdStr ( LcdFontSize size, byte *dataPtr )
    {
        while ( *dataPtr )
        {
            LcdChr( size, *dataPtr++ );
        }
    }


    Funkcja LcdChr():
    Code:

    void LcdChr ( LcdFontSize size, byte ch )
    {
        byte i, c;
        byte b1, b2;
        int  tmpIdx;

        if ( LcdCacheIdx < LoWaterMark )
        {
            //  Update low marker.
            LoWaterMark = LcdCacheIdx;
        }

        if ( (ch < 0x20) || (ch > 0x7b) )
        {
            //  Convert to a printable character.
            ch = 92;
        }

        if ( size == FONT_1X )
        {
            for ( i = 0; i < 5; i++ )
            {
                LcdCache[LcdCacheIdx++] = FontLookup[ch - 32][i] << 1;
            }
        }
        else if ( size == FONT_2X )
        {
            tmpIdx = LcdCacheIdx - 84;

            if ( tmpIdx < LoWaterMark )
            {
                LoWaterMark = tmpIdx;
            }

            if ( tmpIdx < 0 ) return;

            for ( i = 0; i < 5; i++ )
            {
                c = FontLookup[ch - 32][i] << 1;
                b1 =  (c & 0x01) * 3;
                b1 |= (c & 0x02) * 6;
                b1 |= (c & 0x04) * 12;
                b1 |= (c & 0x08) * 24;

                c >>= 4;
                b2 =  (c & 0x01) * 3;
                b2 |= (c & 0x02) * 6;
                b2 |= (c & 0x04) * 12;
                b2 |= (c & 0x08) * 24;

                LcdCache[tmpIdx++] = b1;
                LcdCache[tmpIdx++] = b1;
                LcdCache[tmpIdx + 82] = b2;
                LcdCache[tmpIdx + 83] = b2;
            }

            //  Update x cursor position.
            LcdCacheIdx += 11;
        }

        if ( LcdCacheIdx > HiWaterMark )
        {
            //  Update high marker.
            HiWaterMark = LcdCacheIdx;
        }

        //  Horizontal gap between characters.
        LcdCache[LcdCacheIdx++] = 0x00;
    }


    Na czym polega problem?
    Moge wywolac funkcje: LcdStr(1, "Testowy Tekst"); i wyswietli mi to na wyswietlaczu. Natomiast jak zrobic zeby mi wyswietlilo ZMIENNA? Bo LcdStr(1, i); nie odpali tak, wyswietla jakies glupoty.

    Jak to zrobic? Z gory dzieki

  • Pomocny post
    #2 08 Lis 2009 15:04
    528649
    Usunięty  
  • #3 08 Lis 2009 16:07
    kozikowski11
    Poziom 17  

    Dzieki wilkie, dziala wszystko jak trzeba :) A wiecie moze o jakims "skrypcie" dla zegara? Albo jak sie do tego zabrac? Chcialbym wyswietlic godzine np.

    wiem, ze normlanie to godzine program by pobral z systemu, ale przeciez Atmega nie "wie" ktora godzina :D dlatego zastanawiam sie, jak do tego mialbym sie zabrac :)

    Dzieki wielkie :)

  • #4 08 Lis 2009 17:02
    528649
    Usunięty  
  • #5 08 Lis 2009 17:27
    kozikowski11
    Poziom 17  

    hah, myslisz, ze dalczego uzylem "skrypt" w cudzyslowiu? Zdaje sobie z tego sprawe, uwierz ;p Wlasnie napisalem taki, ktory uzywa: _delay_ms(1000) //sekunda. Ale jest dosc mocno nie dokladny :d

  • #6 08 Lis 2009 17:32
    Mat_91
    Poziom 25  

    google + pojęcie "RTC" lub jak wolisz szukajka elektrody i PCF8583 (no tu google też może być :] ) :)

TME logo Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME
TME Logo