Работа с дисплеем HD44780 на AVR.Запись своих символов.

Для работы  с данным дисплеем на контроллере HD44780 на AVR требуется библиотека, будем использовать библиотеку для того, чтобы сэкономить время и не изобретать велосипед.
Скачать можно с нашего сайта, по ссылке ниже:
HD44780_AVR_Lib

Символьный ЖК-Дисплей 1602 и его аналоги на контроллере HD44780 соединяется примерно по такой схеме, (на примере ATMega8):

Соединение управляющих контактов дисплея зависит от кода!

Необходимо распаковать архив HD44780_AVR_Lib  , где имеются три файла – hd44780.c, hd44780.h и hd44780_settings.h

В программе Atmel Studio в правой части кликнуть на имя проекта правой кнопкой мыши, выбрать Add – Existing Item, найти и выбрать все три файла, нажать OK.

hd44780.c – основная библиотека

hd44780.h – файл для include, включения в проект библиотеки

hd44780_settings.h – через этот файл изменяются настройки под конкретный проект

 

Настройки в файле hd44780_settings.h:

#define F_CPU 8000000 – выбор частоты процессора, в герцах

#define LCD_BITS 4  – выбор режима – 4х битный или 8-ми битный, будем использовать 4х битный

#define RW_LINE_IMPLEMENTED 0 – следует ли применять сигнал чтения, иначе он(вывод дисплея)  должен быть привязан к земле, 1 – да, 0 – соответственно нет

 

Выводы RS и RW настраиваются в:

#define LCD_RS_PORT PORTB –  Порт(буква)
#define LCD_RS_PIN 0 – Номер порта

если включено чтение дисплея:

#define LCD_RW_PORT PORTB 
#define LCD_RW_PIN 1 

Также необходимо установить данные настройки, если подключается один дисплей:
#define LCD_DISPLAY_LINES 2 – Количество строк дисплея
#define LCD_E_PORT PORTB  – Порт  E
#define LCD_E_PIN 2 – Номер порта  E

 

Настройки портов вывода на пины DB4-DB7 дисплея в режиме 4-ре бита:

#define LCD_DB4_PORT PORTB  
#define LCD_DB4_PIN 4
#define LCD_DB5_PORT PORTB
#define LCD_DB5_PIN 5
#define LCD_DB6_PORT PORTB
#define LCD_DB6_PIN 6
#define LCD_DB7_PORT PORTB
#define LCD_DB7_PIN 7

В этом примере оставим все настройки по умолчанию.

Для проверки нашего кода используем Proteus, подробнее про него здесь: Эмуляция AVR в Proteus, микроконтроллеры в Proteus

Соединяем ЖК-Дисплей на контроллере HD44780(в Протеус дисплей называется – LM016L) и микроконтроллер ATMega8 по такой схеме(в соответствии с настройками в hd44780_settings.h):

 

Дальше пишем код.

В первую очередь надо подключить библиотеку, написав #include “hd44780.h”:

 

/*
* HD44780_Simple.c
*
* Created: 16.02.2018 11:53:32
* Author :LampCORE.ru
*/
 
#include <avr/io.h>
#include "hd44780.h"
 
int main(void)
{
 
lcd_init (); //Инициализация дисплея
 
lcd_clrscr (); //Очистка дисплея
 
lcd_puts ("Hello World!"); //вывести на дисплей строку Hello, World
 
lcd_putc('A'); //вывести символ
 
while (1)
{
 
}
 
}

Выключение дисплея:
lcd_command(_BV(LCD_DISPLAYMODE));
Включить дисплей:
lcd_command(_BV(LCD_DISPLAYMODE) | _BV(LCD_DISPLAYMODE_ON));
Включить дисплей с отображаемым подстрочным курсором:
lcd_command(_BV(LCD_DISPLAYMODE) | _BV(LCD_DISPLAYMODE_ON) | _BV(LCD_DISPLAYMODE_CURSOR));
Включить дисплей с отображаемым мигающим курсором:
lcd_command (_BV (LCD_DISPLAYMODE) | _BV (LCD_DISPLAYMODE_ON) | _BV (LCD_DISPLAYMODE_BLINK));
Переместить курсор влево:
lcd_command(_BV(LCD_MOVE));
Переместить курсор вправо:
lcd_command(_BV(LCD_MOVE) | _BV(LCD_MOVE_RIGHT));

Переместить курсор в определенное место:
lcd_goto (0x40);
0x40 – Часто является началом второй строки, другие ЖК-дисплеи могут иметь иной адрес


Обратите внимание, если дисплей не поддерживает кириллицу вместо нее напишутся иероглифы(на китайских дисплеях) или другие символы!

Для того, чтобы писать кириллицей , русскими буквами, можно использовать создание собственного символа, можно создать до 8 своих символов.Также это можно использовать для создания иконок и картинок.

Символ создается размером 5 на 8 точек.5 – Ширина и 8 – Длина.Посредством нуля и единицы.

Чтобы создать пользовательский символ необходимо написать:

lcd_command(_BV(LCD_CGRAM)+0*8);//выбрать ячейку 0 в ЖК-дисплее

//карта символа(сам символ)
lcd_putc(0b00000);
lcd_putc(0b00000);
lcd_putc(0b01010);
lcd_putc(0b00000);
lcd_putc(0b10001);
lcd_putc(0b01110);
lcd_putc(0b00000);
lcd_putc(0b00000);

lcd_goto(0);//необходимо выйти из CGRAM

lcd_putc(0);//отобразить пользовательский символ из ячейки 0

Полный код программы(отобразится созданный смайл, изображение выше):

 

/*
* HD44780_Simple.c
*
* Created: 16.02.2018 11:53:32
* Author : LampCORE.ru
*/
 
#include <avr/io.h>
#include "hd44780.h"
 
int main(void)
{
 
lcd_init ();
lcd_clrscr();
 
lcd_command(_BV(LCD_CGRAM)+0*8);
lcd_putc(0b00000);
lcd_putc(0b00000);
lcd_putc(0b01010);
lcd_putc(0b00000);
lcd_putc(0b10001);
lcd_putc(0b01110);
lcd_putc(0b00000);
lcd_putc(0b00000);
 
lcd_goto(0);
 
lcd_putc(0);
 
while (1)
{
 
}
 
}

 

Готовые символы, иконки и картинки :

Батарея :

lcd_putc(0b01110);
lcd_putc(0b11011);
lcd_putc(0b10001);
lcd_putc(0b10001);
lcd_putc(0b10001);
lcd_putc(0b10001);
lcd_putc(0b10001);
lcd_putc(0b11111);

 

Значок Ома:


lcd_putc(0b00000);
lcd_putc(0b00000);
lcd_putc(0b01110);
lcd_putc(0b10001);
lcd_putc(0b10001);
lcd_putc(0b01010);
lcd_putc(0b11011);
lcd_putc(0b00000);

 

Сердечко:

lcd_putc(0b00000);
lcd_putc(0b00000);
lcd_putc(0b01010);
lcd_putc(0b10101);
lcd_putc(0b10001);
lcd_putc(0b01010);
lcd_putc(0b00100);
lcd_putc(0b00000);

 

Сердечко 2:


lcd_putc(0b00000);
lcd_putc(0b01010);
lcd_putc(0b11111);
lcd_putc(0b11111);
lcd_putc(0b01110);
lcd_putc(0b00100);
lcd_putc(0b00000);
lcd_putc(0b00000);

 

Нота:

lcd_putc(0b00001);
lcd_putc(0b00011);
lcd_putc(0b00101);
lcd_putc(0b01001);
lcd_putc(0b01001);
lcd_putc(0b01011);
lcd_putc(0b11011);
lcd_putc(0b11000);

 

Динамик:


lcd_putc(0b00001);
lcd_putc(0b00011);
lcd_putc(0b00111);
lcd_putc(0b11111);
lcd_putc(0b11111);
lcd_putc(0b00111);
lcd_putc(0b00011);
lcd_putc(0b00001);

 

Вилка:


lcd_putc(0b01010);
lcd_putc(0b01010);
lcd_putc(0b11111);
lcd_putc(0b10001);
lcd_putc(0b10001);
lcd_putc(0b01110);
lcd_putc(0b00100);
lcd_putc(0b00100);

 

Колокольчик:

lcd_putc(0b00100);
lcd_putc(0b01110);
lcd_putc(0b01110);
lcd_putc(0b01110);
lcd_putc(0b11111);
lcd_putc(0b00000);
lcd_putc(0b00100);
lcd_putc(0b00000);

 

Колокольчик 2:

lcd_putc(0b00100);
lcd_putc(0b01110);
lcd_putc(0b01110);
lcd_putc(0b01110);
lcd_putc(0b01110);
lcd_putc(0b11111);
lcd_putc(0b00100);
lcd_putc(0b00000);

 

Колокольчик 3:

lcd_putc(0b11011);
lcd_putc(0b10001);
lcd_putc(0b10001);
lcd_putc(0b10001);
lcd_putc(0b10001);
lcd_putc(0b00000);
lcd_putc(0b11011);
lcd_putc(0b11111);

 

Песочные часы:


lcd_putc(0b00000);
lcd_putc(0b11111);
lcd_putc(0b10001);
lcd_putc(0b01010);
lcd_putc(0b00100);
lcd_putc(0b01010);
lcd_putc(0b10101);
lcd_putc(0b11111);

 

Замок:


lcd_putc(0b01110);
lcd_putc(0b10001);
lcd_putc(0b10001);
lcd_putc(0b11111);
lcd_putc(0b11011);
lcd_putc(0b11011);
lcd_putc(0b11111);
lcd_putc(0b00000);

 


lcd_putc(0b01110);
lcd_putc(0b10000);
lcd_putc(0b10000);
lcd_putc(0b11111);
lcd_putc(0b11011);
lcd_putc(0b11011);
lcd_putc(0b11111);
lcd_putc(0b00000);

 

Человек:


lcd_putc(0b01110);
lcd_putc(0b01110);
lcd_putc(0b00100);
lcd_putc(0b01110);
lcd_putc(0b10101);
lcd_putc(0b00100);
lcd_putc(0b01010);
lcd_putc(0b01010);

 

Человек 2:


lcd_putc(0b00100);
lcd_putc(0b01110);
lcd_putc(0b11111);
lcd_putc(0b11111);
lcd_putc(0b01110);
lcd_putc(0b01110);
lcd_putc(0b01010);
lcd_putc(0b01010);
 

Смайлы:


lcd_putc(0b00000);
lcd_putc(0b00000);
lcd_putc(0b01010);
lcd_putc(0b00000);
lcd_putc(0b10001);
lcd_putc(0b01110);
lcd_putc(0b00000);
lcd_putc(0b00000);

 


lcd_putc(0b00000);
lcd_putc(0b01010);
lcd_putc(0b00000);
lcd_putc(0b00100);
lcd_putc(0b10001);
lcd_putc(0b01110);
lcd_putc(0b00000);
lcd_putc(0b00000);

 


lcd_putc(0b00000);
lcd_putc(0b01010);
lcd_putc(0b00100);
lcd_putc(0b00100);
lcd_putc(0b10001);
lcd_putc(0b01110);
lcd_putc(0b00000);
lcd_putc(0b00000);


lcd_putc(0b00000);
lcd_putc(0b00000);
lcd_putc(0b01010);
lcd_putc(0b00000);
lcd_putc(0b11111);
lcd_putc(0b10001);
lcd_putc(0b01110);
lcd_putc(0b00000);

 


lcd_putc(0b00000);
lcd_putc(0b00000);
lcd_putc(0b01010);
lcd_putc(0b00000);
lcd_putc(0b01110);
lcd_putc(0b10001);
lcd_putc(0b00000);
lcd_putc(0b00000);

 


lcd_putc(0b00000);
lcd_putc(0b01010);
lcd_putc(0b00000);
lcd_putc(0b00100);
lcd_putc(0b00000);
lcd_putc(0b01110);
lcd_putc(0b10001);
lcd_putc(0b00000);

 


lcd_putc(0b00000);
lcd_putc(0b00000);
lcd_putc(0b01010);
lcd_putc(0b00000);
lcd_putc(0b11111);
lcd_putc(0b00110);
lcd_putc(0b00000);
lcd_putc(0b00000);

 


lcd_putc(0b00000);
lcd_putc(0b00000);
lcd_putc(0b01010);
lcd_putc(0b00000);
lcd_putc(0b11111);
lcd_putc(0b10001);
lcd_putc(0b11111);
lcd_putc(0b00000);

 


lcd_putc(0b00000);
lcd_putc(0b01010);
lcd_putc(0b01010);
lcd_putc(0b01010);
lcd_putc(0b00000);
lcd_putc(0b10001);
lcd_putc(0b01110);
lcd_putc(0b00000);

 

 


lcd_putc(0b01010);
lcd_putc(0b00000);
lcd_putc(0b00100);
lcd_putc(0b00000);
lcd_putc(0b01110);
lcd_putc(0b10001);
lcd_putc(0b10001);
lcd_putc(0b01110);

 


lcd_putc(0b00000);
lcd_putc(0b00000);
lcd_putc(0b01010);
lcd_putc(0b00000);
lcd_putc(0b00100);
lcd_putc(0b00000);
lcd_putc(0b11111);
lcd_putc(0b00000);

 


lcd_putc(0b00000);
lcd_putc(0b10001);
lcd_putc(0b01010);
lcd_putc(0b10001);
lcd_putc(0b00100);
lcd_putc(0b00000);
lcd_putc(0b01110);
lcd_putc(0b10001);

 


lcd_putc(0b00000);
lcd_putc(0b10001);
lcd_putc(0b01010);
lcd_putc(0b10001);
lcd_putc(0b00100);
lcd_putc(0b01110);
lcd_putc(0b10001);
lcd_putc(0b00000);

 


lcd_putc(0b00000);
lcd_putc(0b01010);
lcd_putc(0b01010);
lcd_putc(0b00000);
lcd_putc(0b10001);
lcd_putc(0b01110);
lcd_putc(0b00110);
lcd_putc(0b00000);

 

 


lcd_putc(0b11111);
lcd_putc(0b11111);
lcd_putc(0b10101);
lcd_putc(0b11011);
lcd_putc(0b11011);
lcd_putc(0b11111);
lcd_putc(0b10001);
lcd_putc(0b11111);
Стрелки:


lcd_putc(0b00100);
lcd_putc(0b00100);
lcd_putc(0b01110);
lcd_putc(0b11111);
lcd_putc(0b00100);
lcd_putc(0b00100);
lcd_putc(0b00100);
lcd_putc(0b00100);

 


lcd_putc(0b00100);
lcd_putc(0b00100);
lcd_putc(0b00100);
lcd_putc(0b00100);
lcd_putc(0b11111);
lcd_putc(0b01110);
lcd_putc(0b00100);
lcd_putc(0b00100);

 


lcd_putc(0b00000);
lcd_putc(0b00100);
lcd_putc(0b00110);
lcd_putc(0b11111);
lcd_putc(0b00110);
lcd_putc(0b00100);
lcd_putc(0b00000);
lcd_putc(0b00000);

 


lcd_putc(0b00000);
lcd_putc(0b00100);
lcd_putc(0b01100);
lcd_putc(0b11111);
lcd_putc(0b01100);
lcd_putc(0b00100);
lcd_putc(0b00000);
lcd_putc(0b00000);

 


lcd_putc(0b00000);
lcd_putc(0b00100);
lcd_putc(0b00010);
lcd_putc(0b11111);
lcd_putc(0b00010);
lcd_putc(0b00100);
lcd_putc(0b00000);
lcd_putc(0b00000);

 


lcd_putc(0b00000);
lcd_putc(0b00100);
lcd_putc(0b01000);
lcd_putc(0b11111);
lcd_putc(0b01000);
lcd_putc(0b00100);
lcd_putc(0b00000);
lcd_putc(0b00000);

 

 


Изображения, картинки из символов и букв:

d(^o^)b