Работа с ЖКИ на контроллере HD44780 и его аналогах
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Вероятно, это библиотека так написана. Заточена под 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.
Попробуйте не использовать что-то вроде 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.
- Реклама
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Уточню. Начальный адрес 4-й строки будет 0x54
Спойлер
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Да, опечатался. 0x40 + 20 = 0x54.
Последний раз редактировалось WiseLord Сб мар 15, 2014 21:04:15, всего редактировалось 1 раз.
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Всем спасибо за ответы. aki правильно указал адреса, в общем то даташит у меня есть, я и пытался напрямую задать адрес знакоместа. но либо я чего то не понимаю, что неудрено 1 месяц опыта общения с ЖК, либо с бибиотекой что то не то. Вышел из положения пока так: задаю адрес знакоместа, ( программа пытается вывести в 17 место) печатаю 4 пробела, затем то что хотел бы видеть на экране. выводит туда куда нужно, т. е. в 1 зн-место 3 и 4 строки. Костыль, но позже разберусь почему по человечески не получилось...
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Видимо, где-то в библиотеке есть дефайн, который длину строки определяет (вероятно, со значением 16). Вот значение это и надо поменять (на 20), чтобы попадать в нужное место.
- Реклама
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Есть стандартная команда дисплея на ограничение кол-ва символов?WiseLord писал(а):Видимо, где-то в библиотеке есть дефайн, который длину строки определяет (вероятно, со значением 16). Вот значение это и надо поменять (на 20), чтобы попадать в нужное место.
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Нет, конечно.
Но в библиотеке, которую Вы используете, явно есть какой-то #define, определяющий длину строки. И по его значению, функция а-ля setXY(x, y) преобразуется в функцию типа setAddr(KS0066_SET_DDRAM + addr), где addr рассчитывается из x, y и этого дефайна.
Но в библиотеке, которую Вы используете, явно есть какой-то #define, определяющий длину строки. И по его значению, функция а-ля setXY(x, y) преобразуется в функцию типа setAddr(KS0066_SET_DDRAM + addr), где addr рассчитывается из x, y и этого дефайна.
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
К сожалению нет в библиотеке такого ограничения. И ещё, если выводить символы подряд, более 20, то после окончания строки текст продолжается на другой вполне адекватно.WiseLord писал(а):Нет, конечно.
Но в библиотеке, которую Вы используете, явно есть какой-то #define, определяющий длину строки. И по его значению, функция а-ля setXY(x, y) преобразуется в функцию типа setAddr(KS0066_SET_DDRAM + addr), где addr рассчитывается из x, y и этого дефайна.
Ковыряю дальше
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
А покажите-ка эту библиотеку
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Вот она. Только она написана в среде Algorithm Builder http://algrom.net/russian.htmlWiseLord писал(а):А покажите-ка эту библиотеку
- Вложения
-
- WH0802A.ZIP
- (166.02 КБ) 241 скачивание
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Не у всех есть желание ставить этот 
Можно ЭТО в виде текста?
Можно ЭТО в виде текста?
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Нет. К сожалению нет такой возможности.Alexeyslav писал(а):Можно ЭТО в виде текста?
-
Dexter_khm
- Родился
- Сообщения: 8
- Зарегистрирован: Вс фев 12, 2012 16:40:54
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Здравствуйте хочу подключить 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 и его аналогах
Можете имеющуюся библиотеку переделать как-то так:
Код приведён лишь для общего представления, что переделывать.
Если что, оригинал библиотеки (писал я её под AVR сам для себя) на гитхабе есть. Но там у меня с опросом статуса дисплея, т.е. с использованием вывода R/W дисплея, так что нужно вызовы waitWhileBusy(); заменить на что-то вроде _delay_us(10);, и убрать любые манипуляции с LCD_RW.
Спойлер
Код: Выделить всё
#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.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18556
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
вот здесь есть библиотека с возможностью распихать все линии дисплея по разным портам в любом порядке, а так же рассказано, как этой библиотекой пользоваться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 и его аналогах
Здравствуйте, товарищи коты. Наверное, этот вопрос много раз подымался, но ответа что-то найти быстро не смог.
Суть вопроса: есть дисплейчик WH1602-YGH_CTK. Нужно с его помощью выводить сообщения на кириллице. В памяти кириллица есть, но разбросана как попало, т.е. чтобы вывести "Б" я должен выкинуть код символа 0xA0, вывести "Г" - 0xA1 и так далее. Хотел передефайнить кириллицу на шестнадцатеричные коды, но CooIDE такую шутку не оценил. На русские шрифты в дефайнах пишет ошибку "11: error: macro names must be identifiers". А передефайнить бы хотелось) кто-то знает решение?
Суть вопроса: есть дисплейчик WH1602-YGH_CTK. Нужно с его помощью выводить сообщения на кириллице. В памяти кириллица есть, но разбросана как попало, т.е. чтобы вывести "Б" я должен выкинуть код символа 0xA0, вывести "Г" - 0xA1 и так далее. Хотел передефайнить кириллицу на шестнадцатеричные коды, но CooIDE такую шутку не оценил. На русские шрифты в дефайнах пишет ошибку "11: error: macro names must be identifiers". А передефайнить бы хотелось) кто-то знает решение?
Осилит дорогу идущий
--------------------------
Пишу на Си за еду
--------------------------
Пишу на Си за еду
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
.def rus_B = 0xA0 ?slavokhire5 писал(а):А передефайнить бы хотелось) кто-то знает решение?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- slavokhire5
- Прорезались зубы
- Сообщения: 202
- Зарегистрирован: Пн сен 26, 2011 13:48:25
- Откуда: Харьков
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Вариант:) Спасибо!
Осилит дорогу идущий
--------------------------
Пишу на Си за еду
--------------------------
Пишу на Си за еду
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Спойлер
Код: Выделить всё
/*******************************************************/
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;
}
/*******************************************************/


