Страница 1 из 1

Помогите с бегущей строкой.

Добавлено: Вт авг 24, 2010 17:12:32
miwutka07
Полазил по всему инету, нашел кучу схем, прошивок, карявых исходников, но все эти "спецы" которые дают схемы и исходники сами не могут описать принцип как написать программу для бегущей строки. Если сдесь есть умные люди то помогите понять принцип написания программы. Я собрать схему могу. матрицы 8х8 штук 5. На каждую регистры сдвига которыми управляются атмегой напремер восьмой. Но я не могу додуматься как организовать в программе чтение второго символа, сдвиг символа и т.д. Помогите если есть тут ктото с мозгами :)

Re: Помогите с бегущей строкой.

Добавлено: Вт авг 24, 2010 17:26:24
Engineer_Keen
miwutka07 писал(а):Я не могу додуматься как организовать в программе чтение второго символа, сдвиг символа и т.д.


Не можете придумать алгоритм или реализовать его на конкретном языке/устройстве?

Re: Помогите с бегущей строкой.

Добавлено: Вт авг 24, 2010 17:39:13
miwutka07
немогу придумать алгоритм. Пишу на Си в кодевижн. Хочу чтобы ктото помог, на пальцах расписал чего там и как посылать. Статические буквы я могу засветить, а вот чтоб они бежали - немогу организовать текст программы. Толи создать массивы с данными строк толи через оператор case написать кучу строк. Вот сдвинулась строка на 9-ую точку и как отобразить первый символ уже дальше, и второй который начинает появляться. Вообщем хочу чтоб мне помогли понять алгоритм, составить его чтоли..... Но никто не может. Только все пишут как это легко, а как до дела.......

Re: Помогите с бегущей строкой.

Добавлено: Вт авг 24, 2010 18:00:58
денвер
В архиве мой вариант бегущей строки,матрица 6х7(Ш хВ),имеются поиснения.Мож чем поможет.
светотабло.rar
(35.26 КБ) 387 скачиваний

Re: Помогите с бегущей строкой.

Добавлено: Вт авг 24, 2010 18:06:59
Shplv
miwutka07 писал(а):немогу придумать алгоритм. ... Только все пишут как это легко, а как до дела.......
Алгоритм тесно связан со схематикой устройства, поэтому Вам трудно подсказать. При реализации "бегущей" строки легче всего хранить/выводить символы "по столбцам". При выводе "считайте" что выводится на один символ больше, чем есть места на табло, но начинайте вывод с N-ого столбца первой буквы, постепенно увеличивая N, до тех пор, пока N не достигнет ширины буквы. Кстати, при динамической индикации возможно нужно будет бороться с искажением формы символов на табло. В этом смысле лучше "статическая" индикация, но она гораздо затратнее по "железу"...

Re: Помогите с бегущей строкой.

Добавлено: Вт авг 24, 2010 18:13:53
miwutka07
денвер писал(а):В архиве мой вариант бегущей строки,матрица 6х7(Ш хВ),имеются поиснения.Мож чем поможет.
светотабло.rar

спасибо :) но не помогло. Там даже ошибки есть...... :) Мне нужен алгоритм больше а не программа :) Ну конечно и программку почитаю, кто даст. У меня этих программ куча, и все они с ошибками...... Ну помогите же ктонибудь. Натолкните на мысль как надо организовать алгоритм перемещения букв. Считать я то их смогу.... Я и исходник потом выложу со схемой, только помогите..... Даже все подробно опишу :)

Re: Помогите с бегущей строкой.

Добавлено: Вт авг 24, 2010 18:20:06
miwutka07
Shplv писал(а):
miwutka07 писал(а):немогу придумать алгоритм. ... Только все пишут как это легко, а как до дела.......
Алгоритм тесно связан со схематикой устройства, поэтому Вам трудно подсказать. При реализации "бегущей" строки легче всего хранить/выводить символы "по столбцам". При выводе "считайте" что выводится на один символ больше, чем есть места на табло, но начинайте вывод с N-ого столбца первой буквы, постепенно увеличивая N, до тех пор, пока N не достигнет ширины буквы. Кстати, при динамической индикации возможно нужно будет бороться с искажением формы символов на табло. В этом смысле лучше "статическая" индикация, но она гораздо затратнее по "железу"...

Да это всё я уже начитался по всему инету ))) Мне надо помочь с алгоритмом..... Например:
считал первую букву, обратился к ее массиву, разделенному на столбцы или строки (как удобнее). Потом вывел первую строку и столбец. А вот как это все написать через for, if case и т.д. Я же говорю подробный алгоритм нужен. Вот все только и говорят что схемотехнику надо смотреть как там я захотел выводить. Нечего тут смотреть. один регистр 595 на 8 строк, и 40 столбцов, где 5 регистров(по одному на каждые 8 столбика). Что вы все тут только теорию разводите. Давайте ближе к делу пожалуйста :)

Re: Помогите с бегущей строкой.

Добавлено: Вт авг 24, 2010 18:22:55
miwutka07
Engineer_Keen писал(а):
miwutka07 писал(а):Я не могу додуматься как организовать в программе чтение второго символа, сдвиг символа и т.д.


Не можете придумать алгоритм или реализовать его на конкретном языке/устройстве?

нужен алгоритм подробный. Вроде и все в голове готово, но вот алгоритм как организовать передвижение не могу. Поможете?

Re: Помогите с бегущей строкой.

Добавлено: Вт авг 24, 2010 18:30:58
ARV
алгоритм? это не поможет? сам алгоритм бежания...

Re: Помогите с бегущей строкой.

Добавлено: Вт авг 24, 2010 18:39:33
miwutka07
ARV писал(а):алгоритм? это не поможет? сам алгоритм бежания...

Извините, но для просмотра этой страницы у Вас недостаточно прав. - зарегился и вот это пишет. Скинь плиз в текстовом файле.

Re: Помогите с бегущей строкой.

Добавлено: Вт авг 24, 2010 18:41:12
miwutka07
Звеняй, зашел, сейчас читаю. Вроде чтото похоже на нужное. Прочитаю, отпишусь!

Re: Помогите с бегущей строкой.

Добавлено: Вт авг 24, 2010 18:44:47
ARV
miwutka07 писал(а):Извините, но для просмотра этой страницы у Вас недостаточно прав. - зарегился и вот это пишет. Скинь плиз в текстовом файле.
для просмотра материалов регистрации не требуется - это что-то у вас не то...

Re: Помогите с бегущей строкой.

Добавлено: Вт авг 24, 2010 19:06:26
miwutka07
ARV писал(а):
miwutka07 писал(а):Извините, но для просмотра этой страницы у Вас недостаточно прав. - зарегился и вот это пишет. Скинь плиз в текстовом файле.
для просмотра материалов регистрации не требуется - это что-то у вас не то...

провитал..... инчего нового не узнал... описана работа с семисегментником. Ничего нужного там нет... Как организовать через регистры вывод бегущей строки вообще не затронут. никто не может помочь...... (((

Re: Помогите с бегущей строкой.

Добавлено: Вт авг 24, 2010 22:58:28
Murav
Статическую картинку сделать то получилось?
После этого нужно сделать чтобы при формировании картинки не хранить уже готовые данные для регистров, а составлять их на основе растра. Для начала советую вынести код, читающий растр из памяти(в случае растров отдельных букв - эта функция должна обращаться к ещё одной функции, которая принимает номер буквы и координаты) в отдельную функцию(например называющуюся GetPixel), которая принимает координаты точки(x и y) и возвращает цвет этой точки(то есть 0 или 1) и уже на основе результатов вызовов этой функции составлять байты, которые выдавать на регистры. Такой код конечно не оптимальный, но на нём проще разобраться как всё это должно работать, а потом как разберёшься и всё сделаешь уже можно будет и оптимизировать программу.
А дальше для того чтобы сделать строку бегущей в этой функции вначале надо просто добавить x=(x+position)%длинна изображения и время от времени увеличивать переменную position.

Ну и формирование байтов для регистров нужно делать в цикле(на сколько я понимаю, у тебя должно быть три вложенных цикла). И если используется динамическая индикация, то потребуется ещё один внешний цикл для неё.

Re: Помогите с бегущей строкой.

Добавлено: Вт авг 24, 2010 23:58:47
miwutka07
Murav писал(а):Статическую картинку сделать то получилось?
После этого нужно сделать чтобы при формировании картинки не хранить уже готовые данные для регистров, а составлять их на основе растра. Для начала советую вынести код, читающий растр из памяти(в случае растров отдельных букв - эта функция должна обращаться к ещё одной функции, которая принимает номер буквы и координаты) в отдельную функцию(например называющуюся GetPixel), которая принимает координаты точки(x и y) и возвращает цвет этой точки(то есть 0 или 1) и уже на основе результатов вызовов этой функции составлять байты, которые выдавать на регистры. Такой код конечно не оптимальный, но на нём проще разобраться как всё это должно работать, а потом как разберёшься и всё сделаешь уже можно будет и оптимизировать программу.
А дальше для того чтобы сделать строку бегущей в этой функции вначале надо просто добавить x=(x+position)%длинна изображения и время от времени увеличивать переменную position.

Ну и формирование байтов для регистров нужно делать в цикле(на сколько я понимаю, у тебя должно быть три вложенных цикла). И если используется динамическая индикация, то потребуется ещё один внешний цикл для неё.


Ну в голове то я это понял, а вот как сажусь писать текст, так куча не стыковок вылазит..... даже нигде нет нормального исходного кода чтобы посмотреть. Все с недоработками. Растр я так понял это буква из памяти. Счет букв я сделаю. "(в случае растров отдельных букв - эта функция должна обращаться к ещё одной функции, которая принимает номер буквы и координаты)" - а вот как еще координаты втулить в программу непойму! Функцию GetPixel вроде понял как сделать. Вот и загвоздка в этих координатах... Еслеб кто помог примером кода, хотя б на скорую руку...... А то пол 70% проги в голове готово, а вот такие нюансы не могу шото сообразить ))) Тяжко мне с этими регистрами работать )))) Вот АЦП, ПИД_регялтор - эт легче раз в 50..... Помогите еще кто может.... (((((

Re: Помогите с бегущей строкой.

Добавлено: Ср авг 25, 2010 06:17:09
ARV
miwutka07 писал(а):провитал..... инчего нового не узнал... описана работа с семисегментником. Ничего нужного там нет... Как организовать через регистры вывод бегущей строки вообще не затронут. никто не может помочь...... (((

я с вас фигею... я давал ссылку совсем на другую статью!!! что вы там читали и какую ересь написали в комментах - просто диву даюсь... вот еще раз ПРАВИЛЬНАЯ ССЫЛКА

Re: Помогите с бегущей строкой.

Добавлено: Ср авг 25, 2010 07:02:43
asteroid7
ARV, перепроверь, такая же фигня с ссылкой. Ведёт на Извините, но для просмотра... Вы должны...
Раздел "Начинающим > Пробуем программировать". Куки и JS включены.

Re: Помогите с бегущей строкой.

Добавлено: Ср авг 25, 2010 07:31:35
ARV
asteroid7 писал(а):ARV, перепроверь, такая же фигня с ссылкой. Ведёт на Извините, но для просмотра... Вы должны...
Раздел "Начинающим > Пробуем программировать". Куки и JS включены.

проверил. похоже, на сервере был сбой и они автоматом восстановили бэкап базы какой-то старой версии... сейчас вроде все ништяк должно быть. извините.

что касается бегущей строки, то все просто. эй, miwutka07, будь внимателен, даю алгоритм :)))

1. должен быть какой-то массив байтов, соответствующий "экранной области", т.е. каждый бит в этом массиве - есть точка на матрице. записали в массив какое-то число - и тут же на матрице засветились нужные точки (где единички в битах). как вы это обеспечите - мне все равно. я предполагаю, что будет некая фоновая процедура динамической индикации по прерываниям.
2. должен быть массив (двумерный) с символами знакогенератора или иными картинками, которые выводятся на экран. почему двумерный? потому что по одному измерению будут номера символов-картинок, а по второму - номер байта внутри самого символа. этот массив лучше хранить во flash.
3. должна быть функция, которая на входе имеет координаты X, Y и указатель на первый байт внутри знакогенератора и по этим параметрам копирует из знакогенератора фиксированное число байтов в экранную область. левый верхний угол в экранной области определяется координатами.

если вы сделаете все вышеперечисленное, то вы сумеете вывести любой символ из знакогенератора в указанную точку своей матрицы. на данном этапе это позволит вам нарисовать любую букву в любом месте матрицы - неподвижно пока.

4. делается функция, которая получает координату X и указатель на строку с текстом, и выводит этот текст на экран в точку с координатой (X,0) - считаем, что 0 - это самая верхняя строка матрицы. делает это она при помощи функции из п.3 - по очередной букве строки определяет номер символа в знакогенераторе, выводит это символ, затем сдвигает координату Х на ширинут символа, определяет номер следующего символа и т.д.

на этом этапе вы сумеете вывести строку текста в вашу экранную область, начиная с указанной координаты Х

5. делается цикл, который с задержкой выводит при помощи функции из п.4 заданный текст сначала в позицию, равную максимальному номеру точки в вашей матрице по горизонтали, затем в предыдущую точку, затем в пред-предыдущую и т.д.

на этом этапе строка у вас побежит от правого края до левого.

ВНИМАНИЕ!!!
все функции должны контролировать соответствие реальных координат и тех, что получили на входе: если передана координата по Х раная -12, то НИЧЕГО ВЫВОДИТЬ НЕ НАДО. точно так же не надо выводить и в том случае, если Х стало больше, чем ширина экрана. иначе вы начнете портить ОЗУ со страшной силой.

6. вы должны уметь вычислять ширину текста в точках.

теперь, если ширина текста в точках у вас 120, а ширина экрана в точках 64, то вам остается только производить в цикле простые вычисления и задавать координаты вывода текста в диапазоне от 64 до -120, чтобы весь текст пробежал справа налево.

в общих чертах, это весь алгоритм. есть всякие нюансы типа очистки экрана правее текста строки и т.п. - но для основы этого достаточно.

удачи! :)))

Re: Помогите с бегущей строкой.

Добавлено: Пн мар 12, 2012 00:55:32
marinkaest
Мне понравилось...
А как быть в случае бегущей строки пропеллера?