#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>
// Макроси для роботи з LCD
#define LCD_PORT PORTD
#define LCD_DDR DDRD
#define RS PD0
#define E PD2
#define D4 PD3
#define D5 PD4
#define D6 PD6
#define D7 PD7
// Функції
void lcd_pulse_enable() {
LCD_PORT |= (1 << E); // Підняти E
_delay_us(1);
LCD_PORT &= ~(1 << E); // Опустити E
_delay_us(100);
}
void lcd_send_nibble(unsigned char nibble) {
if (nibble & 0x01) LCD_PORT |= (1 << D4); else LCD_PORT &= ~(1 << D4);
if (nibble & 0x02) LCD_PORT |= (1 << D5); else LCD_PORT &= ~(1 << D5);
if (nibble & 0x04) LCD_PORT |= (1 << D6); else LCD_PORT &= ~(1 << D6);
if (nibble & 0x08) LCD_PORT |= (1 << D7); else LCD_PORT &= ~(1 << D7);
lcd_pulse_enable();
}
void lcd_command(unsigned char cmd) {
LCD_PORT &= ~(1 << RS); // RS = 0 (команда)
lcd_send_nibble(cmd >> 4); // Старші 4 біти
lcd_send_nibble(cmd & 0x0F); // Молодші 4 біти
_delay_ms(2);
}
void lcd_data(unsigned char data) {
LCD_PORT |= (1 << RS); // RS = 1 (дані)
lcd_send_nibble(data >> 4); // Старші 4 біти
lcd_send_nibble(data & 0x0F); // Молодші 4 біти
_delay_ms(2);
}
void lcd_init() {
LCD_DDR |= (1 << RS) | (1 << E) | (1 << D4) | (1 << D5) | (1 << D6) | (1 << D7); // Налаштування необхідних пінів як вихід
_delay_ms(20); // Затримка після увімкнення
lcd_command(0x02); // Перехід у 4-бітний режим
lcd_command(0x28); // 4 біти, 2 лінії, 5x8 шрифт
lcd_command(0x0C); // Увімкнути дисплей, без курсора
lcd_command(0x06); // Автозсув курсора праворуч
lcd_command(0x01); // Очистити дисплей
_delay_ms(2);
}
void lcd_print(char *str) {
while (*str) {
lcd_data(*str++);
}
}
void lcd_set_cursor(unsigned char row, unsigned char col) {
unsigned char address = (row == 0) ? col : (0x40 + col);
lcd_command(0x80 | address);
}
// Основна програма
int main(void) {
_delay_ms(500);
lcd_init(); // Ініціалізація LCD
_delay_ms(10);
lcd_set_cursor(0, 0); // Перехід на початок першого рядка
lcd_print("Hello my chatGPT.");
lcd_set_cursor(1, 0); // Перехід на початок другого рядка
lcd_print("Row 2 Test!_>>*"); // Вивести текст на другому рядку
while (1) {
_delay_ms(200);
}
}
I2RlZmluZSBGX0NQVSA4MDAwMDAwVUwgCiNpbmNsdWRlIDxhdnIvaW8uaD4KI2luY2x1ZGUgPHV0aWwvZGVsYXkuaD4KCgovLyDQnNCw0LrRgNC+0YHQuCDQtNC70Y8g0YDQvtCx0L7RgtC4INC3IExDRAojZGVmaW5lIExDRF9QT1JUIFBPUlRECiNkZWZpbmUgTENEX0REUiAgRERSRAojZGVmaW5lIFJTIFBEMAojZGVmaW5lIEUgIFBEMgojZGVmaW5lIEQ0IFBEMwojZGVmaW5lIEQ1IFBENAojZGVmaW5lIEQ2IFBENgojZGVmaW5lIEQ3IFBENwoKCi8vINCk0YPQvdC60YbRltGXCnZvaWQgbGNkX3B1bHNlX2VuYWJsZSgpIHsKICAgIExDRF9QT1JUIHw9ICgxIDw8IEUpOyAvLyDQn9GW0LTQvdGP0YLQuCBFCiAgICBfZGVsYXlfdXMoMSk7CiAgICBMQ0RfUE9SVCAmPSB+KDEgPDwgRSk7IC8vINCe0L/Rg9GB0YLQuNGC0LggRQogICAgX2RlbGF5X3VzKDEwMCk7Cn0KCnZvaWQgbGNkX3NlbmRfbmliYmxlKHVuc2lnbmVkIGNoYXIgbmliYmxlKSB7CiAgICBpZiAobmliYmxlICYgMHgwMSkgTENEX1BPUlQgfD0gKDEgPDwgRDQpOyBlbHNlIExDRF9QT1JUICY9IH4oMSA8PCBENCk7CiAgICBpZiAobmliYmxlICYgMHgwMikgTENEX1BPUlQgfD0gKDEgPDwgRDUpOyBlbHNlIExDRF9QT1JUICY9IH4oMSA8PCBENSk7CiAgICBpZiAobmliYmxlICYgMHgwNCkgTENEX1BPUlQgfD0gKDEgPDwgRDYpOyBlbHNlIExDRF9QT1JUICY9IH4oMSA8PCBENik7CiAgICBpZiAobmliYmxlICYgMHgwOCkgTENEX1BPUlQgfD0gKDEgPDwgRDcpOyBlbHNlIExDRF9QT1JUICY9IH4oMSA8PCBENyk7CiAgICBsY2RfcHVsc2VfZW5hYmxlKCk7Cn0KCnZvaWQgbGNkX2NvbW1hbmQodW5zaWduZWQgY2hhciBjbWQpIHsKICAgIExDRF9QT1JUICY9IH4oMSA8PCBSUyk7IC8vIFJTID0gMCAo0LrQvtC80LDQvdC00LApCiAgICBsY2Rfc2VuZF9uaWJibGUoY21kID4+IDQpOyAvLyDQodGC0LDRgNGI0ZYgNCDQsdGW0YLQuAogICAgbGNkX3NlbmRfbmliYmxlKGNtZCAmIDB4MEYpOyAvLyDQnNC+0LvQvtC00YjRliA0INCx0ZbRgtC4CiAgICBfZGVsYXlfbXMoMik7Cn0KCnZvaWQgbGNkX2RhdGEodW5zaWduZWQgY2hhciBkYXRhKSB7CiAgICBMQ0RfUE9SVCB8PSAoMSA8PCBSUyk7IC8vIFJTID0gMSAo0LTQsNC90ZYpCiAgICBsY2Rfc2VuZF9uaWJibGUoZGF0YSA+PiA0KTsgLy8g0KHRgtCw0YDRiNGWIDQg0LHRltGC0LgKICAgIGxjZF9zZW5kX25pYmJsZShkYXRhICYgMHgwRik7IC8vINCc0L7Qu9C+0LTRiNGWIDQg0LHRltGC0LgKICAgIF9kZWxheV9tcygyKTsKfQoKdm9pZCBsY2RfaW5pdCgpIHsKICAgIExDRF9ERFIgfD0gKDEgPDwgUlMpIHwgKDEgPDwgRSkgfCAoMSA8PCBENCkgfCAoMSA8PCBENSkgfCAoMSA8PCBENikgfCAoMSA8PCBENyk7IC8vINCd0LDQu9Cw0YjRgtGD0LLQsNC90L3RjyDQvdC10L7QsdGF0ZbQtNC90LjRhSDQv9GW0L3RltCyINGP0Log0LLQuNGF0ZbQtAogICAgX2RlbGF5X21zKDIwKTsgLy8g0JfQsNGC0YDQuNC80LrQsCDQv9GW0YHQu9GPINGD0LLRltC80LrQvdC10L3QvdGPCgogICAgbGNkX2NvbW1hbmQoMHgwMik7IC8vINCf0LXRgNC10YXRltC0INGDIDQt0LHRltGC0L3QuNC5INGA0LXQttC40LwKICAgIGxjZF9jb21tYW5kKDB4MjgpOyAvLyA0INCx0ZbRgtC4LCAyINC70ZbQvdGW0ZcsIDV4OCDRiNGA0LjRhNGCCiAgICBsY2RfY29tbWFuZCgweDBDKTsgLy8g0KPQstGW0LzQutC90YPRgtC4INC00LjRgdC/0LvQtdC5LCDQsdC10Lcg0LrRg9GA0YHQvtGA0LAKICAgIGxjZF9jb21tYW5kKDB4MDYpOyAvLyDQkNCy0YLQvtC30YHRg9CyINC60YPRgNGB0L7RgNCwINC/0YDQsNCy0L7RgNGD0YcKICAgIGxjZF9jb21tYW5kKDB4MDEpOyAvLyDQntGH0LjRgdGC0LjRgtC4INC00LjRgdC/0LvQtdC5CiAgICBfZGVsYXlfbXMoMik7Cn0KCnZvaWQgbGNkX3ByaW50KGNoYXIgKnN0cikgewogICAgd2hpbGUgKCpzdHIpIHsKICAgICAgICBsY2RfZGF0YSgqc3RyKyspOwogICAgfQp9Cgp2b2lkIGxjZF9zZXRfY3Vyc29yKHVuc2lnbmVkIGNoYXIgcm93LCB1bnNpZ25lZCBjaGFyIGNvbCkgewogICAgdW5zaWduZWQgY2hhciBhZGRyZXNzID0gKHJvdyA9PSAwKSA/IGNvbCA6ICgweDQwICsgY29sKTsKICAgIGxjZF9jb21tYW5kKDB4ODAgfCBhZGRyZXNzKTsKfQoKCi8vINCe0YHQvdC+0LLQvdCwINC/0YDQvtCz0YDQsNC80LAKaW50IG1haW4odm9pZCkgewoJX2RlbGF5X21zKDUwMCk7CiAgICBsY2RfaW5pdCgpOyAvLyDQhtC90ZbRhtGW0LDQu9GW0LfQsNGG0ZbRjyBMQ0QKCV9kZWxheV9tcygxMCk7CglsY2Rfc2V0X2N1cnNvcigwLCAwKTsgLy8g0J/QtdGA0LXRhdGW0LQg0L3QsCDQv9C+0YfQsNGC0L7QuiDQv9C10YDRiNC+0LPQviDRgNGP0LTQutCwCiAgICBsY2RfcHJpbnQoIkhlbGxvIG15IGNoYXRHUFQuIik7CiAgICBsY2Rfc2V0X2N1cnNvcigxLCAwKTsgLy8g0J/QtdGA0LXRhdGW0LQg0L3QsCDQv9C+0YfQsNGC0L7QuiDQtNGA0YPQs9C+0LPQviDRgNGP0LTQutCwCiAgICBsY2RfcHJpbnQoIlJvdyAyIFRlc3QhXz4+KiIpOyAvLyDQktC40LLQtdGB0YLQuCDRgtC10LrRgdGCINC90LAg0LTRgNGD0LPQvtC80YMg0YDRj9C00LrRgwogICAgd2hpbGUgKDEpIHsKCQlfZGVsYXlfbXMoMjAwKTsKICAgIH0KfQo=