3 * I2C-LCD ACM1602 Handler
4 * (C) 2013-06-10 K.Ohta <whatisthis.sowhat ai gmail.com>
16 static void sendcmd(unsigned char addr, unsigned char cmd)
24 delay1ktcy(1); // 0.1ms
27 static void delay_lcd(void)
29 delay1ktcy(40); // (1000cycle * (8*5) = 5ms
32 void acm1602_cls(unsigned char addr)
37 i2c_writechar(0x00); // CMD
38 i2c_writechar(0x01); // CLS
43 void acm1602_putchar(unsigned char addr, unsigned char c)
48 i2c_writechar(0x80); //Data
49 i2c_writechar(c); // Putchar
51 delay1ktcy(1); //0.1ms
54 void acm1602_locate(unsigned char addr, char x, char y)
56 unsigned char ramaddr;
57 if((x < 0) || (x > 15)) return;
58 if((y < 0) || (y > 1)) return;
60 ramaddr = 0x80 | (x & 0x0f);
62 ramaddr = 0xc0 | (x & 0x0f);
64 sendcmd(addr, ramaddr);
67 void acm1602_home(unsigned char addr)
72 i2c_writechar(0x00); // CMD
73 i2c_writechar(0x02); // HOME
78 void acm1602_printf(unsigned char addr, const char *fmt, ...)
80 char strbuf[32]; // Max 32 bytes.
87 sprintf(strbuf, args);
89 if((l >= 32) || (l <= 0))return;
90 for(i = 0; i < l; i++) {
91 acm1602_putchar(addr, strbuf[i]);
95 void acm1602_cursordir(unsigned char addr, unsigned char right)
106 void acm1602_init(unsigned char addr, unsigned char cls)
108 sendcmd(addr, 0x38); // 2lines, 8x10dot fonts.
109 sendcmd(addr, 0x0f); // Display ON.