Работа с ЖКИ на контроллере HD44780 и его аналогах

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение WiseLord »

Вероятно, это библиотека так написана. Заточена под 16x2.
Попробуйте не использовать что-то вроде SetXY() или как оно там может зваться, а напрямую указывать смещения. То есть, что-то вроде
lcdWriteCommand(KS0066_SET_DDRAM + i);
где KS0066_SET_DDRAM = 0x80, а i надо поварьировать, чтобы понять, с каких значений i какая строка начинается.
Например, для 16x2 c i = 0x00 начинается первая строка, с i = 0x40 - вторая. Для 20x4 будет иначе. Точно не уверен, но предположу, что c i = 0x00 - первая, i = 0x40 - вторая, i = 0x14 = третья, i = 0x64 - четвёртая. То есть, если последовательно гнать в дисплей данные, строки будут заполняться в последовательности 1-3-2-4, т.е. 3-я строка фактически является продолжением первой, четвёртая - второй, словно бы это был дисплей 40x2.
Реклама
akl
Друг Кота
Сообщения: 4445
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение akl »

Уточню. Начальный адрес 4-й строки будет 0x54
СпойлерИзображение
LCD_20x4.GIF
Реклама
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение WiseLord »

Да, опечатался. 0x40 + 20 = 0x54.
Последний раз редактировалось WiseLord Сб мар 15, 2014 21:04:15, всего редактировалось 1 раз.
sartam
Открыл глаза
Сообщения: 40
Зарегистрирован: Вс окт 17, 2010 21:56:40

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение sartam »

Всем спасибо за ответы. aki правильно указал адреса, в общем то даташит у меня есть, я и пытался напрямую задать адрес знакоместа. но либо я чего то не понимаю, что неудрено 1 месяц опыта общения с ЖК, либо с бибиотекой что то не то. Вышел из положения пока так: задаю адрес знакоместа, ( программа пытается вывести в 17 место) печатаю 4 пробела, затем то что хотел бы видеть на экране. выводит туда куда нужно, т. е. в 1 зн-место 3 и 4 строки. Костыль, но позже разберусь почему по человечески не получилось...
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение WiseLord »

Видимо, где-то в библиотеке есть дефайн, который длину строки определяет (вероятно, со значением 16). Вот значение это и надо поменять (на 20), чтобы попадать в нужное место.
Реклама
sartam
Открыл глаза
Сообщения: 40
Зарегистрирован: Вс окт 17, 2010 21:56:40

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение sartam »

WiseLord писал(а):Видимо, где-то в библиотеке есть дефайн, который длину строки определяет (вероятно, со значением 16). Вот значение это и надо поменять (на 20), чтобы попадать в нужное место.
Есть стандартная команда дисплея на ограничение кол-ва символов? :shock:
Реклама
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение WiseLord »

Нет, конечно.
Но в библиотеке, которую Вы используете, явно есть какой-то #define, определяющий длину строки. И по его значению, функция а-ля setXY(x, y) преобразуется в функцию типа setAddr(KS0066_SET_DDRAM + addr), где addr рассчитывается из x, y и этого дефайна.
sartam
Открыл глаза
Сообщения: 40
Зарегистрирован: Вс окт 17, 2010 21:56:40

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение sartam »

WiseLord писал(а):Нет, конечно.
Но в библиотеке, которую Вы используете, явно есть какой-то #define, определяющий длину строки. И по его значению, функция а-ля setXY(x, y) преобразуется в функцию типа setAddr(KS0066_SET_DDRAM + addr), где addr рассчитывается из x, y и этого дефайна.
К сожалению нет в библиотеке такого ограничения. И ещё, если выводить символы подряд, более 20, то после окончания строки текст продолжается на другой вполне адекватно.
Ковыряю дальше
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение WiseLord »

А покажите-ка эту библиотеку
sartam
Открыл глаза
Сообщения: 40
Зарегистрирован: Вс окт 17, 2010 21:56:40

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение sartam »

WiseLord писал(а):А покажите-ка эту библиотеку
Вот она. Только она написана в среде Algorithm Builder http://algrom.net/russian.html
Вложения
WH0802A.ZIP
(166.02 КБ) 241 скачивание
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение Alexeyslav »

Не у всех есть желание ставить этот :kill:
Можно ЭТО в виде текста?
sartam
Открыл глаза
Сообщения: 40
Зарегистрирован: Вс окт 17, 2010 21:56:40

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение sartam »

Alexeyslav писал(а):Можно ЭТО в виде текста?
Нет. К сожалению нет такой возможности.
Dexter_khm
Родился
Сообщения: 8
Зарегистрирован: Вс фев 12, 2012 16:40:54

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение Dexter_khm »

Здравствуйте хочу подключить WH1602 LCD HD44780 16Х2 к STM8s. Очень нужна библиотека для работы с ним, сложность в моем случае состоит в том что линии RS, E на PortD а линии на порту PortB и порядок их зеркальный DB4-PB3, DB5-PB2, DB6-PB1, DB7-PB0. Возможно у кого то есть библиотека с более подробной настройкой выводов управления HD44780.
Изображение
Вложения
stm8.png
(33.9 КБ) 608 скачиваний
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение WiseLord »

Можете имеющуюся библиотеку переделать как-то так:
Спойлер

Код: Выделить всё

#define LCD_CONTROL_PORT PORTD

#define LCD_RS (1<<PD7)
#define LCD_E  (1<<PD2)

#define LCD_DATA_PORT PORTB

void lcdWriteData(uint8_t data)
{
	waitWhileBusy();

	LCD_CONTROL_PORT |= LCD_RS;

	// High nibble
	LCD_DATA_PORT &= 0x0F; // Set 0 on PB7..PB4
	LCD_DATA_PORT |= (data & 0xF0);

	writeStrob();

	// Low nibble
	LCD_DATA_PORT &= 0x0F; // Set 0 on PB7..PB4
	LCD_DATA_PORT |= (data<<4) & 0xF0);

	writeStrob();

	return;
}
//
//      |  |
//      |  |
//      |  |
//     \    /
//      \  /
//       \/
//
 
void lcdWriteData(uint8_t data)
{
	waitWhileBusy();

	LCD_CONTROL_PORT |= LCD_RS;

	// High nibble
	LCD_DATA_PORT &= 0bF0; // Set 0 on PB3..PB0
	LCD_DATA_PORT |= ((data & 0b10000000) >> 7); // bit 7 to PB0
	LCD_DATA_PORT |= ((data & 0b01000000) >> 5); // bit 6 to PB1
	LCD_DATA_PORT |= ((data & 0b00100000) >> 3); // bit 5 to PB2
	LCD_DATA_PORT |= ((data & 0b00010000) >> 1); // bit 4 to PB3

	writeStrob();

	// Low nibble
	LCD_DATA_PORT &= 0bF0;
	LCD_DATA_PORT |= ((data & 0b00001000) >> 3); // bit 3 to PB0
	LCD_DATA_PORT |= ((data & 0b00000100) >> 1); // bit 2 to PB1
	LCD_DATA_PORT |= ((data & 0b00000010) << 1); // bit 1 to PB2
	LCD_DATA_PORT |= ((data & 0b00000001) << 3); // bit 0 to PB3

	writeStrob();

	return;
}
Код приведён лишь для общего представления, что переделывать.
Если что, оригинал библиотеки (писал я её под AVR сам для себя) на гитхабе есть. Но там у меня с опросом статуса дисплея, т.е. с использованием вывода R/W дисплея, так что нужно вызовы waitWhileBusy(); заменить на что-то вроде _delay_us(10);, и убрать любые манипуляции с LCD_RW.
Web
Потрогал лапой паяльник
Сообщения: 321
Зарегистрирован: Пт мар 22, 2013 16:05:05
Откуда: Саратов

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение Web »

У меня дисплей WH1602D, после подключения к МК появился такой дефект
Изображение Можно что-нибудь сделать ?
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18556
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение ARV »

Dexter_khm писал(а):Здравствуйте хочу подключить WH1602 LCD HD44780 16Х2 к STM8s. Очень нужна библиотека для работы с ним, сложность в моем случае состоит в том что линии RS, E на PortD а линии на порту PortB и порядок их зеркальный DB4-PB3, DB5-PB2, DB6-PB1, DB7-PB0. Возможно у кого то есть библиотека с более подробной настройкой выводов управления HD44780.
вот здесь есть библиотека с возможностью распихать все линии дисплея по разным портам в любом порядке, а так же рассказано, как этой библиотекой пользоваться
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
slavokhire5
Прорезались зубы
Сообщения: 202
Зарегистрирован: Пн сен 26, 2011 13:48:25
Откуда: Харьков

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение slavokhire5 »

Здравствуйте, товарищи коты. Наверное, этот вопрос много раз подымался, но ответа что-то найти быстро не смог.
Суть вопроса: есть дисплейчик WH1602-YGH_CTK. Нужно с его помощью выводить сообщения на кириллице. В памяти кириллица есть, но разбросана как попало, т.е. чтобы вывести "Б" я должен выкинуть код символа 0xA0, вывести "Г" - 0xA1 и так далее. Хотел передефайнить кириллицу на шестнадцатеричные коды, но CooIDE такую шутку не оценил. На русские шрифты в дефайнах пишет ошибку "11: error: macro names must be identifiers". А передефайнить бы хотелось) кто-то знает решение? :)
Осилит дорогу идущий
--------------------------
Пишу на Си за еду
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение Gudd-Head »

slavokhire5 писал(а):А передефайнить бы хотелось) кто-то знает решение? :)
.def rus_B = 0xA0 ?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
slavokhire5
Прорезались зубы
Сообщения: 202
Зарегистрирован: Пн сен 26, 2011 13:48:25
Откуда: Харьков

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение slavokhire5 »

Вариант:) Спасибо!
Осилит дорогу идущий
--------------------------
Пишу на Си за еду
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение Аlex »

Спойлер

Код: Выделить всё

/*******************************************************/
const unsigned char cyr_table[]={
'A',	// А
160,	// Б
'B',	// В
161,	// Г
224,	// Д
'E',	// Е
//	162,	// Ё
163,	// Ж
164,	// З
165,	// И
166,	// Й
'K',	// K
167,	// Л
'M',	// M
'H',	// H
'O',	// O
168,	// П
'P',	// P
'C',	// C
'T',	// T
169,	// У
170,	// Ф
'X',	// X
225,	// Ц
171,	// Ч
172,	// Ш
226,	// Щ
173,	// Ъ
174,	// Ы
'b',	// Ь
175,	// Э
176,	// Ю
177,	// Я
'a',	// а
178,	// б
179,	// в
180,	// г
227,	// д
'e',	// e
//	181,	// ё
182,	// ж
183,	// з
184,	// и
185,	// й
186,	// к
187,	// л
188,	// м
189,	// н
'o',	// o
190,	// п
'p',	// р
'c',	// с
191,	// т
'y',	// y
228,	// ф
'x',	// x
229,	// ц
192,	// ч
193,	// ш
230,	// щ
194,	// ъ
195,	// ы
196,	// ь
197,	// э
198,	// ю
199,	// я
};
/*******************************************************/
unsigned char chr_to_cyr (unsigned char ch){
if (ch==168)    return 162;
if (ch==184)    return 181;
if (ch>=192)    return cyr_table[ch-192];
return ch;
}
/*******************************************************/
Пример варианта можете посмотреть тут. Правда он не для Coo, но идею почерпнуть можно.
Ответить

Вернуться в «Периферия»