void LCD_Wr(char d); //запись байта в LCD
void LCD_Wr4(char d); //запись ниббла в LCD
//-------------------------- Инициализация LCD: ------------------------------
void LCD_Init(void)
{
Delay_ms(15);
LCD_WrCmd(0x30);
Delay_ms(5); //delay >4.1 mS
LCD_WrCmd(0x30);
Delay_us(100); //delay >100 uS
LCD_WrCmd(0x30);
Delay_ms(5); //delay >4.1 mS
LCD_WrCmd(0x20); //FUNCTION SET (8 bit)
Delay_ms(15);
LCD_WrCmd(0x28); //FUNCTION SET (4 bit)
Delay_ms(15);
LCD_WrCmd(0x0C); //DISPLAY ON
Delay_ms(15);
LCD_WrCmd(0x06); //ENTRY MODE SET
Delay_ms(15);
LCD_Clear(); //CLEAR
Delay_ms(15);
LCD_UsrChr(); //загрузка символов пользователя
}
//------------------------- Запись байта в LCD: ------------------------------
void LCD_Wr(char d)
{
LCD_Wr4(d);
Delay_us(10);
LCD_Wr4(__swap_nibbles(d));
Delay_us(50);
}
//------------------------ Запись ниббла в LCD: ------------------------------
//Линии данных LCD могут быть расположены не по порядку,
//и даже на разных портах.
void LCD_Wr4(char d)
{
(d & 0x10)? Port_LCD_D4_1 : Port_LCD_D4_0;
(d & 0x20)? Port_LCD_D5_1 : Port_LCD_D5_0;
(d & 0x40)? Port_LCD_D6_1 : Port_LCD_D6_0;
(d & 0x80)? Port_LCD_D7_1 : Port_LCD_D7_0;
Port_LCD_E_1; //E <- 1
Delay_us(2); //delay 2 uS
Port_LCD_E_0; //E <- 0
}