Объявление

США начнут предпринимать меры экономического и военного характера, если Россия не прекратит нарушать Договор о ракетах средней и меньшей дальности (ДРСМД)

Решение главы Национального Объединения "Новая Россия - Великая Россия" Rommstaina: http://russianew.ru/viewtopic.php?f=120&t=4039

Ардуино: вывод текста на ЖК дисплей 1602

Правила форума
Внимание! Любой спам на нашем форуме запрещён!
Коммерческая реклама сайтов, ссылки, спам запрещены. Так же запрещены ссылки на сайты в профилях новичков.
Бан без предупреждений.

Ардуино: вывод текста на ЖК дисплей 1602

Сообщение admin » 03 дек 2016, 13:43

Все давно привыкли, что у каждого электронного устройства есть экран, с помощью которого оно дает человеку всякую полезную информацию. MP3-плеер показывает название играемого трека, пульт квадрокоптера отображает полетную телеметрию, даже стиральная машина выводит на дисплей время до конца стирки, а на смартфоне вообще размещается целый рабочий стол персонального компьютера!

Скорее всего, вашему очередному устройству тоже не помешает какой-нибудь небольшой дисплейчик Попробуем сделать простые электронные часы! А в качестве табло используем распространенный и дешевый символьный ЖК дисплей 1602. Вот прямо такой, как на картинке:

Изображение

Кроме 16х2, достаточно популярным считается символьный дисплей 20х4 (четыре строки по 20 символов), а также графический дисплей с разрешением 128х64 точек. Вот они на картинках:

Изображение

Изображение

1. Подключение символьного ЖК дисплея 1602

У дисплея 1602 есть 16 выводов. Обычно они нумеруются слева-направо, если смотреть на него так как на картинке. Иногда выводы подписываются, типа: DB0, DB1, EN и т.п. А иногда просто указывают номер вывода. В любом случае, список выводов всегда одинаковый:

1 — «GND», земля (минус питания);
2 — «Vcc», питание +5В;
3 — «VEE», контраст;
4 — «RS», выбор регистра;
5 — «R/W», направление передачи данных (запись/чтение);
6 — «EN», синхронизация;
7-14 — «DB0», «DB1″, .., «DB7″- шина данных;
15 — анод подсветки (+5В);
16 — катод подсветки (земля).

Линии VEE, RS и четыре линии данных DB4, DB5, DB6, DB7 подключаем к цифровым выводам контроллера. Линию «R/W» подключим к «земле» контроллера (так как нам потребуется только функция записи в память дисплея). Подсветку пока подключать не будем, с этим, я полагаю, вы сами легко разберетесь

Принципиальная схема подключения дисплея к Ардуино Уно

[img]http://robotclass.ru/wp-content/uploads/2014/12/lcdx1potx1_схема-1024x896.png[/img]

Внешний вид макета

Изображение

На всякий случай еще и в виде таблички:ЖК дисплей 1602:
1 2 4 6 11 12 13 14 15 16
Ардуино Уно:
GND +5V 4 5 6 7 8 9 +5V GND

2. Программируем «Hello, world!»

Для работы с ЖК дисплеями различных размеров и типов, в редакторе Arduino IDE имеется специальная библиотека LiquidCrystal. Чтобы подключить библиотеку, запишем первой строчкой нашей программы следующее выражение:

Код: выделить все
#include <LiquidCrystal.h>


Далее, нам потребуется указать какие выводы Ардуино мы использовали для подключения дисплея. Эту информацию мы укажем при инициализации модуля:

Код: выделить все
LiquidCrystal lcd(4, 5, 6, 7, 8, 9);


Здесь первые два аргумента — это выводы RS и EN, а оставшиеся четыре — линии шины данных DB4-DB7.

Далее, укажем размер дисплея с помощью команды «begin»:

Код: выделить все
lcd.begin(16, 2);


Напоминаю, в нашем дисплее имеется две строки, по 16 символов в каждой.

Наконец, для вывода текста нам понадобится простая функция «print». Вывод с помощью этой функции всем известной фразы будет выглядеть следующим образом:

Код: выделить все
lcd.print( "Hello, world!" );


Полностью программа будет выглядеть так:

Код: выделить все
#include <LiquidCrystal.h>

LiquidCrystal lcd(4, 5, 6, 7, 8, 9);

void setup(){
    lcd.begin(16, 2);
    lcd.print( "Hello, world!" );
}

void loop(){
}


Загружаем её на Ардуино Уно, и смотрим что творится на дисплее. Может быть три основных ситуации

1) На дисплее отобразится надпись «Hello, world!». Значит вы все правильно подключили, и контраст каким-то чудесным образом оказался изначально правильно настроен. Радуемся, и переходим к следующей главе.

2) На дисплее отобразится целый ряд черных прямоугольников — требуется настройка контраста! Именно для этого мы добавили в цепь потенциометр с ручкой. Крутим его от одного края, до другого, до момента пока на дисплее не появится четкая надпись.

3) Два ряда черных прямоугольников. Скорее всего, вы что-то напутали при подключении. Проверьте трижды все провода. Если не найдете ошибку — попросите кота проверить!
3. Программируем часы

Теперь когда дисплей точно работает, попробуем превратить наше нехитрое устройство в настоящие электронные часы.

Внимание! Для вывода времени нам потребуется библиотека «Time» http://www.pjrc.com/teensy/td_libs_Time.html. Если она еще не установлена, то можно скачать архив по ссылке. Подключим ее:

Код: выделить все
#include <Time.h>


Затем установим текущие дату и время с помощью функции «setTime»:
Код: выделить все
setTime( 23, 59, 59, 12, 31, 2015 );


Здесь все понятно: часы, минуты, секунды, месяц, число, год.

Для вывода даты используем кучу функции:
year() — вернет нам год;
month() — месяц;
day() - день;
hour() - час;
minute() — вернет минуту;
second() - секунду.

Теперь обратим внимание вот на какой факт. Если посчитать количество символов в типовой записи даты: «31.12.2015 23:59:59″, получим 19. А у нас всего 16! Не влазит, однако, в одну строчку.

Решить проблему можно еще одной полезной функцией — «setCursor». Эта функция устанавливает курсор в нужную позицию. Например:

Код: выделить все
lcd.setCursor(0,1);


Установит курсор в начало второй строчки. Курсор — это место символа, с которого начнется вывод текста следующей командой «print». Воспользуемся этой функцией для вывода даты в первой строчке, а времени во второй.

С выводом даты и времени теперь все ясно. Остались рутинные вещи. Например, после каждого заполнения дисплея, мы будем его чистить функцией «clear()»:
Код: выделить все
lcd.clear();


А еще нам нет смысла выводить данные на дисплей чаще чем раз в секунду, поэтому между двумя итерациями сделаем паузу в 1000 миллисекунд.

Итак, сложив все вместе, получим такую программу:

Код: выделить все
#include <Time.h>
#include <LiquidCrystal.h>

LiquidCrystal lcd(4, 5, 6, 7, 8, 9);

void setup(){
    lcd.begin(16, 2);
    setTime(7,0,0,1,10,2015); // 7 утра, десятого января 2015 года
}

void loop(){
    lcd.clear();
    lcd.print( day() );
    lcd.print( "." );
    lcd.print( month() );
    lcd.print( "." );
    lcd.print( year() );

    lcd.setCursor(0, 1);
    lcd.print( hour() );
    lcd.print( ":" );
    lcd.print( minute() );
    lcd.print( ":" );
    lcd.print( second() );

    delay(1000);
}


Загружаем скетч на Ардуино Уно, и наблюдаем за ходом часиков! Для того чтобы закрепить полученные знания, рекомендую прокачать наши часы до полноценного будильника. Всего-то на всего потребуется добавить пару кнопок и зуммер
admin
Администратор
 
Сообщений: 77
Зарегистрирован: 27 ноя 2016, 18:21
ТегиАрдуино: вывод текста на ЖК дисплей 1602

Вернуться в Для новичков. Азы.

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

cron
/