I built and published here a 6 digit nixie clock: Six Digit Nixie Clock . It was some time ago now.
I've taken your code with a few changes but not optimised it and I've assumed the pin numbers etc. are correct. It should display "091452" across the display (but you can change that in the code).
// 6 Digit Nixie
// ATMEGA328P
#define A 18 // pin 3 on the K1551D1 Chip
#define B 2 // pin 6 on the K1551D1 Chip
#define C 3 // pin 7 on the K1551D1 Chip
#define D 19 // pin 4 on the K1551D1 Chip
// #define N1 4 // Nixie Tube 1
// #define N2 5 // Nixie Tube 2
// #define N3 6 // Nixie Tube 3
// #define N4 11 // Nixie Tube 4
// #define N5 12 // Nixie Tube 5
// #define N6 13 // Nixie Tube 6
#define UP 23 // Menu UP
#define DN 24 // Menu Down
#define MU 25 // Enter Menu
#define AL 14 // Alarm out
// anode pins - tubes numbered 0 to 5
const uint8_t anodes[6] = { 4, 5, 6, 11, 12, 13 };
// for later optimisation
uint8_t digits[10][4]{
{ 0, 0, 0, 0 }, // 0
{ 0, 0, 0, 1 }, // 1
{ 0, 0, 1, 0 }, // 2
{ 0, 0, 1, 1 }, // 3
{ 0, 1, 0, 0 }, // 4
{ 0, 1, 0, 1 }, // 5
{ 0, 1, 1, 0 }, // 6
{ 0, 1, 1, 1 }, // 7
{ 1, 0, 0, 0 }, // 8
{ 1, 0, 0, 1 } // 9
};
// change this if required
uint8_t display[6] = { 0, 9, 1, 4, 5, 2 }; // this should appear on the display
void setup() {
Serial.begin(115200);
pinMode(A, OUTPUT);
pinMode(B, OUTPUT);
pinMode(C, OUTPUT);
pinMode(D, OUTPUT);
for (uint8_t i = 0; i < 6; i++) {
pinMode(anodes[i], OUTPUT);
}
}
void loop() {
static uint32_t laststrobeAtMs = 0;
static uint8_t tube = 0;
if (millis() - laststrobeAtMs > 4 ) { // more than 5ms gives flicker
laststrobeAtMs = millis();
for (uint8_t i = 0; i < 6; i++) digitalWrite(anodes[i], LOW); // all tubes off
// for later optimisation
digitalWrite(A, digits[display[tube]][3]);
digitalWrite(B, digits[display[tube]][2]);
digitalWrite(C, digits[display[tube]][1]);
digitalWrite(D, digits[display[tube]][0]);
/*
Serial.print ("tube ") ;
Serial.println( tube );
Serial.print (digits[display[tube]][3]) ;
Serial.print (digits[display[tube]][2]) ;
Serial.print (digits[display[tube]][1]) ;
Serial.print (digits[display[tube]][0]) ;
Serial.println() ;
*/
digitalWrite(anodes[tube], HIGH); // switch current tube anode on
if ( ++tube >= 6) tube = 0; // cycle to next tube
// any other code goes here - don't block for too long
}
}