fork download
  1. #define F_CPU 8000000UL
  2. #include <avr/io.h>
  3. #include <util/delay.h>
  4.  
  5.  
  6. // Макроси для роботи з LCD
  7. #define LCD_PORT PORTD
  8. #define LCD_DDR DDRD
  9. #define RS PD0
  10. #define E PD2
  11. #define D4 PD3
  12. #define D5 PD4
  13. #define D6 PD6
  14. #define D7 PD7
  15.  
  16.  
  17. // Функції
  18. void lcd_pulse_enable() {
  19. LCD_PORT |= (1 << E); // Підняти E
  20. _delay_us(1);
  21. LCD_PORT &= ~(1 << E); // Опустити E
  22. _delay_us(100);
  23. }
  24.  
  25. void lcd_send_nibble(unsigned char nibble) {
  26. if (nibble & 0x01) LCD_PORT |= (1 << D4); else LCD_PORT &= ~(1 << D4);
  27. if (nibble & 0x02) LCD_PORT |= (1 << D5); else LCD_PORT &= ~(1 << D5);
  28. if (nibble & 0x04) LCD_PORT |= (1 << D6); else LCD_PORT &= ~(1 << D6);
  29. if (nibble & 0x08) LCD_PORT |= (1 << D7); else LCD_PORT &= ~(1 << D7);
  30. lcd_pulse_enable();
  31. }
  32.  
  33. void lcd_command(unsigned char cmd) {
  34. LCD_PORT &= ~(1 << RS); // RS = 0 (команда)
  35. lcd_send_nibble(cmd >> 4); // Старші 4 біти
  36. lcd_send_nibble(cmd & 0x0F); // Молодші 4 біти
  37. _delay_ms(2);
  38. }
  39.  
  40. void lcd_data(unsigned char data) {
  41. LCD_PORT |= (1 << RS); // RS = 1 (дані)
  42. lcd_send_nibble(data >> 4); // Старші 4 біти
  43. lcd_send_nibble(data & 0x0F); // Молодші 4 біти
  44. _delay_ms(2);
  45. }
  46.  
  47. void lcd_init() {
  48. LCD_DDR |= (1 << RS) | (1 << E) | (1 << D4) | (1 << D5) | (1 << D6) | (1 << D7); // Налаштування необхідних пінів як вихід
  49. _delay_ms(20); // Затримка після увімкнення
  50.  
  51. lcd_command(0x02); // Перехід у 4-бітний режим
  52. lcd_command(0x28); // 4 біти, 2 лінії, 5x8 шрифт
  53. lcd_command(0x0C); // Увімкнути дисплей, без курсора
  54. lcd_command(0x06); // Автозсув курсора праворуч
  55. lcd_command(0x01); // Очистити дисплей
  56. _delay_ms(2);
  57. }
  58.  
  59. void lcd_print(char *str) {
  60. while (*str) {
  61. lcd_data(*str++);
  62. }
  63. }
  64.  
  65. void lcd_set_cursor(unsigned char row, unsigned char col) {
  66. unsigned char address = (row == 0) ? col : (0x40 + col);
  67. lcd_command(0x80 | address);
  68. }
  69.  
  70.  
  71. // Основна програма
  72. int main(void) {
  73. _delay_ms(500);
  74. lcd_init(); // Ініціалізація LCD
  75. _delay_ms(10);
  76. lcd_set_cursor(0, 0); // Перехід на початок першого рядка
  77. lcd_print("Hello my chatGPT.");
  78. lcd_set_cursor(1, 0); // Перехід на початок другого рядка
  79. lcd_print("Row 2 Test!_>>*"); // Вивести текст на другому рядку
  80. while (1) {
  81. _delay_ms(200);
  82. }
  83. }
  84.  
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
prog.c:2:10: fatal error: avr/io.h: No such file or directory
 #include <avr/io.h>
          ^~~~~~~~~~
compilation terminated.
stdout
Standard output is empty