Lcd ( переместить текст )
|
|
Broka |
Дата: Пн, 03.11.2014, 22:43 | Сообщение # 1 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
253
Замечания:
±
На сайте с 30.09.2009
Статус:
Offline
|
Привет всем! Подскажите пожалуйста как можно на LCD 1602 переместить текст ? Делаю маленький проект , хотел после того как включил устройство , что бы пробежал нужный мне текст........ ( ну вроде как бы для красоты )
Наладчик КИП и А
|
|
|
|
ADMIN |
Дата: Вт, 04.11.2014, 06:23 | Сообщение # 2 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
Я делал так: For i = 0 to 15 Print at i,1, " Stroka " Delayms 100 next i Как то так... Ничего сложного
|
|
|
|
Broka |
Дата: Вт, 04.11.2014, 13:27 | Сообщение # 3 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
253
Замечания:
±
На сайте с 30.09.2009
Статус:
Offline
|
ADMIN, Огромное спасибо Вам! Не так часто занимаюсь написанием программ...... По этому видно памяти и нет!:)Добавлено (04.11.2014, 13:27) --------------------------------------------- Вот попробовал ...... по Вашему ничего не выходит. Сделал вот так.... For i = 0 to 15 Print at 1,i,$20, "Stroka" Delayms 100 next i Так работает.
Наладчик КИП и А
|
|
|
|
Matrix252005 |
Дата: Вт, 04.11.2014, 13:56 | Сообщение # 4 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
636
Замечания:
±
На сайте с 12.10.2007
Статус:
Offline
|
Приятного времени суток.
Broka, Вы правы!!! Максим немного ошибся, он перепутал ряд со знакоместом...
С кем не бывает.... Самое главное, что он подсказал в каком направлении нужно двигаться...
THE TRUTH IS OUT THERE.
С уважением, Николай.
|
|
|
|
ADMIN |
Дата: Вт, 04.11.2014, 17:06 | Сообщение # 5 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
Да, ошибся. Я их вечно путаю
|
|
|
|
xvovanx |
Дата: Вт, 04.11.2014, 17:39 | Сообщение # 6 |
Группа:
Модераторы
Ранг:
Помогаю всем
Сообщений:
332
Замечания:
±
На сайте с 02.05.2013
Статус:
Offline
|
А как сделать еще красивее? Чтобы текст "приехал" справа и не остановился в первом знакоместе, а "уехал" весь влево? Типа бегущей строки. Протон не поддерживает такое чудо Print at 1, -1 ?, тогда можно было бы и уехать влево, а так нужно мудрить что-то с самим текстом.
Сообщение отредактировал
xvovanx - Вт, 04.11.2014, 17:42
|
|
|
|
MiXaS |
Дата: Вт, 04.11.2014, 22:47 | Сообщение # 7 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
549
Замечания:
±
На сайте с 02.10.2010
Статус:
Offline
|
Все зависит от того сколько памяти для кода. Правильнее было бы цикл крутиль не от 0 и до 15, а от 16 и до 0 или 1. Мы же не арабы. Если отказаться от модификатора At, то можно чудеса делать на знакоместном дисплее. Добавлено (04.11.2014, 22:47) ---------------------------------------------
Цитата xvovanx ( ) А как сделать еще красивее? Чтобы текст "приехал" справа и не остановился в первом знакоместе, а "уехал" весь влево? Самое простое что приходит в голову это поставить в конце строки пробел(ы). Например длина строки 14 символов, добавляее 2 пробела и крутите. Я так на лед матрицах поступал, чтобы полностью строка уехала
|
|
|
|
xvovanx |
Дата: Ср, 05.11.2014, 10:51 | Сообщение # 8 |
Группа:
Модераторы
Ранг:
Помогаю всем
Сообщений:
332
Замечания:
±
На сайте с 02.05.2013
Статус:
Offline
|
Цитата MiXaS ( ) Самое простое что приходит в голову это поставить в конце строки пробел(ы). Например длина строки 14 символов, добавляее 2 пробела и крутите Что-то до меня не дошло. Как тогда вывести слово "ПРОВЕРКА", которое справа-налево приехало и уехало уже наполовину, чтобы "ПРО" уже не было видно (уехало слево), а осталось только "ВЕРКА" ? Тут надо уже как-то рвать слово и выводить с первого знакоместа "хвосты"
Сообщение отредактировал
xvovanx - Ср, 05.11.2014, 10:52
|
|
|
|
terrarus |
Дата: Ср, 05.11.2014, 19:25 | Сообщение # 9 |
Группа:
Пользователи
Ранг:
Помогаю всем
Сообщений:
451
Замечания:
±
На сайте с 21.08.2008
Статус:
Offline
|
Протон Вам в помощь. Вот описание нужного Вам оператора CURSOR/
Cursor
Синтаксис:
Cursor Line , Position
По этой команде, курсор на ЖК мониторе, помещается в указанную позицию.
Параметр - Line - константа, переменная, или выражение, которые указывают на номер строки, в которую необходимо установить курсор.
Параметр - Position может быть константой, переменной, или выражением, указывающие на номер знакоместа в строке, в которое нужно поместить курсор.
Пример 1
Листинг программы cursor1.bas
' При помощи команды Cursor отобразить на ЖКИ эффект бегущей строки '--------------------------------------------------Общие настройки------------------------------------------------- Device = 16F873A ' Использовать микроконтроллер 16F873A XTAL = 4 ' Установить частоту генаратора равной 4МГц
'-------------------------------------------Настройки подключения ЖКИ------------------------------------------- Declare LCD_TYPE ALPHA ' Тип ЖКИ - буквенно-цифровой Declare LCD_DTPIN PORTB.4 ' Порт данных ЖКИ Declare LCD_ENPIN PORTB.3 ' Цепь управления E Declare LCD_RSPIN PORTB.2 ' Цепь управления RS Declare LCD_INTERFACE 4 ' Разрядность шины данных Declare LCD_COMMANDUS 2000 ' Задержка перед посылкой команды Declare LCD_DATAUS 50 ' Задержка перед посылкой данных Declare LCD_LINES 2 ' Количество строк ЖКИ '----------------------------------------------Объявление переменных---------------------------------------------- Dim Lines As Byte ' Определить размер параметра Lines как Вyte Dim Xpos As Byte ' Определить параметр Xpos как Вyte '--------------------------------------Присвоение первоначальных значений-------------------------------------- Lines = 2 ' Присвоить переменной значение Lines равное 2 Xpos = 1 ' Присвоить переменной значение Xpos равное 1 Cls ' Очистить дисплей Print "HELLO" ' Вывести в первой строке ЖКИ фразу "HELLO" '------------------------------------------------Основная программа------------------------------------------------ main: ' Метка и начало цикла основной программы For Xpos = 1 To 11 Step 1 ' Создать внутренний восходящий цикл на 11 проходов Cursor Lines , Xpos ' Переместить курсор на строку 2 в позицию Xpos Print " WORLD " ' Вывести на экран слово "WORLD" DelayMS 200 ' Пауза определяющая скорость бегущей строки Next ' Завершить внутренний восходящий цикл For Xpos = 11 To 1 Step -1 ' Создать внутренний нисходящий цикл на 11 проходов Cursor Lines , Xpos ' Переместить курсор на строку 2 в позицию Xpos Print " WORLD " ' Вывести на экран фразу "WORLD" DelayMS 200 ' Пауза определяющая скорость бегущей строки Next ' Завершить внутренний нисходящий цикл GoTo main ' Переход в начало основной программы
Если у в Вас что-то не получается, подумай, не стоит ли прочитать инструкцию...!
|
|
|
|
DAlexV |
Дата: Ср, 05.11.2014, 22:27 | Сообщение # 10 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
657
Замечания:
±
На сайте с 13.05.2008
Статус:
Offline
|
А такой вариант пойдет ????
Будьте оригинальны-не повторяйте чужих ошибок ! Рыба сдохла. Теперь STM32(TS)+C#(VS).Старею :)
Сообщение отредактировал
DAlexV - Ср, 05.11.2014, 22:27
|
|
|
|
xvovanx |
Дата: Пт, 07.11.2014, 10:57 | Сообщение # 11 |
Группа:
Модераторы
Ранг:
Помогаю всем
Сообщений:
332
Замечания:
±
На сайте с 02.05.2013
Статус:
Offline
|
terrarus, это все понятно, матчасть "грыз", но ваш текст бегает в пределах экрана (от 1 до 16 знакоместа). DAlexV, Запустил симулятор - то, что надо. Буду изучать ваш код. Коллеги, ну и конечно вам от меня приятный код за помощь: Репутация = INC Репутация
Добавлено (07.11.2014, 10:57) --------------------------------------------- Да, посмотрел код, идея понятна - текст записываем в массив и циклически считываем из массива кусок и выводим на экран. Немного мудрёно (ход моих мыслей был в тот же направлении), но зато коротко и работает красиво
Сообщение отредактировал
xvovanx - Пт, 07.11.2014, 10:58
|
|
|
|
holyuser |
Дата: Пт, 07.11.2014, 11:49 | Сообщение # 12 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
228
Замечания:
±
На сайте с 12.12.2007
Статус:
Offline
|
Бегущую строку можно сделать используя встроeнные комманды дисплея: Dim j As Byte ..... Print $FE,144,"Hello!" For j=1 to 22 Print $FE,24 DelayMS 200 Next j .....
|
|
|
|
DAlexV |
Дата: Пт, 07.11.2014, 14:09 | Сообщение # 13 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
657
Замечания:
±
На сайте с 13.05.2008
Статус:
Offline
|
Цитата xvovanx ( ) Да, посмотрел код, идея понятна - текст записываем в массив и циклически считываем из массива кусок и выводим на экран. Немного мудрёно (ход моих мыслей был в тот же направлении), но зато коротко и работает красиво Да. Ход мыслей правельный. Алгоритм ни чем не отличается от бегущей строки для светодиодов. Есть массив(видеопамять или то что мы видем). В каждом проходе делаем смещение байтов памяти влево (RLMem[0]= RLMem[1],RLMem[1]= RLMem[2] и т.д. до конца). Далее в самую последнюю ячейку мы заносим значение ASCII кода символа из текста RLMemory [19]=CRead String1 + RLPos.
Раз уж дело пошло за урашательство, то вот еще два варианта в стиле аля " Шматрица "
Первый эффект делает перебор по всей длинне строки, второй то же только для каждого символа. После немногих изменений можно сделать и обратный эффект (из слова до пробелов).
xvovanx, спасибо за формулу. Работет безотказно.
Удачи
Будьте оригинальны-не повторяйте чужих ошибок ! Рыба сдохла. Теперь STM32(TS)+C#(VS).Старею :)
|
|
|
|
xvovanx |
Дата: Пт, 07.11.2014, 17:48 | Сообщение # 14 |
Группа:
Модераторы
Ранг:
Помогаю всем
Сообщений:
332
Замечания:
±
На сайте с 02.05.2013
Статус:
Offline
|
Цитата holyuser ( ) Бегущую строку можно сделать используя встроeнные комманды дисплея Извините за выражение, но это не заливная рыба бегущая строка, а стрихнин какой-то . Слово всегда выводится с первого знакоместа. Вправо текст убегает, это да, можно написать и Print at 1,50. А вот для того чтобы убегала влево...
DAlexV, ай спасибочки.
Сообщение отредактировал
xvovanx - Пт, 07.11.2014, 17:49
|
|
|
|
DAlexV |
Дата: Сб, 08.11.2014, 14:20 | Сообщение # 15 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
657
Замечания:
±
На сайте с 13.05.2008
Статус:
Offline
|
Цитата xvovanx ( ) DAlexV, ай спасибочки. Чем моге'м
Будьте оригинальны-не повторяйте чужих ошибок ! Рыба сдохла. Теперь STM32(TS)+C#(VS).Старею :)
|
|
|
|