Untitled
unknown
plain_text
4 years ago
2.7 kB
46
Indexable
/* * LCD16X2.h * * Created: 18-Nov-21 16:04:17 * Author: udani */ #ifndef LCD16X2_H_ #define LCD16X2_H_ #define LCD_Dir DDRB /* Define LCD data port direction */ #define LCD_Port PORTB /* Define LCD data port */ #define RS PB0 /* Define Register Select pin */ #define EN PB1 /* Define Enable signal pin */ void LCD_Command( unsigned char cmnd ) { LCD_Port = (LCD_Port & 0x0F) | (cmnd & 0xF0); /* sending upper nibble */ LCD_Port &= ~ (1<<RS); /* RS=0, command reg. */ LCD_Port |= (1<<EN); /* Enable pulse */ _delay_us(1); LCD_Port &= ~ (1<<EN); _delay_us(200); LCD_Port = (LCD_Port & 0x0F) | (cmnd << 4); /* sending lower nibble */ LCD_Port |= (1<<EN); _delay_us(1); LCD_Port &= ~ (1<<EN); _delay_ms(2); } void LCD_Char( unsigned char data ) { LCD_Port = (LCD_Port & 0x0F) | (data & 0xF0); /* sending upper nibble */ LCD_Port |= (1<<RS); /* RS=1, data reg. */ LCD_Port|= (1<<EN); _delay_us(1); LCD_Port &= ~ (1<<EN); _delay_us(200); LCD_Port = (LCD_Port & 0x0F) | (data << 4); /* sending lower nibble */ LCD_Port |= (1<<EN); _delay_us(1); LCD_Port &= ~ (1<<EN); _delay_ms(2); } void LCD_Init (void) /* LCD Initialize function */ { LCD_Dir = 0xFF; /* Make LCD port direction as o/p */ _delay_ms(20); /* LCD Power ON delay always >15ms */ LCD_Command(0x02); /* send for 4 bit initialization of LCD */ LCD_Command(0x28); /* 2 line, 5*7 matrix in 4-bit mode */ LCD_Command(0x0c); /* Display on cursor off*/ LCD_Command(0x06); /* Increment cursor (shift cursor to right)*/ LCD_Command(0x01); /* Clear display screen*/ _delay_ms(2); } void LCD_String (char *str) /* Send string to LCD function */ { unsigned char i=0; while (str[i] |= 0) { LCD_Char(str[i]); i++; } } void LCD_String_xy (char row, char pos) /* Send string to LCD with xy position */ { if (row == 0 && pos<16) LCD_Command((pos & 0x0F)|0x80); /* Command of first row and required position<16 */ else if (row == 1 && pos<16) LCD_Command((pos & 0x0F)|0xC0); /* Command of first row and required position<16 */ } void LCD_String_xy2 (char row, char pos, char *str) /* Send string to LCD with xy position */ { if (row == 0 && pos<16) LCD_Command((pos & 0x0F)|0x80); /* Command of first row and required position<16 */ else if (row == 1 && pos<16) LCD_Command((pos & 0x0F)|0xC0); /* Command of first row and required position<16 */ LCD_String(str); /* Call LCD string function */ } void LCD_Clear() { LCD_Command (0x01); /* Clear display */ _delay_ms(2); LCD_Command (0x80); /* Cursor at home position */ } #endif /* LCD16X2_H_ */
Editor is loading...