/* * tinyi2c.c for st7032i splc792a lcd controler * * Created: 2015/07/31 7:48:14 * Author: www.henteko.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(0b01011100 | ((cont >> 4) & 0x3)); // power/icon/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(0b01011100 | ((level >> 4) & 0x3)); // power/icon/contrast control i2c_lcd_cmd(0b01101100); // follower control i2c_delay_ms(200); i2c_lcd_cmd(0b00111000); // function set 0 }