Помогите с бегущей строкой.
Помогите с бегущей строкой.
Полазил по всему инету, нашел кучу схем, прошивок, карявых исходников, но все эти "спецы" которые дают схемы и исходники сами не могут описать принцип как написать программу для бегущей строки. Если сдесь есть умные люди то помогите понять принцип написания программы. Я собрать схему могу. матрицы 8х8 штук 5. На каждую регистры сдвига которыми управляются атмегой напремер восьмой. Но я не могу додуматься как организовать в программе чтение второго символа, сдвиг символа и т.д. Помогите если есть тут ктото с мозгами 
- Engineer_Keen
- Друг Кота
- Сообщения: 3868
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: Помогите с бегущей строкой.
miwutka07 писал(а):Я не могу додуматься как организовать в программе чтение второго символа, сдвиг символа и т.д.
Не можете придумать алгоритм или реализовать его на конкретном языке/устройстве?
Re: Помогите с бегущей строкой.
немогу придумать алгоритм. Пишу на Си в кодевижн. Хочу чтобы ктото помог, на пальцах расписал чего там и как посылать. Статические буквы я могу засветить, а вот чтоб они бежали - немогу организовать текст программы. Толи создать массивы с данными строк толи через оператор case написать кучу строк. Вот сдвинулась строка на 9-ую точку и как отобразить первый символ уже дальше, и второй который начинает появляться. Вообщем хочу чтоб мне помогли понять алгоритм, составить его чтоли..... Но никто не может. Только все пишут как это легко, а как до дела.......
Re: Помогите с бегущей строкой.
В архиве мой вариант бегущей строки,матрица 6х7(Ш хВ),имеются поиснения.Мож чем поможет.
Re: Помогите с бегущей строкой.
Алгоритм тесно связан со схематикой устройства, поэтому Вам трудно подсказать. При реализации "бегущей" строки легче всего хранить/выводить символы "по столбцам". При выводе "считайте" что выводится на один символ больше, чем есть места на табло, но начинайте вывод с N-ого столбца первой буквы, постепенно увеличивая N, до тех пор, пока N не достигнет ширины буквы. Кстати, при динамической индикации возможно нужно будет бороться с искажением формы символов на табло. В этом смысле лучше "статическая" индикация, но она гораздо затратнее по "железу"...miwutka07 писал(а):немогу придумать алгоритм. ... Только все пишут как это легко, а как до дела.......
Re: Помогите с бегущей строкой.
денвер писал(а):В архиве мой вариант бегущей строки,матрица 6х7(Ш хВ),имеются поиснения.Мож чем поможет.
спасибо
Re: Помогите с бегущей строкой.
Shplv писал(а):Алгоритм тесно связан со схематикой устройства, поэтому Вам трудно подсказать. При реализации "бегущей" строки легче всего хранить/выводить символы "по столбцам". При выводе "считайте" что выводится на один символ больше, чем есть места на табло, но начинайте вывод с N-ого столбца первой буквы, постепенно увеличивая N, до тех пор, пока N не достигнет ширины буквы. Кстати, при динамической индикации возможно нужно будет бороться с искажением формы символов на табло. В этом смысле лучше "статическая" индикация, но она гораздо затратнее по "железу"...miwutka07 писал(а):немогу придумать алгоритм. ... Только все пишут как это легко, а как до дела.......
Да это всё я уже начитался по всему инету ))) Мне надо помочь с алгоритмом..... Например:
считал первую букву, обратился к ее массиву, разделенному на столбцы или строки (как удобнее). Потом вывел первую строку и столбец. А вот как это все написать через for, if case и т.д. Я же говорю подробный алгоритм нужен. Вот все только и говорят что схемотехнику надо смотреть как там я захотел выводить. Нечего тут смотреть. один регистр 595 на 8 строк, и 40 столбцов, где 5 регистров(по одному на каждые 8 столбика). Что вы все тут только теорию разводите. Давайте ближе к делу пожалуйста
Re: Помогите с бегущей строкой.
Engineer_Keen писал(а):miwutka07 писал(а):Я не могу додуматься как организовать в программе чтение второго символа, сдвиг символа и т.д.
Не можете придумать алгоритм или реализовать его на конкретном языке/устройстве?
нужен алгоритм подробный. Вроде и все в голове готово, но вот алгоритм как организовать передвижение не могу. Поможете?
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Помогите с бегущей строкой.
алгоритм? это не поможет? сам алгоритм бежания...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Помогите с бегущей строкой.
ARV писал(а):алгоритм? это не поможет? сам алгоритм бежания...
Извините, но для просмотра этой страницы у Вас недостаточно прав. - зарегился и вот это пишет. Скинь плиз в текстовом файле.
Re: Помогите с бегущей строкой.
Звеняй, зашел, сейчас читаю. Вроде чтото похоже на нужное. Прочитаю, отпишусь!
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Помогите с бегущей строкой.
для просмотра материалов регистрации не требуется - это что-то у вас не то...miwutka07 писал(а):Извините, но для просмотра этой страницы у Вас недостаточно прав. - зарегился и вот это пишет. Скинь плиз в текстовом файле.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Помогите с бегущей строкой.
ARV писал(а):для просмотра материалов регистрации не требуется - это что-то у вас не то...miwutka07 писал(а):Извините, но для просмотра этой страницы у Вас недостаточно прав. - зарегился и вот это пишет. Скинь плиз в текстовом файле.
провитал..... инчего нового не узнал... описана работа с семисегментником. Ничего нужного там нет... Как организовать через регистры вывод бегущей строки вообще не затронут. никто не может помочь...... (((
Re: Помогите с бегущей строкой.
Статическую картинку сделать то получилось?
После этого нужно сделать чтобы при формировании картинки не хранить уже готовые данные для регистров, а составлять их на основе растра. Для начала советую вынести код, читающий растр из памяти(в случае растров отдельных букв - эта функция должна обращаться к ещё одной функции, которая принимает номер буквы и координаты) в отдельную функцию(например называющуюся GetPixel), которая принимает координаты точки(x и y) и возвращает цвет этой точки(то есть 0 или 1) и уже на основе результатов вызовов этой функции составлять байты, которые выдавать на регистры. Такой код конечно не оптимальный, но на нём проще разобраться как всё это должно работать, а потом как разберёшься и всё сделаешь уже можно будет и оптимизировать программу.
А дальше для того чтобы сделать строку бегущей в этой функции вначале надо просто добавить x=(x+position)%длинна изображения и время от времени увеличивать переменную position.
Ну и формирование байтов для регистров нужно делать в цикле(на сколько я понимаю, у тебя должно быть три вложенных цикла). И если используется динамическая индикация, то потребуется ещё один внешний цикл для неё.
После этого нужно сделать чтобы при формировании картинки не хранить уже готовые данные для регистров, а составлять их на основе растра. Для начала советую вынести код, читающий растр из памяти(в случае растров отдельных букв - эта функция должна обращаться к ещё одной функции, которая принимает номер буквы и координаты) в отдельную функцию(например называющуюся GetPixel), которая принимает координаты точки(x и y) и возвращает цвет этой точки(то есть 0 или 1) и уже на основе результатов вызовов этой функции составлять байты, которые выдавать на регистры. Такой код конечно не оптимальный, но на нём проще разобраться как всё это должно работать, а потом как разберёшься и всё сделаешь уже можно будет и оптимизировать программу.
А дальше для того чтобы сделать строку бегущей в этой функции вначале надо просто добавить x=(x+position)%длинна изображения и время от времени увеличивать переменную position.
Ну и формирование байтов для регистров нужно делать в цикле(на сколько я понимаю, у тебя должно быть три вложенных цикла). И если используется динамическая индикация, то потребуется ещё один внешний цикл для неё.
Re: Помогите с бегущей строкой.
Murav писал(а):Статическую картинку сделать то получилось?
После этого нужно сделать чтобы при формировании картинки не хранить уже готовые данные для регистров, а составлять их на основе растра. Для начала советую вынести код, читающий растр из памяти(в случае растров отдельных букв - эта функция должна обращаться к ещё одной функции, которая принимает номер буквы и координаты) в отдельную функцию(например называющуюся GetPixel), которая принимает координаты точки(x и y) и возвращает цвет этой точки(то есть 0 или 1) и уже на основе результатов вызовов этой функции составлять байты, которые выдавать на регистры. Такой код конечно не оптимальный, но на нём проще разобраться как всё это должно работать, а потом как разберёшься и всё сделаешь уже можно будет и оптимизировать программу.
А дальше для того чтобы сделать строку бегущей в этой функции вначале надо просто добавить x=(x+position)%длинна изображения и время от времени увеличивать переменную position.
Ну и формирование байтов для регистров нужно делать в цикле(на сколько я понимаю, у тебя должно быть три вложенных цикла). И если используется динамическая индикация, то потребуется ещё один внешний цикл для неё.
Ну в голове то я это понял, а вот как сажусь писать текст, так куча не стыковок вылазит..... даже нигде нет нормального исходного кода чтобы посмотреть. Все с недоработками. Растр я так понял это буква из памяти. Счет букв я сделаю. "(в случае растров отдельных букв - эта функция должна обращаться к ещё одной функции, которая принимает номер буквы и координаты)" - а вот как еще координаты втулить в программу непойму! Функцию GetPixel вроде понял как сделать. Вот и загвоздка в этих координатах... Еслеб кто помог примером кода, хотя б на скорую руку...... А то пол 70% проги в голове готово, а вот такие нюансы не могу шото сообразить ))) Тяжко мне с этими регистрами работать )))) Вот АЦП, ПИД_регялтор - эт легче раз в 50..... Помогите еще кто может.... (((((
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Помогите с бегущей строкой.
miwutka07 писал(а):провитал..... инчего нового не узнал... описана работа с семисегментником. Ничего нужного там нет... Как организовать через регистры вывод бегущей строки вообще не затронут. никто не может помочь...... (((
я с вас фигею... я давал ссылку совсем на другую статью!!! что вы там читали и какую ересь написали в комментах - просто диву даюсь... вот еще раз ПРАВИЛЬНАЯ ССЫЛКА
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Помогите с бегущей строкой.
ARV, перепроверь, такая же фигня с ссылкой. Ведёт на Извините, но для просмотра... Вы должны...
Раздел "Начинающим > Пробуем программировать". Куки и JS включены.
Раздел "Начинающим > Пробуем программировать". Куки и JS включены.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Помогите с бегущей строкой.
asteroid7 писал(а):ARV, перепроверь, такая же фигня с ссылкой. Ведёт на Извините, но для просмотра... Вы должны...
Раздел "Начинающим > Пробуем программировать". Куки и JS включены.
проверил. похоже, на сервере был сбой и они автоматом восстановили бэкап базы какой-то старой версии... сейчас вроде все ништяк должно быть. извините.
что касается бегущей строки, то все просто. эй, miwutka07, будь внимателен, даю алгоритм
1. должен быть какой-то массив байтов, соответствующий "экранной области", т.е. каждый бит в этом массиве - есть точка на матрице. записали в массив какое-то число - и тут же на матрице засветились нужные точки (где единички в битах). как вы это обеспечите - мне все равно. я предполагаю, что будет некая фоновая процедура динамической индикации по прерываниям.
2. должен быть массив (двумерный) с символами знакогенератора или иными картинками, которые выводятся на экран. почему двумерный? потому что по одному измерению будут номера символов-картинок, а по второму - номер байта внутри самого символа. этот массив лучше хранить во flash.
3. должна быть функция, которая на входе имеет координаты X, Y и указатель на первый байт внутри знакогенератора и по этим параметрам копирует из знакогенератора фиксированное число байтов в экранную область. левый верхний угол в экранной области определяется координатами.
если вы сделаете все вышеперечисленное, то вы сумеете вывести любой символ из знакогенератора в указанную точку своей матрицы. на данном этапе это позволит вам нарисовать любую букву в любом месте матрицы - неподвижно пока.
4. делается функция, которая получает координату X и указатель на строку с текстом, и выводит этот текст на экран в точку с координатой (X,0) - считаем, что 0 - это самая верхняя строка матрицы. делает это она при помощи функции из п.3 - по очередной букве строки определяет номер символа в знакогенераторе, выводит это символ, затем сдвигает координату Х на ширинут символа, определяет номер следующего символа и т.д.
на этом этапе вы сумеете вывести строку текста в вашу экранную область, начиная с указанной координаты Х
5. делается цикл, который с задержкой выводит при помощи функции из п.4 заданный текст сначала в позицию, равную максимальному номеру точки в вашей матрице по горизонтали, затем в предыдущую точку, затем в пред-предыдущую и т.д.
на этом этапе строка у вас побежит от правого края до левого.
ВНИМАНИЕ!!!
все функции должны контролировать соответствие реальных координат и тех, что получили на входе: если передана координата по Х раная -12, то НИЧЕГО ВЫВОДИТЬ НЕ НАДО. точно так же не надо выводить и в том случае, если Х стало больше, чем ширина экрана. иначе вы начнете портить ОЗУ со страшной силой.
6. вы должны уметь вычислять ширину текста в точках.
теперь, если ширина текста в точках у вас 120, а ширина экрана в точках 64, то вам остается только производить в цикле простые вычисления и задавать координаты вывода текста в диапазоне от 64 до -120, чтобы весь текст пробежал справа налево.
в общих чертах, это весь алгоритм. есть всякие нюансы типа очистки экрана правее текста строки и т.п. - но для основы этого достаточно.
удачи!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- marinkaest
- Потрогал лапой паяльник
- Сообщения: 374
- Зарегистрирован: Ср сен 14, 2011 10:37:28
- Откуда: Кострома
- Контактная информация:
Re: Помогите с бегущей строкой.
Мне понравилось...
А как быть в случае бегущей строки пропеллера?
А как быть в случае бегущей строки пропеллера?