Начальная

Windows Commander

Far
WinNavigator
Frigate
Norton Commander
WinNC
Dos Navigator
Servant Salamander
Turbo Browser

Winamp, Skins, Plugins
Необходимые Утилиты
Текстовые редакторы
Юмор

File managers and best utilites

Как подключить ЖКИ на HD44780. Эмулятор hd44780


Как подключить ЖКИ на HD44780

В этой статье я хочу рассказать и показать Как подключить и использовать символьный жидко-кристаллический индикатор совместно с контроллером STM32F103.

Hello_world

На днях у меня появился такой вот индикатор:

QC2004AQC2004A

 

Это символьный жидко-кристаллический индикатор QC2004A на 4 строки и 20 символов в строке, о чем явно свидетельствует модель. К тому же индикатор имеет подсветку и является контрастным, т.е. символы светятся белым, а фон синий.

Управляется матрица установленным на плате контроллером KS0066, это аналог HD44780. Плата имеет 16 контактов: 2 для питания индикатора (1 и 2 пин), 1 для выставления контрастности (3 пин), 3 для управления шиной данных и режимом контроллера (4 – RS – данные или инструкции; 5 – R/W – запись или чтение с ЖКИ; 6 – E – отправка данных по шине), 8 контактов шины данных (т.е. шина восьми битная) и 2 контакта для питания подсветки.

Размеры и немного больше информации по ЖКИ вот тут.

Стоит сказать о шине данных и подключении. Если вам требуется только выводить информацию на индикатор, то потребуется подключить питание, подключить RS и E, при это пин R/W запаять на минус, подключить 4 (D4…D7) или 8 (D0…D7) контактов данных, т.е. использовать 8ми или 4х битную шину. Хочется отметить, что контроллер позволяет передавать данные по четырем проводам, вместо восьми, хотя данные все равно передаются восьми битные, только тетрадами (по 4 бита 2 раза).

R/W пин используется для того, чтобы выбрать направление передачи данных в ЖКИ или из ЖКИ. Это может быть нужно, чтобы считывать данные с индикатора, положение курсора и т.п. Используется крайне редко.

Теперь стоит подключить индикатор к STM32F103, для этого я использовать буду отладочную плату и подключаем следующим образом:

  • 1 пин ЖКИ к GND
  • 2 пин ЖКИ к +5V
  • 3 пин ЖКИ к GND
  • 4 пин ЖКИ к PA0
  • 5 пин ЖКИ к GND
  • 6 пин ЖКИ к PA1
  • 11 пин ЖКИ к PA2
  • 12 пин ЖКИ к PA3
  • 13 пин ЖКИ к PA4
  • 14 пин ЖКИ к PA5
  • 15 пин ЖКИ к +5V
  • 16 пин ЖКИ к GND

P1100832

Все функции по работе с ЖКИ для STM32 вынесены в отдельную библиотеку, т.е. ее просто необходимо подключить будет настроить и заголовочном файле (*.h) порты и пины и можно использовать. Настройка пинов в hd44780_driver.h:

#define LCD_PORT GPIOA

#define LCD_CD 0  // RS

#define LCD_EN 1  // E

#define LCD_DB4 2

#define LCD_DB5 3

#define LCD_DB6 4

#define LCD_DB7 5

После этого добавляем библиотеку в проект:

#include "hd44780_driver\hd44780_driver.h"

И можно пользоваться. В конце статьи прикреплен архив проектом в IDE CooCox.

Кратко рассмотрим функции:

// Инициализирует индикатор, запускаем один раз перед началом работы

void lcd_init();

// Отправляет байт как команду (COMMAND) или как данные (DATA)

void lcd_send(uint8_t byte, dat_or_comm dc);

// Устанавливает режим обмена данными по 4м проводам

void lcd_set_4bit_mode(void);

// Устанавливает состояние индикатора: вкл/выкл ЖКИ,  вкл/выкл курсор, вкл/выкл мигание курсора

void lcd_set_state(lcd_state state, cursor_state cur_state, cursor_mode cur_mode);

// Очищает ЖКИ

void lcd_clear(void);

// Выводит строку

void lcd_out(char * txt);

// Задает позицию курсора. С того места будет вывод на ЖКИ

void lcd_set_xy(uint8_t x, uint8_t y);

// Задает пользовательский символ

void lcd_set_user_char(uint8_t char_num, uint8_t * char_data);

Немного подробнее теперь.  Функция

void lcd_set_state(lcd_state state, cursor_state cur_state, cursor_mode cur_mode);

  • lcd_state: LCD_ENABLE или LCD_DISABLE
  • cursor_state: CURSOR_ENABLE или CURSOR_DISABLE
  • cursor_mode: BLINK (мигать) или NO_BLINK (не мигать)

void lcd_set_xy(uint8_t x, uint8_t y);

X – это номер символа в строке, счет от 0. Y – номер строки, счет от 0.

Применение пользовательского символа бывает полезно, если нет кириллицы, как в моем случае (с Китая индикатор), либо если нужен спец символ типа значка батарейки и т.п.

uint8_t user_char[8];

user_char[0]=0b01110;

user_char[1]=0b10001;

user_char[2]=0b10001;

user_char[3]=0b10001;

user_char[4]=0b11111;

user_char[5]=0b11111;

user_char[6]=0b11111;

user_char[7]=0b00000;

// Первый параметр - номер символа в памяти ЖКИ, второй параметр - массив с символом

lcd_set_user_char(0, user_char);

 

// Применение:

lcd_send(0, DATA);

Стоит отметить, что символ записывается в память ЖКИ не навсегда, а только пока питание есть. Т.е. после выключения этого символа уже не будет в памяти. Поэтому все свои символы пишем в ЖКИ при инициализации, а потом основная работа уже.

Вот собственно и все, что может пригодиться для использования индикаторов на HD44780. Стоит лишь смотреть в даташитах на адресацию памяти ЖКИ, чтобы подправить функцию перехода lcd_set_xy. И конечно, библиотеку не составит труда переделать под другие семейства STM32.

Прикрепления:

  1. Проект в CooCox
  2. Даташит на QC2004A
  3. Полезная статья

Вопросы пишите в комментарии.

www.how.net.ua

Работаем с ЖКИ на контроллерах ks0066 и hd44780 — Меандр — занимательная электроника

Читать все новости ➔

Сегодня все чаще для отображения простой символьной информации используют символьные жидкокристаллические индикаторы ЖКИ. О том, как с ними работать мы и поговорим. В этой части статьи, мы детально рассмотрим символьные ЖКИ на базе контроллера HITACHI HD44780 (или совместимым с ним SAMSUNG KS0066). Статья - попытка систематизировать найденную мной информацию при работе с этими ЖКИ.

СОДЕРЖАНИЕ:1. Символьный ЖКИ с контроллером HD44780 (KS0066). Интерфейс.2. Набор команд контроллера HD44780.3. Инициализация ЖКИ.

Символьный ЖКИ с контроллером HD44780 (KS0066). Интерфейс

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

http://cxem.net Для управления этой матрицей и вывода собственно символов используется специальный контроллер.

HD44780 (и совместимый с ним KS0066) – есть де-факто стандартом на контроллеры монохромных жидкокристаллических знакосинтезирующих дисплеев с параллельным 4-х или 8-битным интерфейсом. На базе этого контроллера выпускается огромное количество моделей с различным конструктивном и разрешением, начиная с 8x1 (восемь символов в одной строке), и заканчивая 40x4 (содержащих два независимых управляющих чипа). Типичная частота работы контроллера – 270 кГц.

Контролер ЖКИ оперирует 3-мя блоками памяти:

1. Для вывода символа контроллер использует память DDRAM (Display Data RAM), где хранятся ASCII-коды символов, которые мы хотим видеть на ЖКИ. Под нее отведено 80 ячеек памяти. Понятно, что на ЖКИ мы увидим лишь часть символов, которые находятся в DDRAM - если наш ЖКИ 1 или 2-строчный и отображает 8 символов в строке, то так:

2Рабочую область дисплея, как видно, можно смещать по ячейкам DDRAM (получается эффект бегущей строки).

2. Шаблоны самих символов контроллер берет из CGROM (Character Generator ROM) – памяти знакогенератора. Таблицу символов можно посмотреть в спецификации на HD44780.

3. Для хранения пользовательских символов (их шаблонов) предусмотрена память CGRAM (Character Generator RAM).

Также, контроллер в зависимости от некоторых условий распределяет пришедшие в него данные в регистр инструкций или регистр данных.

Типичный 14-пиновый интерфейс контроллеров HD44780:

1 Земля, общий провод, GND
2 Напряжение питания, Vcc (+5V)
3 Настройка контрастности (Vo)
4 Выбор регистра (R/S для HD44780, A0 для KS0066)
5 Чтение/запись (R/W)
6 Строб по спаду Е (Enable)
7 Bit 0 (младший для 8мибитного интерфейса)
Линия данных
8 DB 1
9 DB 2
10 DB 3
11 DB 4 (младший для 4х битного интерфейса)
12 DB 5
13 DB 6
14 DB 7 (старший для 8-х (4х) битного интерфейса)
Для дисплея с подсветкой
15 Питание подсветки для дисплеев с подсветкой (анод)
16 Питание подсветки для дисплеев с подсветкой (катод)

Нумерацию пинов на конкретном ЖКИ смотрим в datasheet.

Контрастность изображения на ЖКИ можно изменять, подключив дополнительно построечный резистор на 10 кОм по схеме:

3Но, следует смотреть в спецификацию на свой контроллер (например у ЖКИ Klsn10294v-0 на чипе KS0066 1-Vcc, а 2-GND). Подача питания подсветки может различаться от модели к модели в зависимости от её типа. Обычно подсветка питается от 5 вольт, токоограничительный резистор (50-100 Ом) обычно не обязателен.

Назначение выводов R/S, R/W,E:

При переходе Е с высокого лог. уровня на низкий данные, которые уже «висят» на выводах DB0..DB7, записываются в память контроллера ЖКИ для последующей обработки.

При высоком лог. уровне на R/S(Register Select) контроллер ЖКИ воспринимает этот набор битов как данные(код символа), а при низком – как инструкцию и направляет их в соответствующий регистр.

R/W определяет направление работы выводов DB0..DB7 – если на R/W «0», то мы можем только писать в порт DB, а если R/W = «1», то можем прочитать с него (например узнать занят контроллер или свободен для приема новых данных). Если мы не будем читать данные из ЖКИ, то можно «посадить» R/W на землю.

Набор команд HD44780

Для того чтобы начать выводить информацию на ЖКИ, его контроллер надо проинициализировать (сообщить ему об интерфейсе, шрифте, смещениях и т.д.). Контроллер может воспринимать всего 11 команд:

Название инструкции Состояние выводов Прим. Время исполнения

fраб.=270 кГц

RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
Clear display 0 0 0 0 0 0 0 0 0 1 Очистка Всего ЖКИ установка адреса DDRAM в 0 1.52 мс
Return home 0 0 0 0 0 0 0 0 1 Х Установка текущего адреса DDRAM в 0 (курсор – домой) Данные DDRAM не меняются 1.52 мс
Entry mode set 0 0 0 0 0 0 0 1 I/D S Установка направления движения курсора (I/D) и смещения дисплея (S) при выводе данных 37 мкс
Display on/off control 0 0 0 0 0 0 1 D C B Вкл/выкл. дисплей(D), курсор(C) и его мерцание(B) 37 мкс
Cursor or display shift 0 0 0 0 0 1 S/C R/L Х Х Двигает курсор и смещает дисплей по DDRAM 37 мкс
Function set 0 0 0 0 1 DL N F Х Х Установка интерфейса(DL), число строк(N) и шрифт символов(F) 37 мкс
Set CGRAM address 0 0 0 1 ACG5 ACG4 ACG3 ACG2 ACG1 ACG0 Установка счетчика адреса CGRAM. После этого можно записывать данные в CGRAM 37 мкс
Set DDRAM address 0 0 1 ADD6 ADD5 ADD4 ADD3 ADD2 ADD1 ADD0 Установка счетчика адреса DDRAM 37 мкс
Read busy flag & address 0 1 BF AC6 AC5 AC4 AC3 AC2 AC1 AC0 Если BF = 1 то контроллер ЖКИ выполняет внутреннюю операцию (занят). АC6-АC0 – текущее значение адреса DDRAM 0 мкс
Write data to RAM 1 0 D7 D6 D5 D4 D3 D2 D1 D0 Запись данных в RAM 37 мкс
Read data from RAM 1 1 D7 D6 D5 D4 D3 D2 D1 D0 Чтение данных из RAM 37 мкс

I/D = 1: адрес DDRAM увеличивается    I/D  = 0:   уменьшаетсяS = 1: сдвиг рабочей области дисплея по DDRAM разрешенD = 1: дисплей (изображение) включенC = 1: курсор включенВ = 1: мерцание курсора включено

S/C = 1:   сдвинуть дисплей S/C = 0:   переместить курсорR/L = 1:   вправо R/L = 0:  влево

DL  = 1:   8 bit   DL = 0: 4 bitsN   = 1:   2 lines   N = 0: 1 lineF   = 1:   5х10   F = 0: 5х8

ACG:   CGRAM addressADD:   DDRAM address (адрес курсора)AC: Address counter DD и CGRAM адресов

Инициализация ЖКИ

Есть 2 способа инициализации контроллера ЖКИ:

1. Через внутреннюю схему сброса.

2. В ручном режиме (через посылку в него ряда команд, которыми мы задаем режим работы ЖКИ)

Внутренняя схема сброса контроллера начинает работать сразу после включения питания. В этом есть один минус – если питание у нас «ползет» до рабочего уровня медленно (медленнее, чем за 10 мс), то самоинициализация контроллера может пройти некорректно. При этом способе инициализации контроллер сам исполняет следующие команды:

1. Display clear

2. Function set:DL = 1; 8-bit interface dataN = 0; 1-line displayF = 0; 5х8 dot character font

3. Display on/off control:D = 0; Display offC = 0; Cursor offB = 0; Blinking off

4. Entry mode set:I/D = 1; Increment by 1S = 0; No shift

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

8-битный параллельный интерфейс.

4

4-битный параллельный интерфейс.

5

Как видно, здесь нет ничего сложного: посылаем в ЖКИ команду за командой, учитывая время их исполнения (около 40 мкс) или проверяя флаг занятости контроллера ЖКИ (тогда надо посадить пин RW на лапку микроконтроллера и выставлять его в «1», когда хотим узнать, занят ЖКИ или нет).

Возможно, Вам это будет интересно:

meandr.org

Decada

Автор: WildCatПодключение ЖКИ к микроконтроллеру в Bascom AVR

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

Подробно про протокол вы можете почитать на http://ru.wikipedia.org/wiki/HD44780 и по связанным со статьей ссылкам. В 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 для подключения её питания. Питать её можно от того же источника, что и сам ЖКИ, но иногда требуется ограничительный резисто в несколько сот ом. Иногда выводы подсветки не выведены на общую шину, тогда они находятся непосредственно справа или слева от ЖК матрицы.

Накатаем первую программу для работы с ЖКИ:lcd.bas

$regfile = "2313def.dat" $crystal = 4000000 $sim Dim Count as Integer Count = 0 Do Cls Lcd "Hello! " ; Count Count = Count + 1 Wait 1 Loop End Скомпилируем программу, но на этот раз не будем прошивать чип, а запустим симулятор (о нём читаем в отдельной главе). Щелкнем на первой ячейке в таблице переменных и введем "Count". Затем щелкнем на кнопке "LCD", чтобы посмотреть эмуляцию аппаратной обвязки. Щелкнем на "Step into Code" (F8), чтобы перемещаться по строкам. После строки "Lcd "Hello! " ; Count", на экране появится следующее:

Нажмем кнопку "Run" (F5) и посмотрим на ЖКИ. Команда Cls в цикле инициализирует и очищает дисплей. Инициализация очень важна, поэтому всегда ставьте эту команду перед началом работы с индикатором, иначе вы можете получить доступ только к первой строке двухстрочного индикатора. Также, при сбросе контроллера не происходит сброса ЖКИ, что тоже не даст нормально работать. Теперь обкатаем программу в бою. Удаляем из кода директиву $sim, заново компилируем и загружаем прошивку в чип.

Знакогенератор в ЖКИ

Стандартный набор символов ЖКИ с поддержкой кириллицы выглядит так:

Нестандартные символы из набора можно выводить на индикатор, указывая их десятичный код:

Lcd Chr(253) 'Выводим символ параграфа (0xFDh в десятичной системе будет 253) Управление курсором

В 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):shifttext.bas $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 умел еще и сдвигать текст вверх/вниз со строки на строку.

Создаем собственные символы

Контроллеры HD44780 имеют дополнительное место для 8 собственных символов. Вы можете использовать это, чтобы:

- сделать индикатор уровня сигнала - дурацкую анимацию, показывающую, что контроллер занят рассчетами или чем-то еще - крутящуюся штуковину или танцующего человечка, чтобы показать, что контроллер все еще работает, или развлекать пользователя

Вы можете создавать собственные символы в Bascom, используя специальный редактор (Tools / LCD Designer). Наберем (на этот раз ручками или копипастом) такую вот программку:

$regfile = "2313def.dat" $crystal = 4000000 $sim Config Portd = Output Dim Star As Byte Cursor Off Cls Do For Star = 0 To 5 Step 1 Portd = 255 Waitms 100 Portd = 0 Waitms 100 Locate 1 , 16 Lcd Chr(star) Next Star Loop End Поместим курсор на вторую пустую строку после слов "Cursor Off". Нажмем Tools / LCD Designer:

Щелкнем на маленьком белом квадратике, и он станет черным. Щелкнем снова - и он побелеет. Нарисуем таким образом крестик:

Нажмем "OK". На том месте, где мы предусмотрительно оставили курсор, появится такая строка:

Deflcdchar ?,32,4,4,31,4,4,32,32' replace ? with number (0-7) Заменим "?" на цифру "0" и удалим комментарий: Deflcdchar 0,32,4,4,31,4,4,32,32 Поместим курсор на следующую свободную строку и повторим все действия, нарисовав на этот раз такую загогулину:

Снова нажмем "OK", снова появится строка:

Deflcdchar ?,32,4,4,31,4,4,32,32' replace ? with number (0-7) Делаем все то же самое, только заменяем на этот раз вопросик цифрой "1": Deflcdchar 1,32,4,4,31,4,4,32,32 Повторим этот процесс еще четыре раза (нужно поднапрячь воображение), пока не получим примерно такую программу:star.bas $regfile = "2313def.dat" $crystal = 4000000 $sim Config Portd = Output Dim Star As Byte Cursor Off Deflcdchar 0 , 32 , 4 , 4 , 31 , 4 , 4 , 32 , 32 Deflcdchar 1 , 32 , 2 , 20 , 14 , 5 , 8 , 32 , 32 Deflcdchar 2 , 32 , 2 , 26 , 4 , 11 , 8 , 32 , 32 Deflcdchar 3 , 32 , 17 , 10 , 4 , 10 , 17 , 32 , 32 Deflcdchar 4 , 32 , 8 , 11 , 4 , 26 , 2 , 32 , 32 Deflcdchar 5 , 32 , 8 , 5 , 14 , 20 , 2 , 32 , 32 Cls Do For Star = 0 To 5 Step 1 Portd = 255 Waitms 100 Portd = 0 Waitms 100 Locate 1 , 16 Lcd Chr(star) Next Star Loop End Скомпилируем и засимулируем. На выходе получаем шусто вращающуюся звездочку на последнем знакоместе первой строки:

Как вариант, можно сделать прыгающего человечка только из двух кадров:(jman.bas)

Или индикатор уровня:(mbar.bas)

Форматирование вывода на ЖКИ

Представим, что у нас есть некая целочисленная переменная loglevel, которая меняет значения от -90 до +10 (типа регулятор громкости в усилителе). То, как она будет выведена на ЖКИ, зависит от её значения:

Loglevel = -2 Lcd Loglevel Loglevel = 34 Lcd Loglevel Loglevel = 7 Lcd Loglevel

Как мы видим, все обстоит ужасно: в зависимости от значения, меняется положение цифр. Для меняющегося значения это делает чтение затрудненным. Разумное решение - зарезервировать определенное число знакомест под вывод и выравнивать значение по краю. Для этого пригодится уже знакомая нам команда Format:lcdformat.bas

$regfile = "2313def.dat" $crystal = 4000000 $sim Dim Loglevel As Integer Dim Loglevelstr As String * 5 Dim Loglevelstrformat As String * 5 Cls Loglevel = -2 Loglevelstr = Str(loglevel) Loglevelstrformat = Format(loglevelstr , "+00") Lcd Loglevelstrformat ; " dBm" End В результате мы получим вот такой равномерный удобоваримый вывод, который не стыдно показать людям:

При использовании примеров из этой главы не забывайте, что в коде прописана директива $sim. Если вы хотите испытывать код на реальном контроллере и ЖКИ, не забывайте убирать её перед компиляцией!

Кириллица в HD44780

Одна из главных проблем, с который могут столкнуться русскоязычные пользователи - нестандартная кодировка кириллических символов. То есть если вы отправите в ЖКИ обычную строку с русскими символами, вместо них на экран будут выведены абраказябры. Связано это с тем, что для экономии места в памяти контроллера тупоголовые разработчики вместо увеличения объема (можно было просто занять свободные ячейки) решили оставить лишь по одной ячейке для символов со сходным начертанием. Так например, буква O или P выглядят одинаково как в кириллице, так и латинице. Неумные инженеры подумали, что так они неистово сократят объем используемой памяти, но сократили лишь функциональность дисплея. И теперь при необходимости вывести русские символы, каждый раз возникает неприятная неприятность в виде несовместимости таблиц HD44780 и ASCII. Выхода есть два, у обоих свои плюсы и минусы:

1. Написать подпрограмму для контроллера, которая на лету будет декодировать ASCII коды и выводить уже правильные символы на ЖКИ. Удобна тем, что позволяет передавать любые строки без опасения, что они будут выведены впоследствии неправильно. Но этот способ требует лишних ресурсов на перекодировку, а также нужно постоянно хранить в памяти таблицу символов. 2. Использовать утилиту для ПК, которая сама переконвертирует нужные строки в нужный формат, которые сразу подставляются в код для вывода. Удобно тем, что не занимает память контроллера, работает быстро и вообще не требует ресурсов для перекодировки. Но минус в том, что в коде программы нужные строки уже не разобрать. Вывод символов в этом фиксированный, то есть выводить можно только заранее выбранный набор строк. При использовании ввода, например, с RS-232, русские символы будут отображены некорректно.

О наличии подпрограмм для первого случая мне известно, но я не встречал ни одной библиотеки или функции на Basom, которая бы выполняла это. Если вы встречали что-то подобное, убедительная просьба прислать это мне.

Для второго случая есть множество программ. Я не поленился и тоже создал одну. Она автоматически заменяет все русские символы в текстовом файле на их аналоги для HD44780. Скачать программу + исходники (78 КБ).

decada.org.ru


 

..:::Новинки:::..

Windows Commander 5.11 Свежая версия.

Новая версия
IrfanView 3.75 (рус)

Обновление текстового редактора TextEd, уже 1.75a

System mechanic 3.7f
Новая версия

Обновление плагинов для WC, смотрим :-)

Весь Winamp
Посетите новый сайт.

WinRaR 3.00
Релиз уже здесь

PowerDesk 4.0 free
Просто - напросто сильный upgrade проводника.

..:::Счетчики:::..