Advertisement
hwthinker

DNMPB28-01-test 4x seven segment

Apr 4th, 2024 (edited)
884
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #define uchar unsigned char
  2. #define uint unsigned int
  3.  
  4. const int latchPin = 5, clockPin = 6, dataPin = 3, OE_595 = 4;
  5.  
  6. uchar TUBE_SEG[] = {
  7.   0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, // 0-9
  8.   0x77, 0x7c, 0x39, 0x58, 0x5e, 0x79, 0x71, 0x76, 0x74, 0x38, //  A, b, C, c, d, E, F, H, h, L
  9.   0x54, 0x37, 0x5c, 0x73, 0x50, 0x78, 0x3e, 0x40, 0x00        // n, N, o, P, r, t, U, -, (spasi)
  10. };
  11.  
  12. uchar TUBE_NUM[8] = {0xfe, 0xff, 0xfd, 0xff, 0xfb, 0xff, 0xf7, 0xff};
  13. uchar dat_buf[8], dat, com_num;
  14.  
  15. void TubeDisplayOneBit() {
  16.   uchar tube_dat = TUBE_SEG[dat], bit_num = TUBE_NUM[com_num];
  17.  
  18.   digitalWrite(latchPin, LOW);
  19.   shiftOut(dataPin, clockPin, MSBFIRST, bit_num);
  20.   shiftOut(dataPin, clockPin, MSBFIRST, tube_dat);
  21.   digitalWrite(latchPin, HIGH);
  22. }
  23.  
  24. void TubeDisplay4Bit(int num) {
  25.   if (com_num < 7) com_num++;
  26.   else com_num = 0;
  27.  
  28.   dat = dat_buf[com_num];
  29.   TubeDisplayOneBit();
  30.  
  31.   dat_buf[6] = num % 10;
  32.   num /= 10;
  33.   dat_buf[4] = num % 10;
  34.   num /= 10;
  35.   dat_buf[2] = num % 10;
  36.   num /= 10;
  37.   dat_buf[0] = num % 10;
  38. }
  39.  
  40. void setup() {
  41.   pinMode(latchPin, OUTPUT);
  42.   pinMode(clockPin, OUTPUT);
  43.   pinMode(dataPin, OUTPUT);
  44.   pinMode(OE_595, OUTPUT);
  45.   delay(100);
  46.   digitalWrite(OE_595, LOW);
  47. }
  48.  
  49. void loop() {
  50.   TubeDisplay4Bit(6543);
  51. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement