#include #include "lcd.h" #include "../hardware.h" void LCD_command(uint8_t cmd) { LCD_RS_LOW; _delay_us(0.040); LCD_E_HIGH; LCD_DATA_HIGH_NIBBLE(cmd); _delay_us(0.250); LCD_E_LOW; _delay_us(0.250); LCD_E_HIGH; LCD_DATA_LOW_NIBBLE(cmd); _delay_us(0.250); LCD_E_LOW; if (cmd==LCD_RETURN_HOME || cmd==LCD_CLEAR_DISPLAY) { _delay_us(1600); } else { _delay_us(60); } } void LCD_data(uint8_t data) { LCD_RS_HIGH; _delay_us(0.040); LCD_E_HIGH; LCD_DATA_HIGH_NIBBLE(data); _delay_us(0.250); LCD_E_LOW; _delay_us(0.250); LCD_E_HIGH; LCD_DATA_LOW_NIBBLE(data); _delay_us(0.250); LCD_E_LOW; _delay_us(60); } void LCD_write(char* text) { char c; while ((c=*text)) { LCD_data(c); text++; } } void LCD_write_P(PGM_P text) { char c; while ((c=pgm_read_byte(text))) { LCD_data(c); text++; } } void LCD_init(uint8_t options) { LCD_PORT_INIT; LCD_E_LOW; _delay_ms(50); LCD_RS_LOW; _delay_us(0.040); LCD_E_HIGH; LCD_DATA_HIGH_NIBBLE(0b00110000); _delay_us(0.250); LCD_E_LOW; _delay_ms(5); LCD_E_HIGH; _delay_us(0.250); LCD_E_LOW; _delay_us(150); LCD_E_HIGH; _delay_us(0.250); LCD_E_LOW; _delay_us(0.250); LCD_E_HIGH; LCD_DATA_HIGH_NIBBLE(0b00100000); _delay_us(0.250); LCD_E_LOW; _delay_us(50); LCD_command(LCD_FUNCTION_SET+options); LCD_command(LCD_ON_OFF_CONTROL+LCD_DISPLAY); LCD_command(LCD_CLEAR_DISPLAY); LCD_command(LCD_ENTRY_MODE_SET+LCD_INCREMENT); LCD_command(LCD_RETURN_HOME); }