Как с помощью функции lcd_putch(); (из библиотеки уважаемого Alex)вывести однозначное десятичное число? Если пробую lcd_putch(5); выводится невесть что...
_________________ Кот гуляет сам по себе, но вблизи холодильника.
Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Пн ноя 04, 2013 15:48:07
Модератор
Карма: 90
Рейтинг сообщений: 1430
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4568 Откуда: Планета Земля
Рейтинг сообщения:1 Медали: 1
lcd_putch выводит символ с ASCII-кодом, который передаём в функцию. Чтобы вывести число, нужно его преобразовать в строку (массив символов) и выводить по-символьно, либо с помощью lcd_puts (что тоже самое).
А кто-нибудь сталкивался с таким: ЖКИ на базе GDM1601a (аналог HD44780) отображает только 8 символов на экране. Из 16. Дальше - пусто. --- Сам себе отвечу. Указал в коде Config Lcd = 16 * 1 а надо было Config Lcd = 16 * 1a ---- Нее.. все равно глюк вылезает. (( Когда нужно писать на экране Time:00:59 - минуты упорно не хотят отображаться
А Вы знаете, что дисплей в 16 символов и 1 строку - это 8*2, у которого строки друг за другом. Если просто так в него писать (как в одну строку), то символы после восьмого не отобразятся. Процедура записи состоит из двух частей. Сначала левую половину пишем, потом правую.
_________________ Этот пост оказался полезен? Не поленись, нажми слева! Куплю индикаторы ИТС-1А, ИТС-1Б, ИГВ1-8х5Л, ИГПС1-222/7, ИГПС1-111/7 и подобные.
Я понял в чем глюк был. Когда я просто пишу: Lcd " Длинное слово ", то И протеус, и железка отображают его правильно. А вот когда указывал место через: Locate 1 , 6 Lcd Minut То протеус отображал правильно, а железка обрезала все после 8 символа. Команда Locate по разному понимается Протеусом и железкой. Видимо, железка считает, что если есть 1 строка, то должна быть и 2.
Не "понял, в чём глюк", а пытаешься угадать правильную последовательность нажимания кнопок.
Набираем в интернете название дисплея, открываем первую попавшуюся сссылку, рассматриваем картинку с словами "Display character address code: Display position / DDRAM address". Не помогло.
В том же самом интернете набираем "lcd.pdf 44780 ктц мк" (это не выводится из каких-либо рассуждений, просто магические символы), получаем документ с надписью "КТЦ-МК". Там всё даже по-русски, но... многабукв ни о чём, а кнопки-то какие нажимать? Чтоб железка не считала строки через Locate? Глюк же! И протеус!
Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Пт дек 06, 2013 11:29:21
Друг Кота
Карма: 67
Рейтинг сообщений: 1060
Зарегистрирован: Чт сен 18, 2008 12:27:21 Сообщений: 19766 Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения:0 Медали: 1
Преобразовать число из регистра в цифры, например в двоично-десятичном формате. Далее смотрим таблицу символов 44780 — откуда начинаются цифры (30h) и к цифре прибавляем этот адрес. Всё, печатаем очередную цифру.
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ] Измерить нннада?
Добрый вечер уважаемые коты. Помогите советом, подарили символьный ЖКИ 4*20 подключил его к LTP а он не хочет нормально работать, третья строка практически не показывает а четвертая не показывает первые три символа. Подскажите что с пациентом
Разбираешь, собираешь. Без гарантии. Дела на полчаса с перекурами, конструкция на уровне табуретки по сложности. Разрешение нужно? Я разрешаю. Или пользуешься как есть. Нижние две строки можно закрыть картонкой, чтоб не смущали. Для отладочных целей вообще без разницы.
Полтергейст какой-то: выводятся только первые 2 символа. Если убрать команды на их вывод, выводятся символы на 3 и 4 месте. А чтобы все сразу? Спойлер// MK pic16f72 // работа с LCD #include <pic.h> #include "lcd.h" //---------- __CONFIG (XT & WDTDIS & PWRTDIS & BOREN & UNPROTECT); // биты конфигурации программатора //----------
volatile unsigned char cnt_pause = 0;
//---------- void interrupt isr(void) // обработчик прерываний { if (T0IF && T0IE) // ветка опроса флага прерывания по переполнению TMR0 { T0IF = 0; // сброс флага прерывания по переполнению TMR0 TMR0+= 6; // предзагрузка TMR0 T0IE = 1; // 1/0 разрешение/запрет прерывания по переполнению TMR0
if(cnt_pause==1) cnt_pause--;
} // конец ППОП TMR0 } //---------- void podgot (void) // настройки { ADCON1 = 0b111; // отключение АЦП TRISA = 0b111111; // (0/1 - выход/вход, нумерация битов в регистре справо-налево) TRISB = 0b00000000; // (0/1 - выход/вход, нумерация битов в регистре справо-налево) TRISC = 0b00000000; // (0/1 - выход/вход, нумерация битов в регистре справо-налево) RBPU = 0; // подтягивающие R порта В (0-вкл, 1-выкл) бит регистра OPTION // Начало настройки TMR0 ---------- T0CS = 0; // bit 5 TMR0 Выбор источника сигнала 0 - Fosc/4 (внутренний); 1 - подача на T0CKI T0SE = 0; // bit 4 TMR0 Выбор фронта приращения TMR0 при внешнем тактовом сигнале (0-передний фронт) PSA = 0; // bit 3 Выбор включения предделителя: 0 - перед TMR0, 1 - перед WDT PS2 = 0; // bit 2 Настройка предделителя PS1 = 0; // bit 1 Настройка предделителя PS0 = 1; // bit 0 Настройка предделителя T0IE = 1; // 1/0 разрешение/запрет прерывания по переполнению TMR0 T0IF = 0; // Конец настройки TMR0 ---------- GIE = 1; // разрешены все немаскированные прерывания } void pause100 (void) { while(cnt_pause) continue; // если cnt_pause не равен 0, продолжение цикла. cnt_pause=100; } // конец объявления функций, используемые в файле---------------------------------------------------------------------------------- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// void main () { unsigned char cnt_ch=0; unsigned char val=0; podgot(); //настройки lcd_init(); // инициализация дисплея lcd_clear(); // очистка дисплея // for(;;) { lcd_gotoxy(0,0); val=0; lcd_putch(val + '0'); pause100(); //---------- lcd_gotoxy(0,1); val=4; lcd_putch(val + '0'); pause100(); //---------- lcd_gotoxy(0,2); val=8; lcd_putch(val + '0'); pause100(); //---------- lcd_gotoxy(0,3); val=0; lcd_putch(val + '0'); pause100(); //---------- } }// end main
_________________ Кот гуляет сам по себе, но вблизи холодильника.
Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Пт дек 13, 2013 18:35:31
Модератор
Карма: 90
Рейтинг сообщений: 1430
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4568 Откуда: Планета Земля
Рейтинг сообщения:1 Медали: 1
Попробуйте lcd_gotoxy поставить только один раз (на координаты 0,0). Незачем его тыкать перед каждым выводом символа - курсор сам передвинится на следующее знакоместо.
Увы, не помогает: выводятся только первых 2 знака. Убрал функцию pause100() - без изменений. P.S. Мне этих символов выводить и выводить. Вот эскиз интерфейса терморегулятора
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения