11 #include <util/delay.h> 15 static void lcd_enable(
void )
17 LCD2_PORT |= (1<<LCD_EN);
18 _delay_us( LCD_ENABLE_US );
19 LCD2_PORT &= ~(1<<LCD_EN);
24 static void lcd_out( uint8_t data )
28 LCD_PORT &= ~(0xF0>>(4-LCD_DB));
29 LCD_PORT |= (data>>(4-LCD_DB));
38 uint8_t pins = (0x0F << LCD_DB);
39 uint8_t pins2 = (1<<LCD_RS) |
49 _delay_ms( LCD_BOOTUP_MS );
52 lcd_out( LCD_SOFT_RESET );
53 _delay_ms( LCD_SOFT_RESET_MS1 );
56 _delay_ms( LCD_SOFT_RESET_MS2 );
59 _delay_ms( LCD_SOFT_RESET_MS3 );
62 lcd_out( LCD_SET_FUNCTION |
64 _delay_ms( LCD_SET_4BITMODE_MS );
67 lcd_command( LCD_SET_FUNCTION |
73 lcd_command( LCD_SET_DISPLAY |
79 lcd_command( LCD_SET_ENTRY |
88 void lcd_data( uint8_t data )
90 LCD2_PORT |= (1<<LCD_RS);
95 _delay_us( LCD_WRITEDATA_US );
100 void lcd_command( uint8_t data )
102 LCD2_PORT &= ~(1<<LCD_RS);
107 _delay_us( LCD_COMMAND_US );
112 void lcd_clear(
void )
114 lcd_command( LCD_CLEAR_DISPLAY );
115 _delay_ms( LCD_CLEAR_DISPLAY_MS );
120 void lcd_home(
void )
122 lcd_command( LCD_CURSOR_HOME );
123 _delay_ms( LCD_CURSOR_HOME_MS );
129 void lcd_setcursor( uint8_t x, uint8_t y )
136 data = LCD_SET_DDADR + LCD_DDADR_LINE1 + x;
140 data = LCD_SET_DDADR + LCD_DDADR_LINE2 + x;
144 data = LCD_SET_DDADR + LCD_DDADR_LINE3 + x;
148 data = LCD_SET_DDADR + LCD_DDADR_LINE4 + x;
161 void lcd_string(
const char *data )
163 while( *data !=
'\0' )
170 void lcd_generatechar( uint8_t code,
const uint8_t *data )
173 lcd_command( LCD_SET_CGADR | (code<<3) );
176 for ( uint8_t i=0; i<8; i++ )