Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Модератор форума: demanik 
Форум Picbasic.ru » Программирование МК » Proton PicBasic » Lcd ( переместить текст )
Lcd ( переместить текст )
Broka Дата: Пн, 03.11.2014, 22:43  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 245
Репутация: 9   ±
Замечания:   ±
На сайте с 30.09.2009

Статус: Offline

Привет всем!  Подскажите пожалуйста как можно на LCD 1602 переместить текст ?
Делаю маленький проект , хотел  после того как включил устройство , что бы пробежал нужный
мне текст........  ( ну вроде как бы для красоты )  cool


Наладчик КИП и А
ЯНДЕКС Дата: 03.11.2014
ADMIN Дата: Вт, 04.11.2014, 06:23  |                                                                                                                Сообщение # 2
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1109
Репутация: 24   ±
Замечания:   ±
На сайте с 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
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 245
Репутация: 9   ±
Замечания:   ±
На сайте с 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
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 675
Репутация: 20   ±
Замечания:   ±
На сайте с 12.10.2007

Статус: Offline

Приятного времени суток.

Broka, Вы правы!!! Максим немного ошибся, он перепутал ряд со знакоместом... 

С кем не бывает....  smile Самое главное, что он подсказал в каком направлении нужно двигаться...


THE TRUTH IS OUT THERE.

С уважением, Николай.
ADMIN Дата: Вт, 04.11.2014, 17:06  |                                                                                                                Сообщение # 5
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1109
Репутация: 24   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Да, ошибся. Я их вечно путаю
xvovanx Дата: Вт, 04.11.2014, 17:39  |                                                                                                                Сообщение # 6
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 262
Репутация: 12   ±
Замечания:   ±
На сайте с 02.05.2013

Статус: Offline

А как сделать еще красивее? Чтобы текст "приехал" справа и не остановился в первом знакоместе, а "уехал" весь влево? Типа бегущей строки. Протон не поддерживает такое чудо Print at 1, -1 ?, тогда можно было бы и уехать влево, а так нужно мудрить что-то с самим текстом.
Сообщение отредактировал xvovanx - Вт, 04.11.2014, 17:42
MiXaS Дата: Вт, 04.11.2014, 22:47  |                                                                                                                Сообщение # 7
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 619
Репутация: 26   ±
Замечания:   ±
На сайте с 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
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 262
Репутация: 12   ±
Замечания:   ±
На сайте с 02.05.2013

Статус: Offline

Цитата MiXaS ()
Самое простое что приходит в голову это поставить в конце строки пробел(ы). Например длина строки 14 символов, добавляее 2 пробела и крутите

Что-то до меня не дошло. Как тогда вывести слово "ПРОВЕРКА", которое справа-налево приехало и уехало уже наполовину, чтобы "ПРО" уже не было видно (уехало слево), а осталось только "ВЕРКА" ? Тут надо уже как-то рвать слово и выводить с первого знакоместа "хвосты"

Сообщение отредактировал xvovanx - Ср, 05.11.2014, 10:52
terrarus Дата: Ср, 05.11.2014, 19:25  |                                                                                                                Сообщение # 9
Группа: Модераторы
Ранг:  Разобрался
Сообщений: 542
Репутация: 16   ±
Замечания:   ±
На сайте с 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
Группа: Модераторы
Ранг:  Разобрался
Сообщений: 691
Репутация: 17   ±
Замечания:   ±
На сайте с 13.05.2008

Статус: Offline

А такой вариант пойдет ????
Прикрепления: LCD_Running_Lin.rar(37Kb)


Будьте оригинальны - не повторяйте чужих ошибок !!!!
Пишу только на Рыбе (SwordFish). Другую пищу не предлагать, на шерсть влияет :)

Сообщение отредактировал DAlexV - Ср, 05.11.2014, 22:27
xvovanx Дата: Пт, 07.11.2014, 10:57  |                                                                                                                Сообщение # 11
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 262
Репутация: 12   ±
Замечания:   ±
На сайте с 02.05.2013

Статус: Offline

terrarus, это все понятно, матчасть "грыз", но ваш текст бегает в пределах экрана (от 1 до 16 знакоместа).
DAlexVrah Запустил симулятор - то, что надо. Буду изучать ваш код. Коллеги, ну и конечно вам от меня приятный код за помощь: Репутация = INC Репутация roll

Добавлено (07.11.2014, 10:57)
---------------------------------------------
Да, посмотрел код, идея понятна - текст записываем в массив и циклически считываем из массива кусок и выводим на экран. Немного мудрёно (ход моих мыслей был в тот же направлении), но зато коротко и работает красиво smile

Сообщение отредактировал xvovanx - Пт, 07.11.2014, 10:58
holyuser Дата: Пт, 07.11.2014, 11:49  |                                                                                                                Сообщение # 12
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 246
Репутация: 5   ±
Замечания:   ±
На сайте с 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
Группа: Модераторы
Ранг:  Разобрался
Сообщений: 691
Репутация: 17   ±
Замечания:   ±
На сайте с 13.05.2008

Статус: Offline

Цитата xvovanx ()
Да, посмотрел код, идея понятна - текст записываем в массив и циклически считываем из массива кусок и выводим на экран. Немного мудрёно (ход моих мыслей был в тот же направлении), но зато коротко и работает красиво

Да. Ход мыслей правельный. Алгоритм ни чем не отличается от бегущей строки для светодиодов. Есть массив(видеопамять или то что мы видем). В каждом проходе делаем смещение байтов памяти влево (RLMem[0]= RLMem[1],RLMem[1]= RLMem[2] и т.д. до конца). Далее в самую последнюю ячейку мы заносим значение ASCII кода символа из текста RLMemory [19]=CRead String1 + RLPos.

Раз уж дело пошло за урашательство, то вот еще два варианта в стиле аля " Шматрица " smile

Первый эффект делает перебор по всей длинне строки, второй то же только для каждого символа.
После немногих изменений можно сделать и обратный эффект (из слова до пробелов).

xvovanx,  спасибо за формулу. Работет безотказно. happy

Удачи wink
Прикрепления: LCD_Running_ShM.rar(42Kb)


Будьте оригинальны - не повторяйте чужих ошибок !!!!
Пишу только на Рыбе (SwordFish). Другую пищу не предлагать, на шерсть влияет :)
xvovanx Дата: Пт, 07.11.2014, 17:48  |                                                                                                                Сообщение # 14
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 262
Репутация: 12   ±
Замечания:   ±
На сайте с 02.05.2013

Статус: Offline

Цитата holyuser ()
Бегущую строку можно сделать используя встроeнные комманды дисплея

Извините за выражение, но это не заливная рыба бегущая строка, а стрихнин какой-то wink . Слово всегда выводится с первого знакоместа. Вправо текст убегает, это да, можно написать и Print at 1,50. А вот для того чтобы убегала влево...

DAlexV, ай спасибочки.

Сообщение отредактировал xvovanx - Пт, 07.11.2014, 17:49
DAlexV Дата: Сб, 08.11.2014, 14:20  |                                                                                                                Сообщение # 15
Группа: Модераторы
Ранг:  Разобрался
Сообщений: 691
Репутация: 17   ±
Замечания:   ±
На сайте с 13.05.2008

Статус: Offline

Цитата xvovanx ()
DAlexV, ай спасибочки.
Чем моге'м smile


Будьте оригинальны - не повторяйте чужих ошибок !!!!
Пишу только на Рыбе (SwordFish). Другую пищу не предлагать, на шерсть влияет :)
Форум Picbasic.ru » Программирование МК » Proton PicBasic » Lcd ( переместить текст )
Страница 1 из 11
Поиск: