Skip to content

Commit b8c1ec0

Browse files
Fixed touch screen issue
1 parent 0f07372 commit b8c1ec0

File tree

1 file changed

+22
-20
lines changed

1 file changed

+22
-20
lines changed

libraries/MultiLCD/R61581.cpp

Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ void LCD_R61581::begin()
117117
LCD_Write_DATA(0x60);//0x23
118118

119119
LCD_Write_COM(0x36);
120-
LCD_Write_DATA(0x0A);
120+
LCD_Write_DATA(0x8A);
121121

122122
LCD_Write_COM(0x0C);
123123
LCD_Write_DATA(0x55);
@@ -179,7 +179,7 @@ void LCD_R61581::begin()
179179
pinMode(PIN_CS, OUTPUT);
180180
pinMode(PIN_DIN, OUTPUT);
181181
pinMode(PIN_DOUT, INPUT);
182-
pinMode(PIN_IRQ, INPUT_PULLUP);
182+
pinMode(PIN_IRQ, INPUT);
183183

184184
digitalWrite(PIN_CS, HIGH);
185185
digitalWrite(PIN_CLK, HIGH);
@@ -191,9 +191,9 @@ void LCD_R61581::setXY(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2)
191191
{
192192
swap(word, x1, y1);
193193
swap(word, x2, y2)
194-
//y1=disp_y_size-y1;
195-
//y2=disp_y_size-y2;
196-
//swap(word, y1, y2)
194+
y1=disp_y_size-y1;
195+
y2=disp_y_size-y2;
196+
swap(word, y1, y2)
197197
// begin hardware specific code
198198
LCD_Write_COM(0x2a);
199199
LCD_Write_DATA(x1>>8);
@@ -260,15 +260,16 @@ size_t LCD_R61581::write(uint8_t c)
260260
if (m_font == FONT_SIZE_SMALL) {
261261
setXY(m_x, m_y, m_x + 4, m_y + 7);
262262
if (c > 0x20 && c < 0x7f) {
263-
for (byte i = 0; i < 5; i++) {
263+
byte i = 4;
264+
do {
264265
unsigned char d = pgm_read_byte(&font5x8[c - 0x21][i]);
265266
for (byte j = 0; j < 8; j++, d >>= 1) {
266267
if (d & 1)
267268
setPixel(fch, fcl);
268269
else
269270
setPixel(bch, bcl);
270271
}
271-
}
272+
} while(i--);
272273
} else {
273274
clearPixels(5 * 8);
274275
}
@@ -279,14 +280,14 @@ size_t LCD_R61581::write(uint8_t c)
279280
byte pgm_buffer[16];
280281
memcpy_P(pgm_buffer, &font8x16_terminal[c - 0x21], 16);
281282
for (byte i = 0; i < 16; i += 2) {
282-
unsigned char d = pgm_buffer[i];
283+
unsigned char d = pgm_buffer[14 - i];
283284
for (byte j = 0; j < 8; j++, d >>= 1) {
284285
if (d & 1)
285286
setPixel(fch, fcl);
286287
else
287288
setPixel(bch, bcl);
288289
}
289-
d = pgm_buffer[i + 1];
290+
d = pgm_buffer[15 - i];
290291
for (byte j = 0; j < 8; j++, d >>= 1) {
291292
if (d & 1)
292293
setPixel(fch, fcl);
@@ -312,14 +313,14 @@ void LCD_R61581::writeDigit(byte n)
312313
byte pgm_buffer[32];
313314
memcpy_P(pgm_buffer, &digits16x16[n], sizeof(pgm_buffer));
314315
for (byte i = 0; i < 16; i++) {
315-
unsigned char d = pgm_buffer[i];
316+
unsigned char d = pgm_buffer[15 - i];
316317
for (byte j = 0; j < 8; j++, d >>= 1) {
317318
if (d & 1)
318319
setPixel(fch, fcl);
319320
else
320321
setPixel(bch, bcl);
321322
}
322-
d = pgm_buffer[i + 16];
323+
d = pgm_buffer[31 - i];
323324
for (byte j = 0; j < 8; j++, d >>= 1) {
324325
if (d & 1)
325326
setPixel(fch, fcl);
@@ -337,21 +338,21 @@ void LCD_R61581::writeDigit(byte n)
337338
byte pgm_buffer[48];
338339
memcpy_P(pgm_buffer, &digits16x24[n], sizeof(pgm_buffer));
339340
for (int i = 0; i < 48; i += 3) {
340-
unsigned char d = pgm_buffer[i];
341+
unsigned char d = pgm_buffer[45 - i];
341342
for (int j = 0; j < 8; j++, d >>= 1) {
342343
if (d & 1)
343344
setPixel(fch, fcl);
344345
else
345346
setPixel(bch, bcl);
346347
}
347-
d = pgm_buffer[i + 1];
348+
d = pgm_buffer[46 - i];
348349
for (int j = 0; j < 8; j++, d >>= 1) {
349350
if (d & 1)
350351
setPixel(fch, fcl);
351352
else
352353
setPixel(bch, bcl);
353354
}
354-
d = pgm_buffer[i + 2];
355+
d = pgm_buffer[47 - i];
355356
for (int j = 0; j < 8; j++, d >>= 1) {
356357
if (d & 1)
357358
setPixel(fch, fcl);
@@ -374,7 +375,7 @@ void LCD_R61581::draw(const PROGMEM byte* buffer, uint16_t width, uint16_t heigh
374375
byte rows = height >> 3;
375376
Enable();
376377
setXY(m_x, m_y, m_x + width - 1, m_y + height - 1);
377-
for (int16_t i = 0; i < width; i++) {
378+
for (int16_t i = width - 1; i >= 0; i--) {
378379
for (uint8_t h = 0; h < rows; h++) {
379380
#ifndef __arm__
380381
byte d = pgm_read_byte(buffer + i + width * h);
@@ -400,7 +401,7 @@ void LCD_R61581::draw(const PROGMEM byte* buffer, uint16_t width, uint16_t heigh
400401
if (scaleY == 0) scaleY = scaleX;
401402
Enable();
402403
setXY(m_x, m_y, m_x + width * scaleX - 1, m_y + height * scaleY - 1);
403-
for (int16_t i = 0; i < width; i++) {
404+
for (int16_t i = width - 1; i >= 0; i--) {
404405
for (byte n = 0; n < scaleX; n++) {
405406
for (uint8_t h = 0; h < rows; h++) {
406407
#ifndef __arm__
@@ -431,7 +432,8 @@ void LCD_R61581::draw2x(const PROGMEM byte* buffer, uint16_t width, uint16_t hei
431432
char buf[240];
432433
Enable();
433434
setXY(m_x, m_y, m_x + width * 2 - 1, m_y + height * 2 - 1);
434-
for (uint16_t i = 0; i < width; i++) {
435+
uint16_t i = width - 1;
436+
do {
435437
memcpy_P(buf, buffer + i * height * 2, height * 2);
436438
for (byte j = 0; j < height * 2; j += 2) {
437439
setPixel(buf[j + 1], buf[j]);
@@ -441,7 +443,7 @@ void LCD_R61581::draw2x(const PROGMEM byte* buffer, uint16_t width, uint16_t hei
441443
setPixel(buf[j + 1], buf[j]);
442444
setPixel(buf[j + 1], buf[j]);
443445
}
444-
}
446+
} while (i--);
445447
Disable();
446448
m_x += width * 2;
447449
}
@@ -496,8 +498,8 @@ byte LCD_R61581::getTouchData(int& x, int& y)
496498
digitalWrite(PIN_CLK,HIGH);
497499
digitalWrite(PIN_CLK,LOW);
498500
int d = shiftInTouchData();
499-
if (d >= 4000) {
500-
digitalWrite(PIN_CS,HIGH);
501+
if (d >= 3600) {
502+
digitalWrite(PIN_CS,HIGH);
501503
return 0;
502504
}
503505
ty += d;

0 commit comments

Comments
 (0)