|
7 сегментов и динамическая индикация |
|
|
|
 |
Ответов
|
Feb 19 2009, 20:03
|

Местный
  
Группа: Свой
Сообщений: 224
Регистрация: 23-11-08
Из: Украина, Луганск
Пользователь №: 41 879

|
Цитата(_Pasha @ Feb 13 2009, 17:34)  Позвольте поднять эту банальную тему в целях поиска окончательного решения проблемы распределения битов, портов и прочих неудобств. Вот один из моих вариантов, тоже в меру кривой, потому что всегда надо переписывать функцию do_screen() и переназначать сегменты и знакоместа. И он сугубо под WinAVR, но это не самое сложное, обеспечить в данном случае портабельность.
А кто пошел дальше? Может есть все-таки более элегантные решения, чем то, что у меня? О май гад... В асме это проще выглядит... ;-) Во всяком случае, мысли впихнуть перекодировку ASCII->LED у меня не возникало.. На семисегментнике ведь много не нарисуешь и в 99% хватает минимума типа Err F-1 F-2.. Постараюсь подумать, как свою мысль перевести на общечеловеческий (Си) язык..
--------------------
«Чтобы что-то изобрести, вам потребуется хорошее воображение и куча мусора» /Томас Эдисон/
|
|
|
|
|
Feb 20 2009, 07:38
|
Местный
  
Группа: Свой
Сообщений: 426
Регистрация: 5-04-07
Из: Санкт-Петербург
Пользователь №: 26 782

|
Цитата(_Pasha @ Feb 20 2009, 10:20)  Вы ж поймите: тут задачи другие. Помимо того, что на индикатор может выводиться с тех пинов, с которых удобнее развести на плате, и не обязательно эти пины будут на одном порте, так еще появляется соблазн делать программу переносимой на любой МК. На асме выполнима только первая часть. У нас конструктор печатных плат тоже любит развести платку "как проще". Работаем на С++, поэтому я в этом случае делаю очередной производный класс, в котором определяю "виртуальную" шину, например для того же ЖКИ. А все остальные функции уже используют ее и не требуют изменения в своей реализации. ИМХО сдесь объектно-ориентированный подход очень хорошо ложиться. А вот с переносимостью пока только в пределах семейства, все-таки организация на физическом уровне может отличаться. MCS51, PIC, AVR, 196, 166. Нужно писать порты под каждую платфому.
|
|
|
|
|
Feb 20 2009, 08:53
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Цитата(VladimirYU @ Feb 20 2009, 10:38)  Нужно писать порты под каждую платфому. Если Вы смотрели то, что я выкладывал, то там переносимость обеспечивается отвязкой от прерывания через опрос тиков системного таймера, PROGMEM тоже легко будет на const _flash или чего-то подобного - сделаю, как и чтение этого PROGMEMа. И еще мой вариант учитывает возможный опрос линий возврата клавиатуры: Код #include "keyb.h" #include "led7.h" #define T5ms 5000
static timer_t screen_time =0;
if(time_diff(screen_time) > T5ms)
{ screen_time = get_time();
// в таком случае связи модулей led7 и keyb нет вообще do_keyboard(le7s.pos); // делаем то,что надо с экраном do_screen(); } В принципе, можно определить указатель на экран как входной параметр do_screen(led7_scr_t *screen) Тогда можно описывать do_screen где угодно - например в главном модуле. Что думаете?
|
|
|
|
|
Feb 20 2009, 14:22
|

Местный
  
Группа: Свой
Сообщений: 224
Регистрация: 23-11-08
Из: Украина, Луганск
Пользователь №: 41 879

|
Цитата(_Pasha @ Feb 20 2009, 12:53)  В принципе, можно определить указатель на экран как входной параметр do_screen(led7_scr_t *screen) Тогда можно описывать do_screen где угодно - например в главном модуле. Что думаете? Боюсь сморозить чушь (только начинаю изучать), но я обычно (в асме) работу экрана выношу в отдельную, изолированную от всего функцию. У неё нет входных параметров (кроме отображаемого буфера, в который программа пишет необходимые вещи). По прерыванию вызывается процедура экрана, которая сама через указатель из буфера берет байт, перекодирует и выводит в порт. Указатель на буфер и таймер инкрементируется внутри прерывания и программа (основная) не знает, что там экран делает. То же самое с кнопками.
Причина редактирования: Удалена лишняя часть цитаты.
--------------------
«Чтобы что-то изобрести, вам потребуется хорошее воображение и куча мусора» /Томас Эдисон/
|
|
|
|
Сообщений в этой теме
_Pasha 7 сегментов и динамическая индикация Feb 13 2009, 13:34 smac Цитата(_Pasha @ Feb 13 2009, 16:34) Позво... Feb 14 2009, 06:44 _Pasha Цитата(smac @ Feb 14 2009, 09:44) Не совс... Feb 14 2009, 08:11     _Pasha Я в асме делал точно так же - все в прерывании. Н... Feb 20 2009, 14:49      demiurg_spb Цитата(_Pasha @ Feb 20 2009, 17:49) Я в ... Feb 21 2009, 09:23 ukpyr всегда использую промежуточный буфер, сканирование... Feb 19 2009, 22:10
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|