@@ -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