3 * I2C-LCD ACM1602 Handler
4 * (C) 2013-06-10 K.Ohta <whatisthis.sowhat ai gmail.com>
8 #include "lcd_acm1602.h"
10 static void sendcmd(unsigned char addr, unsigned char cmd)
18 delay1ktcy(1); // 0.1ms
21 static void delay_lcd(void)
23 delay1ktcy(40); // (1000cycle * (8*5) = 5ms
26 void acm1602_cls(unsigned char addr)
31 i2c_writechar(0x00); // CMD
32 i2c_writechar(0x01); // CLS
37 void acm1602_putchar(unsigned char addr, unsigned char c)
42 i2c_writechar(0x80); //Data
43 i2c_writechar(c); // Putchar
45 delay1ktcy(1); //0.1ms
48 void acm1602_locate(unsigned char addr, char x, char y)
50 unsigned char ramaddr;
51 if((x < 0) || (x > 15)) return;
52 if((y < 0) || (y > 1)) return;
54 ramaddr = 0x80 | (x & 0x0f);
56 ramaddr = 0xc0 | (x & 0x0f);
58 sendcmd(addr, ramaddr);
61 void acm1602_home(unsigned char addr)
66 i2c_writechar(0x00); // CMD
67 i2c_writechar(0x02); // HOME
72 void acm1602_printf(unsigned char addr, const char *fmt, ...)
74 char strbuf[32]; // Max 32 bytes.
81 sprintf(strbuf, args);
83 if((l >= 32) || (l <= 0))return;
84 for(i = 0; i < l; i++) {
85 acm1602_putchar(addr, strbuf[i]);
89 void acm1602_cursordir(unsigned char addr, unsigned char right)
100 void acm1602_init(unsigned char addr, unsigned char cls)
102 sendcmd(addr, 0x38); // 2lines, 8x10dot fonts.
103 sendcmd(addr, 0x0f); // Display ON.