цифровая электроника
вычислительная техника
встраиваемые системы

 

Простой Arduino-счетчик на 7-сегментном индикаторе

Автор: Mike(admin) от 17-03-2014, 06:41

Это простой проект на Arduino, заключающийся в создании счетчика на обычном 7-сегментном индикаторе с общим катодом. Код, приведенный ниже, позволяет при нажатии кнопки запускать счет от 0 до 9.


7-сегментный индикатор

Вся схема может быть запитана от стандартной 9-вольтовой батарейки или от любого Arduino-совместимого блока питания.


7-сегментный индикатор

7-сегментный индикатор – очень простое устройство. Он представляет собой комбинацию 8 светодиодов (восьмой светодиод отвечает за точку) с общим катодом, которые можно включать в определенной последовательности так, чтобы они образовывали цифры. Следует обратить внимание, что в данном случае выводы 3 и 8 отведены под катод.


7-сегментный индикатор и Arduino

Ниже показана таблица соответствия выводов Arduino и выводов индикатора.


выводы 7-сегментного индикатора и Arduino

Код этого проекта:



/* 
Arduino-счетчик на 7-сегментном индикаторе с общим катодом
Выводы Arduino: 2,3,4,5,6,7,8
Выводы индикатора: 7,6,4,2,1,9,10
Выводы индикатора 3 и 8 должны быть соединены с землей
Кнопка на вывод 9
Источник: http://www.electroschematics.com/9636/arduino-segment-display-counter/
*/
byte numbers[10] = { 
                    B11111100, B01100000, B11011010, B11110010, B01100110, 
                    B10110110, B10111110, B11100000, B11111110, B11100110 
                    };
void setup() { 
    for(int i = 2; i <= 8; i++) {
        pinMode(i, OUTPUT); 
    }
    pinMode(9, INPUT);
}

int counter = 0;
bool go_by_switch = true;
int last_input_value = LOW;

void loop() {
    if(go_by_switch) {
        int switch_input_value = digitalRead(9);
        if(last_input_value == LOW && switch_input_value == HIGH) {
            counter = (counter + 1) % 10;
        }
        last_input_value = switch_input_value;
    } else {
        delay(500); 
        counter = (counter + 1) % 10;
    }
    writeNumber(counter);
}

void writeNumber(int number) {
    if(number < 0 || number > 9) {
        return;
    }
    byte mask = numbers[number];
    byte currentPinMask = B10000000;
    for(int i = 2; i <= 8; i++) {
        if(mask & currentPinMask) digitalWrite(i,HIGH); 
        else digitalWrite(i,LOW);
    currentPinMask = currentPinMask >> 1;
    }
}



Перевод © digitrode.ru


<Источник>


Теги: Arduino




Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий
Цитата
  • Группа: Гости
  • ICQ:
  • Регистрация: --
  • Статус:
  • Комментариев: 0
  • Публикаций: 0
^
Здравствуйте, скажите пожалуйста: можно реализовать проект, используя ваш пример, чтобы он работал следующим образом: есть 6 кнопок и 6 одноразрядных дисплеев. В хаотичной последовательности нажимаем кнопки, при чем на каждом табле выводится цифра, соответствующая очередности включения. (Нажали одну кнопку загорелась 1, нажали другую кнопку загорелась 2). Если возможно, подскажите пожалуйста как это осуществить