Программа для работы с 7-сегментным индикатором

Тема в разделе "Arduino & Shields", создана пользователем Николай Пупсин, 12 фев 2020.

  1. Всем привет. В плане ардуино я ноль. Есть клавиатура 4х4. Надо чтобы на 7-сегментный индикатор при нажатии например 1 показывало 1. Или при нажатии 3 показывало 3. Очень буду благодарен если кто-то поможет. Вот кусочек кода из tinkercad который я ток смог сделать и то с 2 цифрами.
    Спасибо заранее:)

    Код (C++):
    int unnamed = 0;

    int COUNT = 0;

    int ONE = 0;

    int i = 0;

    int TWO = 0;

    int j = 0;

    int k = 0;

    void setup()
    {
      pinMode(13, OUTPUT);
      pinMode(12, OUTPUT);
      pinMode(11, OUTPUT);
      pinMode(10, OUTPUT);
      pinMode(A4, INPUT);
      pinMode(2, OUTPUT);
      pinMode(3, OUTPUT);
      pinMode(4, OUTPUT);
      pinMode(5, OUTPUT);
      pinMode(6, OUTPUT);
      pinMode(7, OUTPUT);
      pinMode(8, OUTPUT);
      pinMode(9, OUTPUT);
      pinMode(A3, INPUT);
    }

    void loop()
    {
      digitalWrite(13, HIGH);
      digitalWrite(12, LOW);
      digitalWrite(11, LOW);
      digitalWrite(10, LOW);
      ONE = digitalRead(A4);
      if (ONE == HIGH) {
        // 2- DP
        digitalWrite(2, LOW);
        // 3- С
        digitalWrite(3, HIGH);
        // 4- D
        digitalWrite(4, LOW);
        // 5- Е
        digitalWrite(5, LOW);
        // 6- G
        digitalWrite(6, LOW);
        // 7- B
        digitalWrite(7, HIGH);
        // 8- A
        digitalWrite(8, LOW);
        // 9- F
        digitalWrite(9, LOW);
        COUNT = (COUNT + 1);
      } else {
        // 2- DP
        digitalWrite(2, LOW);
        // 3- С
        digitalWrite(3, LOW);
        // 4- D
        digitalWrite(4, LOW);
        // 5- Е
        digitalWrite(5, LOW);
        // 6- G
        digitalWrite(6, LOW);
        // 7- B
        digitalWrite(7, LOW);
        // 8- A
        digitalWrite(8, LOW);
        // 9- F
        digitalWrite(9, LOW);
      }
      digitalWrite(12, LOW);
      digitalWrite(11, LOW);
      digitalWrite(10, LOW);
      TWO = digitalRead(A3);
      if (COUNT == 1) {
        // 2- DP
        digitalWrite(2, LOW);
        // 3- С
        digitalWrite(3, LOW);
        // 4- D
        digitalWrite(4, HIGH);
        // 5- Е
        digitalWrite(5, HIGH);
        // 6- G
        digitalWrite(6, HIGH);
        // 7- B
        digitalWrite(7, HIGH);
        // 8- A
        digitalWrite(8, HIGH);
        // 9- F
        digitalWrite(9, LOW);
      } else {
        delay(1000); // Wait for 1000 millisecond(s)
        // 2- DP
        digitalWrite(2, LOW);
        // 3- С
        digitalWrite(3, LOW);
        // 4- D
        digitalWrite(4, LOW);
        // 5- Е
        digitalWrite(5, LOW);
        // 6- G
        digitalWrite(6, LOW);
        // 7- B
        digitalWrite(7, LOW);
        // 8- A
        digitalWrite(8, LOW);
        // 9- F
        digitalWrite(9, LOW);
      }
    }
     
  2. b707

    b707 Гуру

    у вас нет в коде работы с клавиатурой.
    Посмотрите примеры в интернете
     
    NikitOS нравится это.
  3. Спасибо. В интернете все искал и искал но ничего.
     

    Вложения:

  4. Asper Daffy

    Asper Daffy Иксперд

    Значит, не судьба :-(
     
    parovoZZ нравится это.
  5. parovoZZ

    parovoZZ Гуру

    Ну чиста и случайна у меня завалялась функция работы с клавой:

    Код (C++):
    static int8_t Keypad_performScan(void)
    {
        uint8_t pressedKeys = 0;
        uint8_t testRow;
        int8_t keyNum = -1;
        uint8_t col;
        uint8_t row;

        P2OUT = 0x00;    // Set columns to output low

        // Loop the columns, setting only one high at a time
        for (col = 0; col < TOTAL_COLS; col++)
        {
            //Turn on a single column
            switch(col)
            {
                case 0:
                    P2OUT = BIT0;     // select column 0 (Col0)
                    break;
                case 1:
                    P2OUT = BIT1;     // select column 1 (Col1)
                    break;
                case 2:
                    P2OUT = BIT6;     // select column 2 (Col2)
                    break;
                case 3:
                    P2OUT = BIT7;     // select column 3 (Col3)
                    break;
                default:
                    __no_operation(); // add more cases if TOTAL_COLS > 4
                    break;
            }

            pressedKeys = (P1IN & 0x0F);    // Capture the row input

            testRow = BIT0;                 // Start cycling at Row 0

            // Cycle through the rows determining if a key is pressed
            for (row = 0; row < TOTAL_ROWS; row++)
            {
                if (pressedKeys & testRow)
                {
                    keyNum = (row * TOTAL_COLS) + col;  // Calculate button number

                    // Break out of loops
                    col = TOTAL_COLS;
                    row = TOTAL_ROWS;
                }
                testRow = testRow << 1; // Shift to next row
            }
        }

        return(keyNum);
    }
     
    Раскладка:

    Код (C++):
    //                                                
    //           MSP430FR2xxx                          Keypad Matrix
    //        -----------------                >-/ -o  >-/ -o  >-/ -o  >-/ -o
    //        |               |                |    |  |    |  |    |  |    |
    //     /|\|           P1.0|<---o--ROW0-----^----|--^----|--^----|--^    |
    //      | |               |    |                |       |       |       |
    //      --|RST            |   4.7M              |       |       |       |
    //        |               |    |                |       |       |       |
    //        |               |   GND          >-/ -o  >-/ -o  >-/ -o  >-/ -o
    //        |               |                |    |  |    |  |    |  |    |
    //        |           P1.1|<---o--ROW1-----^----|--^----|--^----|--^    |
    //        |               |    |                |       |       |       |
    //       |               |   4.7M              |       |       |       |
    //        |               |    |                |       |       |       |
    //        |               |   GND          >-/ -o  >-/ -o  >-/ -o  >-/ -o
    //        |               |                |    |  |    |  |    |  |    |
    //        |           P1.2|<---o--ROW2-----^----|--^----|--^----|--^    |
    //        |               |    |                |       |       |       |
    //        |               |   4.7M              |       |       |       |
    //        |               |    |                |       |       |       |
    //        |               |   GND          >-/ -o  >-/ -o  >-/ -o  >-/ -o
    //        |               |                |    |  |    |  |    |  |    |  
    //        |           P1.3|<---o--ROW3-----^----|--^----|--^----|--^    |
    //        |               |    |                |       |       |       |
    //        |               |   4.7M              |       |       |       |
    //        |               |    |                |       |       |       |
    //        |               |   GND               |       |       |       |
    //        |           P2.0|-->----COL0----------^       |       |       |
    //        |           P2.1|-->----COL1------------------^       |       |
    //        |           P2.6|-->----COL2--------------------------^       |
    //        |           P2.7|-->----COL3----------------------------------^
    //
    //
    //   Caleb Overbay
    //   Texas Instruments Inc.
    //   Aug 2017
    //   Built with IAR Embedded Workbench v7.10 & Code Composer Studio v7.2