#ifndef HD44780_H_
#define HD44780_H_

#define LCM_DIR P1DIR
#define LCM_OUT P1OUT

// Определяем карту соответствия пинов индикатора контроллеру
// Для простоты зададим соответствие пинов номерам выводов порта 4,5,6,7

#define LCM_PIN_RS BIT0 // P1.0
#define LCM_PIN_EN BIT1 // P1.1
#define LCM_PIN_D7 BIT7 // P1.7
#define LCM_PIN_D6 BIT6 // P1.6
#define LCM_PIN_D5 BIT5 // P1.5
#define LCM_PIN_D4 BIT4 // P1.4

#define LCM_PIN_MASK ((LCM_PIN_RS | LCM_PIN_EN | LCM_PIN_D7 | LCM_PIN_D6 | LCM_PIN_D5 | LCM_PIN_D4))

#define FALSE 0
#define TRUE 1

void HD44780_SetPosition(char Row, char Col);
void HD44780_Clear_Screen();
void HD44780_Init(void);
void HD44780_PrintStr(char *Text);
void HD44780_outdec(long data, unsigned char ndigits);


#endif /* HD44780_H_ */

//Индикатор по схеме работает в 4-битном режиме, и согласно даташиту, его прежде всего необходимо настроить на этот режим. Инициализируем индикатор:


void HD44780_Init(void)
{

// Устанавливаем порты МК на вывод
// и выдаём на них логический ноль

LCM_DIR |= LCM_PIN_MASK;
LCM_OUT &= ~(LCM_PIN_MASK);
// Ждём пока индикатор инициализирует сам себя
// Помним, что МК включается гораздо быстрее индикатора

__delay_cycles(100000);
// Инициализация индикатора
// 1. установка 4-битного режима обмена

LCM_OUT &= ~LCM_PIN_RS;
LCM_OUT &= ~LCM_PIN_EN;

LCM_OUT = 0x20;
HD44780_Pulse();

// Снова отправляем команду режима 4-бит
// (согласно спецификации)

HD44780_SendByte(0x28, FALSE);
// 2. Включаем дисплей, мигание курсора включено

HD44780_SendByte(0x0E, FALSE);
// 3. режим автоматического перемещения курсора

HD44780_SendByte(0x06, FALSE);
}
