void lcd_write(bool ctrl, uint8_t dat) { lcd_write_4b(ctrl, dat << 0); lcd_write_4b(ctrl, dat << 4); if (ctrl && !(dat & 0xfc)) _delay_us(d1); else _delay_us(d2); }
void lcd_init() { //static bool power_on_reset = 1; //if (power_on_reset) { // power_on_reset = 0; timer_sleep_ms(40); //} uint8_t d; d = 0x30; lcd_write_4b(1, d); _delay_us(d2); d = 0x20; // Function set d |= (1 << 3); // 1/2 line mode d |= (0 << 2); // 5x8/5x11 dots lcd_write(1, d); lcd_write(1, d); d = 0x08; // Display on/off control d |= (1 << 2); // display enable d |= (0 << 1); // cursor enable d |= (0 << 0); // blink enable lcd_write(1, d); d = 0x01; // Display clear lcd_write(1, d); d = 0x04; // Entry mode set d |= (1 << 1); // dec/inc mode d |= (0 << 0); // entire shift lcd_write(1, d); lcd_write(1, 0x01); lcd_pos = 0; fb[LCD_S] = 0; }
//convert the 8 bit data to 4 bit data and send to lcd void LCD_write(u08 data, u08 data_type) { Databus_clear(); lcd_write_4b( ((data&0xF0)>>4), data_type); lcd_write_4b( (data&0x0F), data_type); }