почему это заставляет мой дисплей сходить с ума?(но только иногда) - PullRequest
0 голосов
/ 14 марта 2019

введите описание изображения здесь (ссылка на изображение дисплея)

введите описание изображения здесь (ссылка на изображение дисплея)

itкажется, этот код заставляет мой дисплей иногда сходить с ума (но только иногда).Но когда я удаляю dat=~dat;, это, кажется, работает нормально.почему?

что я пытаюсь сделать, это просто сделать буквы ascii противоположными: так, например:

11001000 будет: 00110111 или

10101111 будет: 01010000

причина этого заключается в том, что я хочу иметь одну строку (активную строку)в окне diplay с черными на белых пикселях вместо opostie, как остальная часть окна дисплея.

Есть ли другой способ, которым я мог бы сделать это?(инвертируйте числа)

К вашему сведению: я программирую в студии C. Atmel.Atmega 4809, дисплей SSD1305z, интерфейс SPI-simular.

   void displayinvertedString(char str[], uint8_t ypos,uint8_t xpos)
   {
       Set_Page_Address(ypos);
       Set_Column_Address(xpos);

       int len = strlen(str);
       uint8_t dat;
       int temp;    

       for (int e=0; e<len; e++)
       {
           dat = 0xff;
           Write_Data(dat);  //to get an extra space between the
                             // numbers/letters for 
                             //making it easier to read the text on the display

           temp = str[e];
           temp=temp-0x20; // As the lookup table starts from Space(0x20)
            for (int w=0; w<5; w++)
            {
                dat= OledFontTable[temp][w]; // Get the data to be displayed for LookUptable

                dat =~ dat;
                Write_Data(dat);
            }
        }
    }


----------


static uint8_t OledFontTable[][FONT_SIZE]={   

    //static uint8_t OledFontTable[] = {
    0x00, 0x00, 0x00, 0x00, 0x00,   // space
    0x00, 0x00, 0x2f, 0x00, 0x00,   // !
    0x00, 0x07, 0x00, 0x07, 0x00,   // "
    0x14, 0x7f, 0x14, 0x7f, 0x14,   // #
    0x24, 0x2a, 0x7f, 0x2a, 0x12,   // $

    0x23, 0x13, 0x08, 0x64, 0x62,   // %
    0x36, 0x49, 0x55, 0x22, 0x50,   // &

и т. Д.И т.д.

просто больше необработанных данных о пикселях здесь.эта часть заканчивается так:

0x00, 0x00, 0xFF, 0x00, 0x00,   // |
0x00, 0x82, 0x7C, 0x10, 0x00,   // }
0x00, 0x06, 0x09, 0x09, 0x06    // ~ (Degrees)

};

void Write_Data(unsigned char Data)
{
PORTA.OUTCLR    = PIN7_bm; //cs
PORTB.OUTSET    = PIN2_bm; //dc
Write_Command(Data); //
}

void Write_Command(unsigned char data)
{
    SPI0.DATA = data;       // copy data to DATA register
    while ((SPI0.INTFLAGS & SPI_RXCIF_bm) == 0) ; //wait
}

Я уже спрашивал об этом раньше.но я думал, что выгляжу "чище" с новым протектором, так как информация отсутствовала в последнем.

1 Ответ

0 голосов
/ 30 марта 2019

Оказалось, мне нужно было переключить выбор микросхемы (CS), чтобы часы не синхронизировались со временем.Синхронизация часов дрейфовала во времени.

По неинвертированным данным почему-то все шло быстрее.Но с обычными данными это произошло и через некоторое время.

Спасибо за ответы.

...