hwthinker icon

DNMPB28-01-test 4x seven segment

hwthinker | PRO | 04/05/24 01:24:03 AM UTC (Edited) | 0 ⭐ | 11503 👁️ | Never ⏰ | []
Arduino |

1.27 KB

|

None

|

0 👍

/

0 👎

#define uchar unsigned char
#define uint unsigned int
 
const int latchPin = 5, clockPin = 6, dataPin = 3, OE_595 = 4;
 
uchar TUBE_SEG[] = {
  0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, // 0-9
  0x77, 0x7c, 0x39, 0x58, 0x5e, 0x79, 0x71, 0x76, 0x74, 0x38, //  A, b, C, c, d, E, F, H, h, L
  0x54, 0x37, 0x5c, 0x73, 0x50, 0x78, 0x3e, 0x40, 0x00        // n, N, o, P, r, t, U, -, (spasi)
};
 
uchar TUBE_NUM[8] = {0xfe, 0xff, 0xfd, 0xff, 0xfb, 0xff, 0xf7, 0xff};
uchar dat_buf[8], dat, com_num;
 
void TubeDisplayOneBit() {
  uchar tube_dat = TUBE_SEG[dat], bit_num = TUBE_NUM[com_num];
 
  digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, MSBFIRST, bit_num);
  shiftOut(dataPin, clockPin, MSBFIRST, tube_dat);
  digitalWrite(latchPin, HIGH);
}
 
void TubeDisplay4Bit(int num) {
  if (com_num < 7) com_num++;
  else com_num = 0;
 
  dat = dat_buf[com_num];
  TubeDisplayOneBit();
 
  dat_buf[6] = num % 10;
  num /= 10;
  dat_buf[4] = num % 10;
  num /= 10;
  dat_buf[2] = num % 10;
  num /= 10;
  dat_buf[0] = num % 10;
}
 
void setup() {
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
  pinMode(OE_595, OUTPUT);
  delay(100);
  digitalWrite(OE_595, LOW);
}
 
void loop() {
  TubeDisplay4Bit(6543);
}

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎