Update lcd.c
Dieser Commit ist enthalten in:
Ursprung
dc337751ab
Commit
981140645e
83
lcd.c
83
lcd.c
@ -217,12 +217,88 @@ void lcd_putc(char c){
|
||||
}
|
||||
// print char at display
|
||||
#ifdef GRAPHICMODE
|
||||
#ifdef BIGCHAR
|
||||
uint16_t doubleChar[sizeof(FONT[0])];
|
||||
uint8_t dChar;
|
||||
|
||||
for (uint8_t i=0; i < sizeof(FONT[0]); i++) {
|
||||
doubleChar[i] = 0;
|
||||
dChar = pgm_read_byte(&(FONT[(uint8_t)c][i]));
|
||||
for (uint8_t j=0; j<8; j++) {
|
||||
if ((dChar & (1 << j))) {
|
||||
doubleChar[i] |= (1 << (j*2));
|
||||
doubleChar[i] |= (1 << ((j*2)+1));
|
||||
}
|
||||
}
|
||||
}
|
||||
for (uint8_t i = 0; i < sizeof(FONT[0]); i++)
|
||||
{
|
||||
// load bit-pattern from flash
|
||||
displayBuffer[cursorPosition.y+1][cursorPosition.x+(2*i)] = doubleChar[i] >> 8;
|
||||
displayBuffer[cursorPosition.y+1][cursorPosition.x+(2*i)+1] = doubleChar[i] >> 8;
|
||||
displayBuffer[cursorPosition.y][cursorPosition.x+(2*i)] = doubleChar[i] & 0xff;
|
||||
displayBuffer[cursorPosition.y][cursorPosition.x+(2*i)+1] = doubleChar[i] & 0xff;
|
||||
}
|
||||
#else
|
||||
for (uint8_t i = 0; i < sizeof(FONT[0]); i++)
|
||||
{
|
||||
// load bit-pattern from flash
|
||||
displayBuffer[cursorPosition.y][cursorPosition.x+i] =pgm_read_byte(&(FONT[(uint8_t)c][i]));
|
||||
}
|
||||
#endif
|
||||
#elif defined TEXTMODE
|
||||
#ifdef BIGCHAR
|
||||
uint16_t doubleChar[sizeof(FONT[0])];
|
||||
uint8_t dChar;
|
||||
|
||||
for (uint8_t i=0; i < sizeof(FONT[0]); i++) {
|
||||
doubleChar[i] = 0;
|
||||
dChar = pgm_read_byte(&(FONT[(uint8_t)c][i]));
|
||||
for (uint8_t j=0; j<8; j++) {
|
||||
if ((dChar & (1 << j))) {
|
||||
doubleChar[i] |= (1 << (j*2));
|
||||
doubleChar[i] |= (1 << ((j*2)+1));
|
||||
}
|
||||
}
|
||||
}
|
||||
i2c_start(LCD_I2C_ADR << 1);
|
||||
i2c_byte(0x40);
|
||||
for (uint8_t i = 0; i < sizeof(FONT[0]); i++)
|
||||
{
|
||||
// print font to ram, print 6 columns
|
||||
i2c_byte(doubleChar[i] & 0xff);
|
||||
i2c_byte(doubleChar[i] & 0xff);
|
||||
}
|
||||
i2c_stop();
|
||||
|
||||
#if defined SSD1306
|
||||
uint8_t commandSequence[] = {0xb0+y, 0x21, x, 0x7f};
|
||||
#elif defined SH1106
|
||||
uint8_t commandSequence[] = {0xb0+cursorPosition.y+1, 0x21, 0x00+((2+cursorPosition.x) & (0x0f)), 0x10+( ((2+cursorPosition.x) & (0xf0)) >> 4 ), 0x7f};
|
||||
#endif
|
||||
lcd_command(commandSequence, sizeof(commandSequence));
|
||||
|
||||
i2c_start(LCD_I2C_ADR << 1);
|
||||
i2c_byte(0x40);
|
||||
for (uint8_t j = 0; j < sizeof(FONT[0]); j++)
|
||||
{
|
||||
// print font to ram, print 6 columns
|
||||
i2c_byte(doubleChar[j] >> 8);
|
||||
i2c_byte(doubleChar[j] >> 8);
|
||||
}
|
||||
i2c_stop();
|
||||
|
||||
commandSequence[0] = 0xb0+cursorPosition.y;
|
||||
#if defined SSD1306
|
||||
commandSequence[2] = cursorPosition.x+(2*sizeof(FONT[0]));
|
||||
#elif defined SH1106
|
||||
commandSequence[2] = 0x00+((2+cursorPosition.x+(2*sizeof(FONT[0]))) & (0x0f));
|
||||
commandSequence[3] = 0x10+( ((2+cursorPosition.x+(2*sizeof(FONT[0]))) & (0xf0)) >> 4 );
|
||||
#endif
|
||||
lcd_command(commandSequence, sizeof(commandSequence));
|
||||
|
||||
|
||||
#else
|
||||
i2c_start(LCD_I2C_ADR << 1);
|
||||
i2c_byte(0x40);
|
||||
for (uint8_t i = 0; i < sizeof(FONT[0]); i++)
|
||||
@ -232,7 +308,12 @@ void lcd_putc(char c){
|
||||
}
|
||||
i2c_stop();
|
||||
#endif
|
||||
#endif
|
||||
#ifdef BIGCHAR
|
||||
cursorPosition.x += sizeof(FONT[0])*2;
|
||||
#else
|
||||
cursorPosition.x += sizeof(FONT[0]);
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
|
||||
@ -360,5 +441,5 @@ void lcd_display() {
|
||||
lcd_data(displayBuffer[i], sizeof(displayBuffer[i]));
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
Laden…
x
In neuem Issue referenzieren
Einen Benutzer sperren