/* Use for VFD Number display Skeleton Ver 1.0 of 2013/03/19 make of Kyohritsu Electric CO. LTD. http://keic.jp/ */ #include #include #define LDCP 12 #define PW_SW 11 #define S1 10 #define S2 9 const uint16_t seg[]={ 0b00111111, //0 0b00000110, //1 0b01011011, //2 0b01001111, //3 0b01100110, //4 0b01101101, //5 0b01111101, //6 0b00100111, //7 0b01111111, //8 0b01101111, //9 0b01001110111, //A, 0b00001011110, //d 0b00000011110, //j 0b01001110011, //P, 0b01110110, //H 0 //BLANK }; #define CHR_A 10 #define CHR_d 11 #define CHR_j 12 #define CHR_P 13 #define CHR_H 14 #define BLANK 15 volatile uint16_t seg_data[10]; volatile uint8_t int_ct; void setup() { Serial.begin(9600); pinMode(LDCP, OUTPUT); digitalWrite(LDCP,1); //4094 L,D,CP pinMode(PW_SW, OUTPUT); digitalWrite(PW_SW,0); //HV Power pinMode(S1, INPUT); digitalWrite(S1,1); //PULL UP ON pinMode(S2, INPUT); digitalWrite(S2,1); //PULL UP ON Timer1.initialize(50); //20KHz Timer1.attachInterrupt( timerIsr ); // attach the service routine here delay(10); for(uint8_t i=0;i<10;i++)seg_data[i]=seg[BLANK]; } void loop() { } void timerIsr() { static char state=0,digit=0; static uint16_t SSR; static uint8_t sub_count=10; digitalWrite(PW_SW,0); digitalWrite(PW_SW,0); digitalWrite(PW_SW,1); if((state != 0) && (state<=16)){ digitalWrite(LDCP,1); //DCP=L digitalWrite(LDCP,0); //DCP=H clockを作る } if(state==0){ SSR=(seg_data[digit] & 0x0fff) | ((uint16_t)digit<<12); if(digit>=9)digit=0; else digit++; } if(state<16){ if(SSR & 0x8000)digitalWrite(LDCP,0); else digitalWrite(LDCP,1); SSR <<= 1; state++; } else { state++; } if(state>=25){ state=0; } if(--sub_count==0){ //make 10mS sub_count=200; int_ct++; } }