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;
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)
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);
}
#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.
#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);
}
/*
_ACM1602_LONG_WAIT();
}
+void acm1602_resume(unsigned char addr)
+{
+ sendcmd(addr, 0x0c, 0xff);
+ _ACM1602_LONG_WAIT();
+}
+
+
#ifdef _USE_I2C_1602
/*
* st7032 extensions.