OSDN Git Service

[LCD] Change LCD display primitives #define to function, to save usage of memory.
[openi2cradio/OpenI2CRadio.git] / lcd_acm1602.c
index 422bd6e..1484272 100644 (file)
@@ -107,6 +107,11 @@ unsigned char acm1602_getchar(unsigned char addr)
     return d;
 }
 #else // Parallel
+static void _ACM1602_TC_WAIT(void)
+{
+    __delay_us(5);
+}
+
 static unsigned char lcd_busychk(unsigned char addr)
 {
     unsigned char b, d;
@@ -422,7 +427,9 @@ void acm1602_setdataramaddress(unsigned char addr, unsigned char pos)
 void acm1602_locate_16x2(unsigned char addr, char x, char y)
 {
     unsigned char ramaddr;
-    ramaddr = (y == 0)? x & 0x0f : (x & 0x0f) | 0x40;
+    if((x < 0) || (x >= 16)) return;
+    if((y < 0) || (y > 1)) return;
+    ramaddr = (y == 0)? x  : (x  | 0x40);
     acm1602_setdataramaddress(addr, ramaddr);
 }
 
@@ -432,9 +439,9 @@ void acm1602_locate_16x2(unsigned char addr, char x, char y)
 void acm1602_locate_8x2(unsigned char addr, char x, char y)
 {
     unsigned char ramaddr;
-    if((x < 0) || (x > 8)) return;
+    if((x < 0) || (x >= 8)) return;
     if((y < 0) || (y > 1)) return;
-    ramaddr = (y == 0)? x & 0x0f : (x & 0x0f) | 0x40;
+    ramaddr = (y == 0)? x : x | 0x40;
     acm1602_setdataramaddress(addr, ramaddr);
 }
 
@@ -486,13 +493,13 @@ void acm1602_init(unsigned char addr, unsigned char cls)
   #else // 4Bit
     _ACM1602_LONG_LONG_WAIT();
     sendonce(addr, 0x30); // 2lines, 8x10dot fonts.
-    _ACM1602_SHORT_WAIT();
+//    _ACM1602_SHORT_WAIT();
     sendonce(addr, 0x30); // 2lines, 8x10dot fonts.
-    _ACM1602_SHORT_WAIT();
+//    _ACM1602_SHORT_WAIT();
     sendonce(addr, 0x30); // 2lines, 8x10dot fonts.
-    _ACM1602_SHORT_WAIT();
+//    _ACM1602_SHORT_WAIT();
     sendonce(addr, 0x20); // 2lines, 8x10dot fonts.
-    _ACM1602_SHORT_WAIT();
+//    _ACM1602_SHORT_WAIT();
     // Send twice on 4Bit Mode.
 //    sendonce(addr, 0x30); // 2lines, 8x10dot fonts.
     sendcmd(addr, 0x28, 0xff); // 2lines, 8x5dot fonts.
@@ -500,14 +507,14 @@ void acm1602_init(unsigned char addr, unsigned char cls)
 #endif
 //    sendcmd(addr, 0x08, 0xff); // Display OFF.
     sendcmd(addr, 0x0c, 0xff); // Display ON.
-    sendcmd(addr, 0x06, 0xff); // Cursor increment,not shift.
+//    sendcmd(addr, 0x06, 0xff); // Cursor increment,not shift.
    if(cls == 0){
         acm1602_home(addr);
     } else {
         acm1602_cls(addr);
     }
-    _ACM1602_LONG_WAIT();
-//    sendcmd(addr, 0x06, 0xff);
+//    _ACM1602_LONG_WAIT();
+    sendcmd(addr, 0x06, 0xff);
 }
 
 /*