#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
0 B
|👍
/👎