Суббота, 20.04.2024, 08:39 Приветствую Вас Гость

Автозапуск за 1500р. на ЛЮБОЙ сигнализации?! -> at13.ru

Главная | Регистрация | Вход | RSS

Каталог статей


Подключение LCD1602 к микроконтроллеру в Bascom AVR

 

ЖКИ индикаторы имеют встроенную таблицу символов, а значит, вам не придется рисовать каждый знак самому.Большинство дисплеев имеют встроенный контроллер Hitachi HD44780 или совместимый (который стал стандартом де-факто в промышленности). Если вы сомневаетесь, что ваш ЖКИ имеет такой контроллер, то в 95% случаев вы ошибаетесь. Так что если в ваших лапках находится непонятное устройство, присмотритесь к маркировке платы/чипов. Если там есть цифры 44780, то это то, что нужно.

 

В Bascom есть настройки по умолчанию для подключения ЖКИ. Давайте посмотрим их. Нажмем Options / Compiler / LCD:

 

 

К счастью, там уже предустановлен размер индикатора 16*2. Это самый распространенный тип, который может отображать две строки текста по 16 символов в каждой.
ЖКИ на базе HD44780 имеют 8 линий данных, но допускается управление в "экономичном" режиме, используя только 4 старших разряда шины. Это позволяет сэкономить лапки контроллера. Такой четырехбитный режим уже установлен по умолчанию. Естественно, в этом режиме байт передается за два прохода. Поэтому если вам нужно управлять дисплеем максимально быстро (что бывает исключительно редко), вам нужно использовать режим управления по шине данных, 8 бит.

Data mode - режим передачи данных - по умолчанию установлен в Pin. Это значит, что вы можете назначить любые лапки контроллера для управления ЖКИ. Таким образом, вы можете максимально удобно настроить компилятор, иногда это необходимо из-за схемотехнических ограничений. Режим Bus - шина - организует классическое подключение по топологии шины данных, когда много устройств подключены к одной шине, и нужно посылать адрес устройства, чтобы отозвалось только нужное. В этом случае вам нужно выставить значения LCD-address и RS-address.

При подключении Pin вы определяете, какие выводы ЖКИ куда подключены. Пин Enable используется, чтобы ЖКИ знал направление данных (запись/чтение). Пока на выводе Enable низкий уровень, ЖКИ не реагирует на команды на линиях данных, и их можно использовать для других целей. Информация с линий данных считывается, когда на выводе RS находится низкий уровень. Этот вывод используется, чтобы ЖКИ знал, что передается по линиям данных - символ или команда.

У ЖКИ есть еще вывод R/W, используя который, можно сообщить дисплею, собираемся ли мы считать с него данные, или записать их в него. Bascom предполагает, что на этом выводе всегда низкий уровень, так что индикатор всегда в режиме приема данных. Однако, чтобы проверить, готов ли он принимать данные, нужно считать флаг занятости "Busy". Для этого нужно было бы отправить команду проверки, переключить индикатор в режим передачи данных и считать состояние флага. Но поскольку мы не можем этого сделать, Bascom выжидает некое количество циклов после каждой передачи данных. Их количество определяется тактовой частотой процессора. Это еще одна причина, по которой нужно грамотно указывать частоту установленного кварцевого резонатора с помощью директивы $crystal.

 

Как и в случае с типом контроллера и частотой кварца, все настройки портов для ЖКИ также можно делать прямо в коде:

 

Config lcd = 16*2
Config lcdpin = PIN, DB4 = PORTB.1,DB5=PORTB.2,DB6=PORTB.3,DB7=PORTB.4,E=PORTB.5,RS=PORTB.6
Config lcdmode = PORT

 

Дисплей подключен к микроконтроллеру по следующей схеме:

У стандартного знакосинтезирующего индикатора 14 выводов. Вывод 1 - земля. Вывод 5 - R/W - также подключен к земле. Вывод 2 - напряжение питания, подключен к +5 вольт. Некоторые ЖКИ не будут работать с источниками питания, у которых выходное напряжение поднимается медленно. Это обычно описывается в даташите. Вывод 3 - регулировка контрастности. По идее, его достаточно подключить просто к земле. Но в большинстве случаев дисплей просто станет темным и будет невозможным разобрать хоть что-то. Поэтому подключать вывод регулировки нужно через резистор до 10 кОм. Мне, как правило, хватало несколько сот ом.
Выводы 4, 6, 11-14 подключены к контроллеру согласно схеме. Выводы 7-10 не подключены.


Если вам достался ЖКИ с подсветкой, то вначале контактной гребенки будут выводы 15 и 16 для подключения её питания. Питать её можно от того же источника, что и сам ЖКИ, но иногда требуется ограничительный резисто в несколько сот ом. Иногда выводы подсветки не выведены на общую шину, тогда они находятся непосредственно справа или слева от ЖК матрицы.

 

Напишем простую программу для работы с ЖКИ:

$regfile = "2313def.dat"
$crystal = 4000000
$sim

Dim Count as Integer
Count = 0

Lcd "Hello!"
Wait 1

End

Компилируем и проверяем в протеусе, должна высветится надпись "Hello!".

 

Надо сказать программу можно симулировать прямо в программе BASCOM AVR. Щелкнем на первой ячейке в таблице переменных и введем "Count". Затем щелкнем на кнопке "LCD", чтобы посмотреть эмуляцию аппаратной обвязки. Щелкнем на "Step into Code" (F8), чтобы перемещаться по строкам. После строки "Lcd "Hello! " ; Count", нажмем кнопку "Run" (F5) и на экране появится следующее:

 

 

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

Мы можем вывести какую нибудь на русском языке воспользовавшись конвертером шрифтов, код программы следующий:

 

$regfile = "2313def.dat"
$crystal = 4000000
$sim

Dim Count as Integer
Count = 0

Lcd "01.07.2012"
Wait 1
Lowerline
Lcd "coІepёcxeјy.pд"

End


C помощью команды Lowerline переходим на нижнюю строку, скрин отображения информации на дисплее ниже;

 

Управление курсором:

В Bascom есть несколько команд для управления курсором. Вы можете включать/выключать его, а также использовать мигание.

 

Cursor on, blink
Cursor on, noblink
Cursor off
Также можно указать точное положение курсора:
Locate linenumber, characternumber
Locate 1, 6
Lcd "Count"

 

Этот код переместит курсор на шестое знакоместо первой строки. Слово "Count" будет выведено начиная с этой позиции.Команда Home поместит курсор в начальное положение - первый символ первой строки, т.е. Home делает то же, что и Locate 1, 1. Home upper делает то же самое. Но вот Home lower делает то же, что и Locate 2, 1, т.е. помещает курсор в начало самой нижней строки (второй в случае с двухстрочным дисплеем). Shiftcursor left/right будет двигать курсор влево или вправо на одно знакоместо относительно текущего положения. Shiftlcs left/right будет аналогично сдвигать всё содержимое на дисплее.

 

Рассмотрим это на примере (в симуляторе, если хотите опробовать на настоящем железе, уберите директиву $sim):

 

$regfile = "2313def.dat"
$crystal = 4000000
$sim

Dim Pos As Byte

Do

Cls
Upperline
Lcd "012345678901john"
Lowerline
Lcd "0123456789012ike"
For Pos = 0 To 16 Step 1
  Waitms 500
  Shiftlcd Left
Next Pos

Loop
End

Когда вы запустите эту программу, вы увидите, что текст на обеих линиях сдвигается влево. Было бы замечательно, если бы Bascom умел еще и сдвигать текст вверх/вниз со строки на строку.

 

Статья по теме: Выводим текст на LCD1602 

Скачать файлы проекта.

 

Категория: BASCOM AVR | Добавил: Адвансед6476 (31.01.2015)
Просмотров: 5592 | Комментарии: 1 | Рейтинг: 5.0/1
Всего комментариев: 1
1 Адвансед6476  
0
еще вариант вывода текста на ЖКИ дисплей HD44780

' Тип МК - ATMega48
$regfile = "m48def.dat"
' Конфигурация ЖКД
Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5 , E = Portb.1 , Rs = Portb.0
Config Lcd = 16 * 2
' Очистка ЖКД
Cls
' Переводим курсор в положение X=1, Y=1
Locate 1 , 1
' Печатаем текст
Lcd "Hello, world !!!"

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Категории раздела
Источники питания и приборы
Охрана и контроль доступа
Измерительные устройства
Часы, таймеры, счетчики
Световые эффекты
Защита и контроль
Для начинающих
Разное
BASCOM AVR
Информация по МК, FAQ
Поиск
Вход на сайт
Наш опрос
Какой у вас оператор сотовой связи
Всего ответов: 189
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Друзья сайта