Как выводить цифры на индикатор???

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Вымогатель припоя
Аватара пользователя
Сообщения: 568
Зарегистрирован: Вт мар 04, 2008 20:03:03
Откуда: Нижний Новгород

Сообщение megasvintus »

У меня очередной вопрос:
Как отобразить любую цифру на 7 сегментном индикаторе понятно, но как сделать так, чтобы программа брала значение переменной, скажем, 8, или 4, находила как ее отображать в функции-декодере и выводила на индикатор??? Я накопал много примеров, но они все на АСМе, расскажите пожалуйста как это сделать на СИ, с подробными комментариями.
Трудно быть деревянным, совсем трудно....
Реклама
Модератор
Аватара пользователя
Сообщения: 4673
Зарегистрирован: Вс июн 01, 2008 00:17:35
Откуда: Я всего лишь плод вашего воображения...

Сообщение Пухич »

Здесь все очень просто - делаешь например switch, а внутри него сопоставляешь каждой цифре код ее отображения и затем этот код пихаешь в соотв регистр. И все.

Если речь идет о выводе чисел больше девяти по модулю, то несколько усложняется из-за того, что надо поделить число на 10, 100, 1000 и т.д. (вернее это все в обратном порядке) и определить таким образом вес каждого десятичного разряда. А затем вес каждого разряда снова передаешь в свой switch с кодами цифр.

Могу накидать на Си примерный алгоритм если надо. А может и сам разберешься. Там все в прниципе просто.
Знание - сила!
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18786
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Ни в коем случае не делай по совету Пухича!!!

это крайне неудачный вариант, громоздкий, не универсальный...

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

Мой уютный бложик... заходите!
Контактная информация:
Вымогатель припоя
Аватара пользователя
Сообщения: 568
Зарегистрирован: Вт мар 04, 2008 20:03:03
Откуда: Нижний Новгород

Сообщение megasvintus »

Все выложенное там круто, но пока половина непонятна. Сказывается недостаток знания функций СИ

Комментарии не для самых начинающих! Позже дойдет

Для начала бы что попроще..... :shock:
Трудно быть деревянным, совсем трудно....
Реклама
Эиком - электронные компоненты и радиодетали
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18786
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

гм... куда уж проще-то?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Модератор
Аватара пользователя
Сообщения: 4673
Зарегистрирован: Вс июн 01, 2008 00:17:35
Откуда: Я всего лишь плод вашего воображения...

Сообщение Пухич »

ARV писал(а):Ни в коем случае не делай по совету Пухича!!!
это крайне неудачный вариант, громоздкий, не универсальный...
Какой вы умный!

Чем в идеологическом отношении ваше творение отличается от моих мыслей вслух? И чем оно "универсальнее"?

Статья кстати очень простая. Как раз начинающему.
Знание - сила!
Реклама
Прорезались зубы
Аватара пользователя
Сообщения: 200
Зарегистрирован: Пт ноя 17, 2006 21:57:43

Сообщение Телерадиокошак »

Пухич писал(а):Чем в идеологическом отношении ваше творение отличается от моих мыслей вслух?
Мне тоже интересно стало:)

Видимо речь о том, что выбор конкретного элемента массива (out = SYMBOLS[m]) будет работать быстрее и занимать меньше памяти, чем последовательный перебор на предмет равентсва (switch, то бишь).

Хотя насчет универсальности можно поспорить, так же как и насчет "крайней неудачности".
Модератор
Аватара пользователя
Сообщения: 4673
Зарегистрирован: Вс июн 01, 2008 00:17:35
Откуда: Я всего лишь плод вашего воображения...

Сообщение Пухич »

Да ладно, пусть аффтар делает как хочет. Это его право.
Знание - сила!
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18786
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

речь о том, что метод switch-ей для 3-разрядов - это одна программа, для 4-х разрядов - другая и т.д. т.е. нет универсальности - постоянно требуется правка кода. Как быть с дробными числами?

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

P.S. Я не настаиваю - делайте, как хотите. Но если уж учиться - надо учиться делать красиво, логично и удобно - во всяком случае стремиться к этому.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Вымогатель припоя
Аватара пользователя
Сообщения: 568
Зарегистрирован: Вт мар 04, 2008 20:03:03
Откуда: Нижний Новгород

Сообщение megasvintus »

А смысл в слове "быстрее" будет работать???? При производительности чипа на 16 мегагерцах абсолютно всеравно....
И памяти благо-выше крыши... Может конечно я неправ.

Разъясните пожалуйста как ЭТО работает, вот строчки, приведенные с вашего сайта:

void convert(unsigned int NUM){
int i, m;
for(i=MAX_SIZE-1; i>=0; i--){
// цикл заполнения выходного массива СПРАВА НАЛЕВО
m = NUM % DIG_BASE; // находим остаток от деления числа на основание
out = SYMBOLS[m]; // этот остаток есть ВЫВОДИМАЯ ЦИФРА
NUM /= DIG_BASE; // уменьшаем число в DIG_BASE раз
}
}

1) почему сама функция convert идет с параметрами unsigned int NUM (0-65535), а объявляемые переменные i, m имеют тип int (-32768-32767) ? с for все ясно
2)void convert(unsigned int NUM) А может "unsigned int NUM" как раз то число, которое будем отображать? как вообще функции дают знать что хотим отображать?

3)пусть массив заполнили, и как то, что получилось,передается в функцию-декодер вида (число 1 это 0b00000011- , число 2 0b01101101и так далее, в зависимости от того . как выводы подключены к сегментам индикатора)



ARV, позвольте не согласитьсь с вами. что писать сразу надо красиво.
новичку сложно так. Для начала надо понять что вообще происходит, а красота и компактность придет сама и постепенно.
Трудно быть деревянным, совсем трудно....
Прорезались зубы
Аватара пользователя
Сообщения: 219
Зарегистрирован: Вт сен 18, 2007 16:41:16
Откуда: Украина, г. Запорожье

Сообщение alex2103 »

megasvintus
И памяти благо-выше крыши... Может конечно я неправ.
Вот в этом как раз и не правы... Памяти много когда просто ногой дергаешь. А потом оказываеться что ее очень мало :)
А метод ARV мегаудобный и мало памяти занимает :) Сам им пользуюсь и очень нравиться. Вы бы сели и один раз разобрались с этим...
1) почему сама функция convert идет с параметрами unsigned int NUM (0-65535), а объявляемые переменные i, m имеют тип int (-32768-32767) ? с for все ясно
непринципиально...
2)void convert(unsigned int NUM) А может "unsigned int NUM" как раз то число, которое будем отображать? как вообще функции дают знать что хотим отображать?
не понятен вопрос... unsigned int NUM - это параметр который мы будем передавать функции. Функция же ничего не возврашает...она заполняет значениями глобальный массив.
3)пусть массив заполнили, и как то, что получилось,передается в функцию-декодер вида (число 1 это 0b00000011- , число 2 0b01101101и так далее, в зависимости от того . как выводы подключены к сегментам индикатора)
Потом в прерывании обрабатываете полученный массив и дергаете там ногами...
Контактная информация:
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18786
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

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

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

Мой уютный бложик... заходите!
Контактная информация:
Вымогатель припоя
Аватара пользователя
Сообщения: 568
Зарегистрирован: Вт мар 04, 2008 20:03:03
Откуда: Нижний Новгород

Сообщение megasvintus »

Спасибо большое за ответы. Сидел.... ДОЛГО сидел.... КИПЕЛ.... Разобрался во всем. И вправду-проще не придумаешь!!! :)) :))) :))) :)))
Трудно быть деревянным, совсем трудно....
KIP
Первый раз сказал Мяу!
Сообщения: 36
Зарегистрирован: Ср июл 09, 2008 11:48:16
Откуда: Обнинск

Сообщение KIP »

megasvintus писал(а): Разъясните пожалуйста как ЭТО работает, вот строчки, приведенные с вашего сайта.
Дайте ссылку на полный текс программы
Вымогатель припоя
Аватара пользователя
Сообщения: 568
Зарегистрирован: Вт мар 04, 2008 20:03:03
Откуда: Нижний Новгород

Сообщение megasvintus »

на кнопку WWW у автора сообщений ARV кликните....
Трудно быть деревянным, совсем трудно....
Встал на лапы
Аватара пользователя
Сообщения: 89
Зарегистрирован: Ср июн 04, 2008 01:20:54
Откуда: Украина, Винница

Сообщение Тарас »

Вот здесь очень отличная стаття на ATtiny 2313 c 3 секцыями 7-сигментников!

http://avru.cwx.ru/viewtopic.php?t=16&s ... 000d766586
Мяу-у-у-у-у
Контактная информация:
Вымогатель припоя
Аватара пользователя
Сообщения: 568
Зарегистрирован: Вт мар 04, 2008 20:03:03
Откуда: Нижний Новгород

Сообщение megasvintus »

Тарас писал(а):Вот здесь очень отличная стаття на ATtiny 2313 c 3 секцыями 7-сигментников!

http://avru.cwx.ru/viewtopic.php?t=16&s ... 000d766586
Есть что почерпнуть! Нравится и то, что массив записан сразу в EEPROM
Трудно быть деревянным, совсем трудно....
Модератор
Аватара пользователя
Сообщения: 11169
Зарегистрирован: Чт окт 27, 2005 18:50:07
Откуда: из мест не столь отдалённых

Сообщение Сэр Мурр »

Послушайте мнение модератора- Товарищ АРВ очень грамотный спец, отмеченный лично Котом- Духом Сайта. Так что следуйте его рекомендациям.
Вымогатель припоя
Аватара пользователя
Сообщения: 568
Зарегистрирован: Вт мар 04, 2008 20:03:03
Откуда: Нижний Новгород

Сообщение megasvintus »

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

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

Кстати в том алгоритме есть косяк... Я ведь испытываю его на реальном устройстве. Косяк я поправил, кстати получил опыт поиска ошибок в программе. Но в конечном итоге я пришел к варианту ARV.
Трудно быть деревянным, совсем трудно....
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»