7 сегментник - kem5461ar

Тема в разделе "Arduino & Shields", создана пользователем Максим B, 6 дек 2022.

  1. Максим B

    Максим B Гуру

    Всем привет. Сижу туплю, на макетке собирал схему для 7 сегментника из 2 разрядов все работало. А тут купил индикатор 4-х разрядный 7 сегментный KEM5461 с общим катдом. Пытаюсь вывести в любом из разрядов одну цифру, цифра отображается корректно, но сразу во всех сегментах. Что я делаю не так? Схема во вложении.


    Код (Text):

    #define segmentA 2
    #define segmentB 3
    #define segmentC 4
    #define segmentD 5
    #define segmentE 6
    #define segmentF 7
    #define segmentG 8
    #define segmentDP 9

    #define DIGIT_1PIN 10  //(1)     //1234
    #define DIGIT_2PIN 11  //(2)
    #define DIGIT_3PIN 12  //(3)
    #define DIGIT_4PIN 13  //(4)


    int t1 = 1234;



    void show_number(int num)
    {
      switch(num)
      {
        case 0:
        digitalWrite(segmentA, HIGH);
        digitalWrite(segmentB, HIGH);
        digitalWrite(segmentC, HIGH);
        digitalWrite(segmentD, HIGH);
        digitalWrite(segmentE, HIGH);
        digitalWrite(segmentF, HIGH);
        digitalWrite(segmentG, LOW);
        break;
        case 1:
        digitalWrite(segmentA, LOW);
        digitalWrite(segmentB, HIGH);
        digitalWrite(segmentC, HIGH);
        digitalWrite(segmentD, LOW);
        digitalWrite(segmentE, LOW);
        digitalWrite(segmentF, LOW);
        digitalWrite(segmentG, LOW);
        break;
        case 2:
        digitalWrite(segmentA, HIGH);
        digitalWrite(segmentB, HIGH);
        digitalWrite(segmentC, LOW);
        digitalWrite(segmentD, HIGH);
        digitalWrite(segmentE, HIGH);
        digitalWrite(segmentF, LOW);
        digitalWrite(segmentG, HIGH);
        break;
        case 3:
        digitalWrite(segmentA, HIGH);
        digitalWrite(segmentB, HIGH);
        digitalWrite(segmentC, HIGH);
        digitalWrite(segmentD, HIGH);
        digitalWrite(segmentE, LOW);
        digitalWrite(segmentF, LOW);
        digitalWrite(segmentG, HIGH);
        break;
        case 4:
        digitalWrite(segmentA, LOW);
        digitalWrite(segmentB, HIGH);
        digitalWrite(segmentC, HIGH);
        digitalWrite(segmentD, LOW);
        digitalWrite(segmentE, LOW);
        digitalWrite(segmentF, HIGH);
        digitalWrite(segmentG, HIGH);
        break;
        case 5:
        digitalWrite(segmentA, HIGH);
        digitalWrite(segmentB, LOW);
        digitalWrite(segmentC, HIGH);
        digitalWrite(segmentD, HIGH);
        digitalWrite(segmentE, LOW);
        digitalWrite(segmentF, HIGH);
        digitalWrite(segmentG, HIGH);
        break;
        case 6:
        digitalWrite(segmentA, HIGH);
        digitalWrite(segmentB, LOW);
        digitalWrite(segmentC, HIGH);
        digitalWrite(segmentD, HIGH);
        digitalWrite(segmentE, HIGH);
        digitalWrite(segmentF, HIGH);
        digitalWrite(segmentG, HIGH);
        break;
        case 7:
        digitalWrite(segmentA, HIGH);
        digitalWrite(segmentB, HIGH);
        digitalWrite(segmentC, HIGH);
        digitalWrite(segmentD, LOW);
        digitalWrite(segmentE, LOW);
        digitalWrite(segmentF, LOW);
        digitalWrite(segmentG, LOW);
        break;
        case 8:
        digitalWrite(segmentA, HIGH);
        digitalWrite(segmentB, HIGH);
        digitalWrite(segmentC, HIGH);
        digitalWrite(segmentD, HIGH);
        digitalWrite(segmentE, HIGH);
        digitalWrite(segmentF, HIGH);
        digitalWrite(segmentG, HIGH);
        break;
        case 9:
        digitalWrite(segmentA, HIGH);
        digitalWrite(segmentB, HIGH);
        digitalWrite(segmentC, HIGH);
        digitalWrite(segmentD, HIGH);
        digitalWrite(segmentE, LOW);
        digitalWrite(segmentF, HIGH);
        digitalWrite(segmentG, HIGH);
        break;
        default:
        digitalWrite(segmentA, LOW);
        digitalWrite(segmentB, HIGH);
        digitalWrite(segmentC, HIGH);
        digitalWrite(segmentD, HIGH);
        digitalWrite(segmentE, HIGH);
        digitalWrite(segmentF, LOW);
        digitalWrite(segmentG, HIGH);
        break;
      }
    }



    void setup() {
      Serial.begin(9600);
      pinMode(segmentA, OUTPUT);
      pinMode(segmentB, OUTPUT);
      pinMode(segmentC, OUTPUT);
      pinMode(segmentD, OUTPUT);
      pinMode(segmentE, OUTPUT);
      pinMode(segmentF, OUTPUT);
      pinMode(segmentG, OUTPUT);
     
      pinMode(DIGIT_1PIN, OUTPUT);
      pinMode(DIGIT_2PIN, OUTPUT);
      pinMode(DIGIT_3PIN, OUTPUT);
      pinMode(DIGIT_4PIN, OUTPUT);
    }

    void loop() {
      digitalWrite(DIGIT_1PIN, LOW);
      digitalWrite(DIGIT_2PIN, LOW);
      digitalWrite(DIGIT_3PIN, LOW);
      digitalWrite(DIGIT_4PIN, LOW);
      delay(5);

      int a = t1 % 10;
                digitalWrite(DIGIT_1PIN,LOW);
                digitalWrite(DIGIT_2PIN,LOW);
                digitalWrite(DIGIT_3PIN,LOW);
                digitalWrite(DIGIT_4PIN,HIGH);
                show_number(a);
                Serial.println(a);
                delay(5);          
    }
     
    [​IMG]
     

    Вложения:

    • 1.png
      1.png
      Размер файла:
      51,9 КБ
      Просмотров:
      268
    Последнее редактирование модератором: 6 дек 2022
  2. parovoZZ

    parovoZZ Гуру

    неправильное включение транзисторов. Биполярный транзистор управляется током, подаваемым в базу. А здесь они выполняют функцию диодов.
     
    Airbus нравится это.
  3. parovoZZ

    parovoZZ Гуру

    да и программу можно прилично ужать. Достаточно писать целиком весь порт, а не по одному биту.
     
  4. Airbus

    Airbus Радиохулиган Модератор

    Именно!Базы транзисторов через резистор 1 ком подключить к пинам D9D12 ардуино а коллекторы этих самых транзисторов к выводам DIG1-DIG4 индикатора
    [​IMG]
     
    Последнее редактирование: 6 дек 2022
    Ariadna-on-Line нравится это.
  5. a1000

    a1000 Гуру

    Какой порт? Это-ж ардуино. У него и сегменты от разных портов запитаны.
     
  6. parovoZZ

    parovoZZ Гуру

    это ничего не значит. Так же через ИЛИ назначаешь уровни и по И их снимаешь. Вместо портянки получится 2-4 строчки.