введите описание изображения здесь (ссылка на изображение дисплея)
введите описание изображения здесь (ссылка на изображение дисплея)
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
}
Я уже спрашивал об этом раньше.но я думал, что выгляжу "чище" с новым протектором, так как информация отсутствовала в последнем.