/* * File: i2c_lcd.c * Author: www.henteko.org * * Created on 2020/05/05, 19:40 */ #include "i2c_lcd.h" #include "pic16f_i2c.h" void i2c_delay_ms(unsigned int t) { for(; t > 0; t--) __delay_ms(1); } void i2c_lcd_cmd(unsigned char cmd) { StartI2C(); WriteI2C(LCD_ST7032_SEND); WriteI2C(0x00); WriteI2C(cmd); StopI2C(); __delay_us(50); } void i2c_lcd_putch(unsigned char chr) { StartI2C(); WriteI2C(LCD_ST7032_SEND); WriteI2C(0x40); WriteI2C(chr); StopI2C(); } void i2c_lcd_puts(unsigned char *str) { while(*str) { i2c_lcd_putch(*str++); } } 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 }