为什么这会使我的显示器发疯? (但仅有时)

时间:2019-03-14 11:16:39

标签: c embedded display

enter image description here (链接到显示图像)

enter image description here (链接到显示图像)

似乎这段代码使我的显示器有时(但仅有时)发疯。但是,当我删除 dat=~dat; 时,它似乎可以正常工作。 为什么?

我在这里想要做的就是将ascii字母设为相反:例如:

11001000 为: 00110111

10101111 为: 01010000

之所以这样做,是因为我想在diplay窗口中有一行(活动行),白底黑字,而不是像其他显示窗口那样像opostie。

还有其他方法可以做到吗? (将数字取反)

仅供参考:我正在C. Atmel工作室编程。 atmega 4809,SSD1305z显示屏,SPI模拟接口。

   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,   // &

ETC。等等

这里只有更多原始像素数据。这部分的结尾是这样的:

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 :(得分:0)

事实证明,我需要切换芯片选择(CS),以便时钟不会与时间不同步。 时钟同步随时间漂移。

由于某种原因,由于非反向数据,它的运行速度更快。但是使用正常数据后,它也会在一段时间后发生。

谢谢您的回答。