Функция для 4 знаков для 7- сегментника.

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

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

Здраствуйте колеги, вот возник такой вопрос, много я видел здесь тем где люди хотели зделать часы, я тоже задался этим вопросом, так для этого нужна простая в управлении функция по управлению 7-ми сегментником на 4 числа. Помогите, пожалуйста, с написанием функции
на С для Code Vision AVR; буду очень благодарен. :))
Мяу-у-у-у-у
Контактная информация:
Реклама
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 185
Зарегистрирован: Чт янв 22, 2009 14:03:25

Сообщение shtorm »

я использую вот такую ф-цию, хотя у меня цели другие, в принцепе и для часов я думаю сойдет, если вызвать ф-цию с нужным параметром (Display(12); ) ф-ция выберит с массива цифры 1 и 2. можно делением но мк отнимает быстрее чем делит.

Код: Выделить всё

void Display (unsigned int Number) //Ф-ция для разложения десятичного цисла
{
  unsigned char Num1, Num2;
  Num1=0;
  while (Number >= 10) 
  {
    Number -= 10;  
    Num1++; 
  }
  Num2 = Number;
  Disp1 = Dig[Num1];
  Disp2 = Dig[Num2];
 } 
void Dig_init(void) //Массив для отображения цыфр на семисегментном индикаторе
{ // тут нужно указать числа которые в двоичном виде будут отображать цифру
  Dig[0] = 95;  
  Dig[1] = 24;
  Dig[2] = 109;
  Dig[3] = 124;
  Dig[4] = 58;
  Dig[5] = 118;
  Dig[6] = 119;
  Dig[7] = 28;
  Dig[8] = 127;
  Dig[9] = 126;
}
Контактная информация:
Реклама
Встал на лапы
Аватара пользователя
Сообщения: 89
Зарегистрирован: Ср июн 04, 2008 01:20:54
Откуда: Украина, Винница
:)

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

а можно на примере посмотреть ии реализацию? ибо я чтото не понимаю как она работает, на какие порты она выдает числа...
Мяу-у-у-у-у
Контактная информация:
Потрогал лапой паяльник
Сообщения: 397
Зарегистрирован: Ср сен 19, 2007 09:21:04

Сообщение chief »

а что тут непонятного. Берем часы (или минуты) запихиваем в эту функцию а потом по очереди выдаем Disp1 (десятки) и Disp2 (еденицы). Потом тоже проделываем с минутами. Данные выводим в любой порт с подключенными индикаторами. Время нужно подбирать но желательно что бы каждая цифра загоралась не менее 25 раз в секунду. А лучше еще чаще.
Реклама
Эиком - электронные компоненты и радиодетали
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1287
Зарегистрирован: Пн окт 13, 2008 11:45:54
Откуда: РФ, Крым, г.Бахчисарай

Сообщение Danko »

Массив "знакогенератора" с общим анодом:

Код: Выделить всё

//вес бита сегмента  
#define A  1
#define B  2
#define C  4 
#define D  8 
#define E 16 
#define F 32 
#define G 64 

unsigned char digits[] = {
        ~(A+B+C+D+E+F),   // 0
        ~(B+C),           // 1
        ~(A+B+D+E+G),     // 2
        ~(A+B+C+D+G),     // 3
        ~(B+C+F+G),       // 4
        ~(A+C+D+F+G),     // 5
        ~(A+C+D+E+F+G),   // 6
        ~(A+B+C),         // 7
        ~(A+B+C+D+E+F+G), // 8
        ~(A+B+C+D+F+G),   // 9
        ~(G),             // 10 - знак минус
        ~(A+B+F+G),       // 11 - символ градус цельсия
        ~(0)              // 12 - пусто
}; 
для общего катода:

Код: Выделить всё

         ...
         unsigned char digits[] = {
        (A+B+C+D+E+F),   // 0
        (B+C),           // 1
        ...
Контактная информация:
Реклама
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 375
Зарегистрирован: Вс мар 04, 2007 13:14:25
Откуда: Украина

Сообщение Krik99 »

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

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

да, но у тебя только на 3 розяда, а нужно для 4-х
Мяу-у-у-у-у
Контактная информация:
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1287
Зарегистрирован: Пн окт 13, 2008 11:45:54
Откуда: РФ, Крым, г.Бахчисарай

Сообщение Danko »

Тарас писал(а):да, но у тебя только на 3 розяда, а нужно для 4-х
На сколько я помню то часы это от 0 до 23 а минуты от 0 до 59.
И по моему часы: это два разряда часов плюс два разряда минут, а у Вас часы и минуты хранятся одним числом.

Да, из проги в два разряда можно сделать хоть двадцать два.

Прошу прощения за флуд.
Контактная информация:
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 375
Зарегистрирован: Вс мар 04, 2007 13:14:25
Откуда: Украина

Сообщение Krik99 »

Тарас писал(а):да, но у тебя только на 3 розяда, а нужно для 4-х

Да там можно хоть и на 6 разрядов переделать исходник ;)
Изображение
Контактная информация:
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 185
Зарегистрирован: Чт янв 22, 2009 14:03:25

Сообщение shtorm »

Тарас тебе не нужно на 4 разряда делать ф-цию, у тебя максимальная цифра 23 - двухзначная, в задачи ф-ции входит разложить число 23 как 2 и 3 так вот тебе нужно вызвать ф-цию с начала для минут например 32 получишь 3 и 2 отобразишь на индекаторе потом вызовешь с часами с секундами и т.д.
Контактная информация:
Закрыто

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