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
}
我之前已经问过一点。但我想我会以新的面貌看起来“更清洁”,因为上一个信息丢失了。
答案 0 :(得分:0)
事实证明,我需要切换芯片选择(CS),以便时钟不会与时间不同步。 时钟同步随时间漂移。
由于某种原因,由于非反向数据,它的运行速度更快。但是使用正常数据后,它也会在一段时间后发生。
谢谢您的回答。