65 lines
2.6 KiB
C
65 lines
2.6 KiB
C
#include "display_functions.h"
|
|
#include <Wire.h>
|
|
|
|
#define LCD_ADDRESS 0x27 // Адрес дисплея на шине I2C
|
|
#define LCD_WIDTH 16 // Ширина дисплея в символах
|
|
#define LCD_HEIGHT 2 // Высота дисплея в строках
|
|
|
|
void lcd_send_command(uint8_t command) {
|
|
Wire.beginTransmission(LCD_ADDRESS);
|
|
i2c_send_byte(0x80); // Co = 0, Rs = 0 (управляющий байт)
|
|
i2c_send_byte(command);
|
|
Wire.endTransmission();
|
|
}
|
|
|
|
void lcd_send_data(uint8_t data) {
|
|
Wire.beginTransmission(LCD_ADDRESS);
|
|
i2c_send_byte(0xC0); // Co = 0, Rs = 1 (байт данных)
|
|
i2c_send_byte(data);
|
|
Wire.endTransmission();
|
|
}
|
|
|
|
void lcd_send_string(const char *str) {
|
|
while (*str) {
|
|
lcd_send_data(*str);
|
|
str++;
|
|
}
|
|
}
|
|
|
|
void lcd_clear() {
|
|
lcd_send_command(0x01); // Очистка дисплея
|
|
_delay_ms(2); // Небольшая пауза для завершения очистки
|
|
}
|
|
|
|
void lcd_init() {
|
|
Wire.begin();
|
|
lcd_send_command(0x38); // Установка интерфейса: 8 бит данных, 2 строки, 5x8 точек
|
|
lcd_send_command(0x08); // Отключение дисплея, курсора и мигания курсора
|
|
lcd_send_command(0x01); // Очистка дисплея
|
|
_delay_ms(2); // Небольшая пауза для завершения очистки
|
|
lcd_send_command(0x06); // Установка направления текста: курсор увеличивается, сдвиг дисплея
|
|
lcd_send_command(0x0C); // Включение дисплея без курсора и мигания курсора
|
|
}
|
|
|
|
void lcd_print_char(char c) {
|
|
lcd_send_data(c);
|
|
}
|
|
|
|
void lcd_print_string(const char *str) {
|
|
lcd_send_string(str);
|
|
}
|
|
|
|
void lcd_update(const DisplayData *displayData, const TextCounter *textCounter) {
|
|
lcd_clear(); // Очистка дисплея перед выводом новой информации
|
|
|
|
// Вывод данных на первую строку
|
|
lcd_send_command(0x80); // Установка курсора на начало первой строки
|
|
lcd_send_string(displayData->topLine);
|
|
|
|
// Вывод данных на вторую строку
|
|
lcd_send_command(0xC0); // Установка курсора на начало второй строки
|
|
char buffer[17];
|
|
snprintf(buffer, sizeof(buffer), "%d.%d.%d", displayData->value1, displayData->value2, displayData->value3);
|
|
lcd_send_string(buffer);
|
|
}
|