Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы

Способы вывода данных на семисегментный индикатор

Непрочитано 28.07.2011, 17:23  
heady69
Прописка
 
Регистрация: 25.09.2009
Адрес: Ivanovo
Сообщений: 156
Сказал спасибо: 3
Сказали Спасибо 67 раз(а) в 60 сообщении(ях)
heady69 на пути к лучшему
По умолчанию Re: Способы вывода данных на семисегментный индикатор

А почему не сделать как примерно советовал MisterDi.
Функция сдвигает буфер и вставляет новый символ.

Код:
//сдвиг буфера на 1 символ

buffer_rotate(unsigned char new_sumbol){
 unsigned char i;
for (i=led_buff_size-1;i›0;i--) { led_buff[i+1]=led_buff[i]; } //сдвигаем буфер 
//вставляем в буфер новый символ
led_buff[0]=new_sumbol;
}
другая функция читает данные из и выводит последовательно,при достижении символа конца строки $,начинает вывод снова.

Код:
unsigned char line_data[]={"a","b","c","d","$"};


run_line (){
  unsigned char pointer=0;
  unsigned char j;
loop:
  j= line_data[pointer++];
  if(j=="$") {pointer=0; goto loop;}
  buffer_rotate(j)
 goto loop;
}
Реклама:

Последний раз редактировалось heady69; 28.07.2011 в 17:41.
heady69 вне форума  
Сказали "Спасибо" heady69
artyomugr (29.07.2011)
Непрочитано 29.07.2011, 12:34  
artyomugr
Вид на жительство
 
Аватар для artyomugr
 
Регистрация: 05.04.2008
Адрес: Украина, Ахтырка
Сообщений: 302
Сказал спасибо: 148
Сказали Спасибо 31 раз(а) в 30 сообщении(ях)
artyomugr на пути к лучшему
По умолчанию Re: Способы вывода данных на семисегментный индикатор

Сообщение от heady69 Посмотреть сообщение
А почему не сделать как примерно советовал MisterDi.
Функция сдвигает буфер и вставляет новый символ.

Код:
//сдвиг буфера на 1 символ

buffer_rotate(unsigned char new_sumbol){
 unsigned char i;
for (i=led_buff_size-1;i›0;i--) { led_buff[i+1]=led_buff[i]; } //сдвигаем буфер 
//вставляем в буфер новый символ
led_buff[0]=new_sumbol;
}
другая функция читает данные из и выводит последовательно,при достижении символа конца строки $,начинает вывод снова.

Код:
unsigned char line_data[]={"a","b","c","d","$"};


run_line (){
  unsigned char pointer=0;
  unsigned char j;
loop:
  j= line_data[pointer++];
  if(j=="$") {pointer=0; goto loop;}
  buffer_rotate(j)
 goto loop;
}
Долго пытался понять как это работает... да так и не понял....
Можете по каждой строчке разьяснить... много мне не понятного тут..
Понимаю только то что буфер постоянно инкриментируется. Пробовал в своем исходнике в буфере инкриметировать переменную, компилятор заругался...
artyomugr вне форума  
Непрочитано 31.07.2011, 07:49  
Flopix
Гражданин KAZUS.RUN
 
Регистрация: 31.12.2010
Сообщений: 837
Сказал спасибо: 371
Сказали Спасибо 153 раз(а) в 113 сообщении(ях)
Flopix на пути к лучшему
По умолчанию Re: Способы вывода данных на семисегментный индикатор

heady69, а зачем используется команда goto или цикл for это тоже не оптимизировано для подобного камня?
Flopix вне форума  
Непрочитано 01.08.2011, 13:04  
heady69
Прописка
 
Регистрация: 25.09.2009
Адрес: Ivanovo
Сообщений: 156
Сказал спасибо: 3
Сказали Спасибо 67 раз(а) в 60 сообщении(ях)
heady69 на пути к лучшему
По умолчанию Re: Способы вывода данных на семисегментный индикатор

Сообщение от artyomugr Посмотреть сообщение
Долго пытался понять как это работает... да так и не понял....
много мне не понятного тут..
А в каком функции непонятно?
heady69 вне форума  
Непрочитано 02.08.2011, 08:51  
artyomugr
Вид на жительство
 
Аватар для artyomugr
 
Регистрация: 05.04.2008
Адрес: Украина, Ахтырка
Сообщений: 302
Сказал спасибо: 148
Сказали Спасибо 31 раз(а) в 30 сообщении(ях)
artyomugr на пути к лучшему
По умолчанию Re: Способы вывода данных на семисегментный индикатор

Сообщение от heady69 Посмотреть сообщение
А в каком функции непонятно?
В обеих...
artyomugr вне форума  
Непрочитано 02.08.2011, 11:54  
heady69
Прописка
 
Регистрация: 25.09.2009
Адрес: Ivanovo
Сообщений: 156
Сказал спасибо: 3
Сказали Спасибо 67 раз(а) в 60 сообщении(ях)
heady69 на пути к лучшему
По умолчанию Re: Способы вывода данных на семисегментный индикатор

Код:
buffer_rotate(unsigned char new_sumbol){
 unsigned char i;
for (i=led_buff_size-1;i›0;i--) { led_buff[i+1]=led_buff[i]; } //в этом цикле перезаписываем данные в буфере вывода на индикатор т.е. если длина буфера (led_buff_size) напр.=6 элемент буфера 5 переписывается на место 6, 4-›5, 3-›4 и т.д. 
//вставляем в буфер новый символ
led_buff[0]=new_sumbol; //сдесь в начало буфера вставляется новый символ
}
Код:
unsigned char line_data[]={"a","b","c","d","$"}; // буфер данных для вывода 


run_line (){
  unsigned char pointer=0; // сбрасываем указатель
  unsigned char j;
loop:
  j= line_data[pointer++]; //получаем новый символ для вывода на строку
  if(j=="$") {pointer=0; goto loop;} //если конец бегущей строки,сброс указателя и начинаем выдавать по новой
  buffer_rotate(j); //передаем программе новый символ (она сдвинет старые данные и вставит его в начало буфера вывода данных на индикаторы)
 goto loop;
}

Последний раз редактировалось heady69; 02.08.2011 в 12:04.
heady69 вне форума  
Сказали "Спасибо" heady69
artyomugr (03.08.2011)
Непрочитано 03.08.2011, 11:37  
artyomugr
Вид на жительство
 
Аватар для artyomugr
 
Регистрация: 05.04.2008
Адрес: Украина, Ахтырка
Сообщений: 302
Сказал спасибо: 148
Сказали Спасибо 31 раз(а) в 30 сообщении(ях)
artyomugr на пути к лучшему
По умолчанию Re: Способы вывода данных на семисегментный индикатор

Сообщение от Nfc Посмотреть сообщение
А ещё практикуют математику с вещественными числами реализовывать на сдвигах и ..и много ещё чего - какой ужас!

Это не жесть, это адекватное понимание возможностей платформы с которой имеешь дело.
Вы сравните размер и скорость выполнения кода - сами примете на вооружение.
А разьясните мне пожалуйста как разложить число используя вместо деления вычитание?
С ув. Артем
artyomugr вне форума  
Непрочитано 03.08.2011, 11:40  
artyomugr
Вид на жительство
 
Аватар для artyomugr
 
Регистрация: 05.04.2008
Адрес: Украина, Ахтырка
Сообщений: 302
Сказал спасибо: 148
Сказали Спасибо 31 раз(а) в 30 сообщении(ях)
artyomugr на пути к лучшему
По умолчанию Re: Способы вывода данных на семисегментный индикатор

Сообщение от heady69 Посмотреть сообщение
Код:
buffer_rotate(unsigned char new_sumbol){
 unsigned char i;
for (i=led_buff_size-1;i›0;i--) { led_buff[i+1]=led_buff[i]; } //в этом цикле перезаписываем данные в буфере вывода на индикатор т.е. если длина буфера (led_buff_size) напр.=6 элемент буфера 5 переписывается на место 6, 4-›5, 3-›4 и т.д. 
//вставляем в буфер новый символ
led_buff[0]=new_sumbol; //сдесь в начало буфера вставляется новый символ
}
Код:
unsigned char line_data[]={"a","b","c","d","$"}; // буфер данных для вывода 


run_line (){
  unsigned char pointer=0; // сбрасываем указатель
  unsigned char j;
loop:
  j= line_data[pointer++]; //получаем новый символ для вывода на строку
  if(j=="$") {pointer=0; goto loop;} //если конец бегущей строки,сброс указателя и начинаем выдавать по новой
  buffer_rotate(j); //передаем программе новый символ (она сдвинет старые данные и вставит его в начало буфера вывода данных на индикаторы)
 goto loop;
}


Теперь стало понятнее спасибо
artyomugr вне форума  
Непрочитано 03.08.2011, 13:17  
kazusdoc
Частый гость
 
Регистрация: 23.05.2009
Сообщений: 46
Сказал спасибо: 1
Сказали Спасибо 4 раз(а) в 2 сообщении(ях)
kazusdoc на пути к лучшему
По умолчанию Re: Способы вывода данных на семисегментный индикатор

Сообщение от artyomugr
А разьясните мне пожалуйста как разложить число используя вместо деления вычитание?
Код:
val=1000; //делимое
x=4; //делитель
y=0; //частное

while(val›x){
val-=x;
y++;
} // для чисел без знака
kazusdoc вне форума  
Непрочитано 03.08.2011, 13:20  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,821
Сказал спасибо: 919
Сказали Спасибо 4,289 раз(а) в 2,570 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: Способы вывода данных на семисегментный индикатор

Лучше потом посмотреть, какой объем этот код будет занимать )))
Easyrider83 вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Методика и способы воостановления данных diman_the_best Ремонт оргтехники 0 25.10.2010 00:20


Часовой пояс GMT +4, время: 12:21.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.