OSDN Git Service

[SCHEMATIC] Add symbol: SA612 , NXP's mixer IC.
[openi2cradio/OpenI2CRadio.git] / lcd_acm1602.c
index bebcd19..d33af14 100644 (file)
@@ -107,6 +107,15 @@ unsigned char acm1602_getchar(unsigned char addr)
     return d;
 }
 #else // Parallel
+static void _ACM1602_TC_WAIT(void)
+{
+#ifdef __SDCC
+   delay10tcy(4);
+#else
+   __delay_us(5);
+#endif
+}
+
 static unsigned char lcd_busychk(unsigned char addr)
 {
     unsigned char b, d;
@@ -409,7 +418,7 @@ void acm1602_putchar(unsigned char addr, unsigned char c)
 void acm1602_cls(unsigned char addr)
 {
     sendcmd(addr, 0x01, 0xff);
-    _ACM1602_LONG_LONG_WAIT(); // Wait 5ms
+    _ACM1602_LONG_WAIT(); // Wait 5ms
 }
 
 void acm1602_setdataramaddress(unsigned char addr, unsigned char pos)
@@ -418,39 +427,52 @@ void acm1602_setdataramaddress(unsigned char addr, unsigned char pos)
     sendcmd(addr, cmd, 0xff);
 }
 
-void acm1602_locate_16x2(unsigned char addr, char x, char y)
+
+void acm1602_locate_16x2(unsigned char addr, unsigned char x, unsigned char y)
 {
     unsigned char ramaddr;
-    ramaddr = (y == 0)? x & 0x0f : (x & 0x0f) | 0x40;
+    if(x > 16) return;
+    if(y > 1) return;
+    ramaddr = (y == 0)? x  : (x  | 0x40);
     acm1602_setdataramaddress(addr, ramaddr);
 }
 
 /*
  * For using
  */
-void acm1602_locate_8x2(unsigned char addr, char x, char y)
+void acm1602_locate_8x2(unsigned char addr, unsigned char x, unsigned char y)
 {
     unsigned char ramaddr;
-    if((x < 0) || (x > 8)) return;
-    if((y < 0) || (y > 1)) return;
-    ramaddr = (y == 0)? x & 0x0f : (x & 0x0f) | 0x40;
+    if(x > 8) return;
+    if(y > 1) return;
+    ramaddr = (y == 0)? x : x | 0x40;
     acm1602_setdataramaddress(addr, ramaddr);
 }
 
 void acm1602_home(unsigned char addr)
 {
     sendcmd(addr, 0x02, 0xff);
-    _ACM1602_LONG_LONG_WAIT(); // Wait 5ms
+    _ACM1602_LONG_WAIT(); // Wait 5ms
 }
 
 
 void acm1602_cursordir(unsigned char addr, unsigned char right)
 {
     unsigned char cmd;
-    if(right == 0) {
-        cmd = 0x18;
-    } else {
-        cmd = 0x1c;
+
+    cmd = 0x14;
+    if(right == 0)  {
+        cmd = 0x10;
+    }
+    sendcmd(addr, cmd, 0xff);
+}
+
+void acm1602_dispcursor(unsigned char addr, unsigned char flag)
+{
+    unsigned char cmd;
+    cmd = 0x0d; // Cursor ON
+    if(flag == 0x00) {
+        cmd = 0x0c; // Cursor off
     }
     sendcmd(addr, cmd, 0xff);
 }
@@ -475,13 +497,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.
@@ -489,14 +511,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);
 }
 
 /*
@@ -508,6 +530,13 @@ void acm1602_suspend(unsigned char addr)
     _ACM1602_LONG_WAIT();
 }
 
+void acm1602_resume(unsigned char addr)
+{
+    sendcmd(addr, 0x0c, 0xff);
+    _ACM1602_LONG_WAIT();
+}
+
+
 #ifdef _USE_I2C_1602
 /*
  * st7032 extensions.