Stránka 1 z 1

Jednoduché počítadlo se zápisem na segmentový display

Napsal: 05 lis 2019, 22:58
od Grymo
Dobrý den,
toto je kód pro jednoduché počítadlo. Čísla se na displeji zobrazují ve formátu: 0003, 0015 adt., potřeboval bych se těchto nul před čísly zbavit. Prosím pomožte mi s úpravou kódu. Děkuji!
Zde je kód:

Kód: Vybrat vše

#define pinLatch 4
#define pinClk 7
#define pinData 8
#define ON LOW
#define OFF HIGH
int counter = 0;
const byte mapSegment[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0X80,0X90};
const byte mapDigit[] = {0xF1,0xF2,0xF4,0xF8};
 
void setup () {
  pinMode(pinLatch, OUTPUT);
  pinMode(pinClk, OUTPUT);
  pinMode(pinData, OUTPUT);
  WriteNumberToSegment(3 , 0);
}

void WriteNumberToSegment(byte Segment, byte Value) {
  digitalWrite(pinLatch, LOW);
  shiftOut(pinData, pinClk, MSBFIRST, mapSegment[Value]);
  shiftOut(pinData, pinClk, MSBFIRST, mapDigit[Segment] );
  digitalWrite(pinLatch, HIGH);
}

void WriteNumberToDisplay(byte number) {
  WriteNumberToSegment(0 , number / 1000);
  WriteNumberToSegment(1 , (number / 100) % 10);
  WriteNumberToSegment(2 , (number / 10) % 10);
  WriteNumberToSegment(3 , number % 10);
}

void loop() {
  bool button1 = digitalRead(A1);
  bool button2 = digitalRead(A2);
  bool button3 = digitalRead(A3);
  if (button1 == ON) {
    counter++;
    if (counter > 9999) {
      counter = 9999;
    }
    delay(200);
  }
  if (button2 == ON) {
    counter--;
    if (counter < 0) {
      counter = 0;
    }
  delay(200);
  }
  if (button3 == ON) {
    counter = 0;
    delay(200);
    }
  WriteNumberToDisplay(counter);
}

Re: Jednoduché počítadlo se zápisem na segmentový display

Napsal: 06 lis 2019, 00:55
od gilhad
Napriklad takto primocare:

Kód: Vybrat vše


void WriteNumberToDisplay(byte number) {
if (number>=1000) { WriteNumberToSegment(0 , number / 1000); } else {WriteSpaceToSegment(0););
if (number>=100) { WriteNumberToSegment(1 , (number / 100) % 10);} else {WriteSpaceToSegment(1););
if (number>=10) { WriteNumberToSegment(2 , (number / 10) % 10);} else {WriteSpaceToSegment(2););
WriteNumberToSegment(3 , number % 10);
}

a napsat tu WriteSpaceToSegment(byte Segment){};

Re: Jednoduché počítadlo se zápisem na segmentový display

Napsal: 06 lis 2019, 12:43
od Grymo
Děkuji mockrát :)

Re: Jednoduché počítadlo se zápisem na segmentový display

Napsal: 06 lis 2019, 23:08
od AstroMiK
A ještě pozor na to, že proměnná typu "byte" může být maximálně 255, takže se ten řád tisíců stejně nikdy nezobrazí.