/* * st7032i & splc792a i2c lcd controler * * File: i2c_lcd.c * Created: 2015/07/31 7:48:14 * Author: www.hetenko.org */ #include #include "i2c_lcd.h" void i2c_delay_ms(unsigned int t) { while(t--) _delay_ms(1); } void i2c_delay_us(unsigned int t) { while(t--) _delay_us(1); } void i2c_lcd_cmd(unsigned char cmd) { TinyI2C_start(); TinyI2C_write(LCD_ST7032_SEND); TinyI2C_write(0x00); TinyI2C_write(cmd); TinyI2C_stop(); i2c_delay_us(27); } void i2c_lcd_putch(unsigned char chr) { TinyI2C_start(); TinyI2C_write(LCD_ST7032_SEND); TinyI2C_write(0x40); TinyI2C_write(chr); TinyI2C_stop(); i2c_delay_us(27); } void i2c_lcd_goto(unsigned char line, unsigned char pos) { pos += 0x80; i2c_lcd_cmd(0b00111000); // function set 0 if(line == 1) pos += 0x40; i2c_lcd_cmd(pos); } void i2c_lcd_clear(void) { i2c_lcd_cmd(0b00000001); } void i2c_lcd_cursor(unsigned char mode) { i2c_lcd_cmd(0b00001100 | (mode & 0x3)); } void i2c_lcd_init(unsigned char cont) { i2c_delay_ms(40); i2c_lcd_cmd(0b00111000); // function set 0 i2c_lcd_cmd(0b00111001); // function set 1 i2c_lcd_cmd(0b00010100); // internal OSC frequency set i2c_lcd_cmd(0b01110000 | (cont & 0xf)); // contrast set // i2c_lcd_cmd(0b01010100 | ((cont >> 4) & 0x3)); // 3.3V icon/powerbst/contrast control i2c_lcd_cmd(0b01010000 | ((cont >> 4) & 0x3)); // 5.0V icon/powerbst/contrast control i2c_lcd_cmd(0b01101100); // follower control i2c_delay_ms(200); i2c_lcd_cmd(0b00111000); // function set 0 i2c_lcd_cmd(0b00001100); // display on i2c_lcd_cmd(0b00000001); // display clear i2c_delay_ms(2); } void i2c_lcd_contrast(unsigned char level) { i2c_lcd_cmd(0b00111001); // function set 1 i2c_lcd_cmd(0b01110000 | (level & 0xf)); // contrast set // i2c_lcd_cmd(0b01010100 | ((level >> 4) & 0x3)); // 3.3V power/icon/contrast control i2c_lcd_cmd(0b01010000 | ((level >> 4) & 0x3)); // 5.0V power/icon/contrast control i2c_lcd_cmd(0b01101100); // follower control i2c_delay_ms(200); i2c_lcd_cmd(0b00111000); // function set 0 }