8bit na dva 4-bitové 0-9 pro dva 7 Segmentový displej

0

Otázka

Chci se počítat od 0-99 s dvěma 7 segment displeje pomocí jednoho 8bit čítač Proměnnou a C++.

Problém je, když Čítač je 10 8 bitů má Hodnotu 0b00001010 ale displeje jsou odděleny tak správné zobrazení potřebuje 4bit binární číslo 0b0000 a levá potřebuje 0b0001, tak na displeji se zobrazí 10. Jak mohu vyřešit tento problém pracovat při zvyšování čítač Hodnotu Proměnné a snižuje čítač Hodnotu Proměnné?

1 2

Zdrojové kódy:

while(1)
    {
        __delay_ms(10);
        
        if(button1 flank detected)
        {
            counter++;
        }
        if(button2 flank detected)
        {
            counter--;
        }
        PORTD = counter;
    }

PORTD je Port na můj mikrokontrolér s 8 piny. Takže pokud PORTD je nastavena na 0b0000 0001 Pin 1 by byla vysoká. Jedle 7 Segmentový displej je připojen k první 4 Piny PORTD a druhý 7 Segmentový displej je připojen k poslední 4 piny.

bit c++
2021-11-23 20:48:26
3
0

Pro začátek bych udělal něco jako toto:

#include <stdint.h>

struct DisplayValues
{
  uint8_t left;
  uint8_t right;
};

DisplayValues getDisplayValues(uint8_t input)
{
  DisplayValues r;
  r.right = input % 10;
  r.left = input / 10;
  return r;
}

Dalo by se také použít nějaké globální proměnné nebo vektor nebo něco místo definování vlastního struct. Důležité v této odpovědi je, jen ukazuje, jak převést číslo mezi 0 a 99 (vstup) na dvě čísla, která představují číslice v desítkové reprezentaci.

2021-11-23 20:53:39

díky to fungovalo
binary
0

"Dva 4-bitové 0-9" se tradičně nazývá binární kódované desetinné místo.

Nahradit:

PORTD = counter;

S:

PORTD =      (counter / 10) << 4 | (counter % 10);
// 10s digit ^^^^^^^^^^^^^^^^^^^   ^^^^^^^^^^^^^^ 1s digit
2021-11-23 21:44:57
0
if(Button1 flank detected)
{
    counter++;
}
if(Button2 flank detected)
{
    counter--;
}

left = (counter / 10) << 4;
right = counter % 10;

out = (left | right);

PORTD = out;
2021-11-23 21:59:07

Zatímco tento fragment kódu může vyřešit otázku, včetně vysvětlení pomůže lidem pochopit důvody vašeho kódu návrh.
Gerhard

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................