本文へジャンプ 2015年08月05日  
ニキシー管時計

  

ニキシー管 IN−14    (アマゾンなど)
マイコン  ATmega328   (秋月電子 AVRマイコン) 
時計IC RTC8564NB   (秋月電子 RTCモジュール)
12V電源  BJS12SA-U1  イーター電機 (千石電商など)

ニキシー管の基板    (nixie-tube.com で販売)
DC 170V専用電源     (nixie-tube.com で販売)

部品類の中で、ニキシー管基板と専用のDC170v電源は自作せずに、キット購入した。

     
基板 1800円
電源キット 2000円

ニキシー管はソ連製 IN−14である、 アマゾンや上記nixie-tubu 通販でも購入可能である

1本 約1500円

;  


-----------設計概要 --------------------------
;
ニキシー管を専用基板に取り付ける、SN74141 で0〜9桁の表示の
コントロールを行う  SN74141 の耐圧は60vまでOKなので直接コントロールできる。
ニキシー管のアノードには TLP627で6本コントロールする


;

回路図

ATmega328 は ATmega88でもよい
回路図は 10Mのxtal が入っているが、ソフトでは抜いてある
PC5=SCL、 PC4=SDA  TWI 2線直列インターフェース機能を使っている

 制御基板 12v電源、170v電源である

時計IC RTCモジュールは 秋月電子のものを使用する。
JPをショートすると、プルアップ抵抗が入るので、リチウム電池の寿命が減るから注意、

コロン管は ネオンを使用せずに、LEDを使用した。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
プログラムはC言語で組んでみた。



// ニキシー管時計
// N-CLOCK* 2015-8-22
// ATmega328p
// -------------------------------------------------
// ATmega328 内部 Xtal =8M L=E2
//
// D0-D7 OUT
// B0-B7 =IN
// C0-C3 -out
// C4 = SDA C5=SCL
//
//
//----------------------------------------------------


#include <avr/io.h>
#define F_CPU 8000000UL //内部8M
#include <avr/delay.h>
#include <avr/interrupt.h>
#include <avr/eeprom.h>

// 擬似命令

#define LD1_ON PORTD |= _BV(PD0) //コロン
#define LD1_OFF PORTD &=~_BV(PD0)
#define LD2_ON PORTD |= _BV(PD1)
#define LD2_OFF PORTD &=~_BV(PD1)

#define LSL_on PORTD |= _BV(PD2) //管6
#define LSL_off PORTD &=~_BV(PD2)
#define LSH_on PORTD |= _BV(PD3)
#define LSH_off PORTD &=~_BV(PD3)
#define LML_on PORTD |= _BV(PD4)
#define LML_off PORTD &=~_BV(PD4)
#define LMH_on PORTD |= _BV(PD5)
#define LMH_off PORTD &=~_BV(PD5)
#define LHL_on PORTD |= _BV(PD6)
#define LHL_off PORTD &=~_BV(PD6)
#define LHH_on PORTD |= _BV(PD7) //管1
#define LHH_off PORTD &=~_BV(PD7)

#define POC0_ON PORTC |= _BV(PC0) //数字
#define POC0_OFF PORTC &=~_BV(PC0)
#define POC1_ON PORTC |= _BV(PC1)
#define POC1_OFF PORTC &=~_BV(PC1)
#define POC2_ON PORTC |= _BV(PC2)
#define POC2_OFF PORTC &=~_BV(PC2)
#define POC3_ON PORTC |= _BV(PC3)
#define POC3_OFF PORTC &=~_BV(PC3)

#define KEY_M bit_is_clear (PINB,PB3)
#define KEY_U bit_is_clear (PINB,PB1)
#define KEY_D bit_is_clear (PINB,PB2)
#define KEY_Z bit_is_clear (PINB,PB0)
#define KEY_YH bit_is_clear (PINB,PB7)

#define RTC_ADDR_WRITE 0xA2
#define RTC_ADDR_READ 0XA3
#define I2C_BPS 92 //SCL通信速度 TWBR=92


volatile uint8_t aux_d[60]; //書込データ
volatile uint8_t w_data[10]; //書込データ
volatile uint8_t r_data[10]; //読込データ

enum eSAVE
{
MP1,MP2,MP3,MP4,
};

//------------------------------------------------

uint8_t ren_count; //USART data
uint8_t hop_count; //USART data
uint8_t dat1;

uint8_t BRS_flg;
uint8_t BRM_flg;
uint8_t BRH_flg;
uint8_t BR_SEL;

uint8_t Z_flg;
uint8_t dsec;

int8_t sec;
uint8_t dmin; //10進
int8_t min; //16進
uint8_t dhour;
int8_t hour;
uint8_t dday;
int8_t day;
uint8_t dmonth;
int8_t month;
uint8_t dyear;
int16_t year;
uint8_t dweek;
int8_t week;
uint8_t com;
uint8_t ans;
uint8_t dat16;
uint8_t dat10;
uint8_t wdat;

uint8_t n_secL;
uint8_t n_secH;
uint8_t n_minL;
uint8_t n_minH;
uint8_t n_hourL;
uint8_t n_hourH;
uint8_t n_dayL;
uint8_t n_dayH;
uint8_t n_monthL;
uint8_t n_monthH;
uint8_t n_yearL;
uint8_t n_yearH;

uint8_t PO_DAT;
uint8_t outdat;
uint8_t nik1;
uint8_t nik2;
uint8_t nik3;
uint8_t nik4;
uint8_t nik5;
uint8_t nik6;

//*---------------timer-----------------------------

void wait_ms(uint16_t m ) //1=1ms
{
while(m--) _delay_ms(1);
}
//-----
void wait_us(uint16_t m ) //1=1us
{
while(m--) _delay_us(1);
}

// ******* RTCコマンド *********************
// com ---> TWDR (0x02=sec, 0x03=min,0x04=hour,,,)
// TWDR ---> ans
void COM_READ(void)
{

/* 開始条件送出*/
TWCR = (1<<TWINT)|(1<<TWSTA) |(1<<TWEN);
while(!(TWCR & (1<<TWINT))); //;TWINT=1まで待機
/*SLA_W 書込アドレス送出 */
TWDR=0b10100010; //A2
TWCR = (1<<TWINT) | (1<<TWEN);
while(!(TWCR & (1<<TWINT))); //;TWINT=1まで待機
/*DATA RTCアドレス送出 0x02 */
TWDR=com;
TWCR = (1<<TWINT) | (1<<TWEN);
while(!(TWCR & (1<<TWINT))); //;TWINT=1まで待機

/* 開始条件送出*/
TWCR = (1<<TWINT)|(1<<TWSTA) |(1<<TWEN);
while(!(TWCR & (1<<TWINT))); //;TWINT=1まで待機
/*SLA_R 読込アドレス送出 */
TWDR=0b10100011; //A3
TWCR = (1<<TWINT) | (1<<TWEN);
while(!(TWCR & (1<<TWINT))); //;TWINT=1まで待機

/*DATA データ読込 */
TWCR = (1<<TWINT) | (1<<TWEA) | (1<<TWEN);
while(!(TWCR & (1<<TWINT))); //;TWINT=1まで待機
/* 停止条件送出*/
TWCR = (1<<TWINT)|(1<<TWSTO) |(1<<TWEN);
ans=TWDR; //データを取得

}

//-----------------------------
void COM_RS(void)
{

/* 開始条件送出*/
TWCR = (1<<TWINT)|(1<<TWSTA) |(1<<TWEN);
while(!(TWCR & (1<<TWINT))); //;TWINT=1まで待機
/*SLA_W 書込アドレス送出 */
TWDR=0b10100010; //A2
TWCR = (1<<TWINT) | (1<<TWEN);
while(!(TWCR & (1<<TWINT))); //;TWINT=1まで待機
/*DATA RTCアドレス送出 0x02 */
TWDR=0x02;
TWCR = (1<<TWINT) | (1<<TWEN);
while(!(TWCR & (1<<TWINT))); //;TWINT=1まで待機

/* 開始条件送出*/
TWCR = (1<<TWINT)|(1<<TWSTA) |(1<<TWEN);
while(!(TWCR & (1<<TWINT))); //;TWINT=1まで待機
/*SLA_R 読込アドレス送出 */
TWDR=0b10100011; //A3
TWCR = (1<<TWINT) | (1<<TWEN);
while(!(TWCR & (1<<TWINT))); //;TWINT=1まで待機
}
//---------------------
void COM_RE(void)
{
/*DATA データ読込 */
TWCR = (1<<TWINT) | (1<<TWEA) | (1<<TWEN);
while(!(TWCR & (1<<TWINT))); //;TWINT=1まで待機
ans=TWDR; //データを取得

}
//------------------------
void COM_STOP(void)
{
/* 停止条件送出*/
TWCR = (1<<TWINT)|(1<<TWSTO) |(1<<TWEN);
wait_us(100);
}

//----------------------------
void COM_WS(void)
{
/* 開始条件送出*/
TWCR = (1<<TWINT)|(1<<TWSTA) |(1<<TWEN);
while(!(TWCR & (1<<TWINT))); //;TWINT=1まで待機
/*SLA_W 書込アドレス送出 */
TWDR=0b10100010; //A2
TWCR = (1<<TWINT) | (1<<TWEN);
while(!(TWCR & (1<<TWINT))); //;TWINT=1まで待機
/*DATA RTCアドレス送出 0x02 */
TWDR=0x00;
TWCR = (1<<TWINT) | (1<<TWEN);
while(!(TWCR & (1<<TWINT))); //;TWINT=1まで待機

}
//------------------------
void COM_WE(void)
{
/*data 書込み*/
TWDR=wdat; //A3
TWCR = (1<<TWINT) | (1<<TWEN);
while(!(TWCR & (1<<TWINT))); //;TWINT=1まで待機
}





//---- 時間の読み込み プログラム -------------
void READ_TIME(void)
{
int i;


COM_RS();

for(i=2;i<9;i++){
COM_RE();
r_data[i]=ans;
}


COM_STOP();

dsec=r_data[2] & 0x7F;
dmin=r_data[3] & 0x7F;
dhour=r_data[4] & 0x3F;
dday=r_data[5] & 0x3F;
dweek=r_data[6] & 0x07;
dmonth=r_data[7]& 0x1F;
dyear=r_data[8] & 0xFF;

}
//----- data エリア -------------
void READ_DAT(void)
{

r_data[0] =0x20; //CNT0
r_data[1] =0x00; //CNT2
r_data[2] =0x00; //sec
r_data[3] =0x00; //min
r_data[4] =0x00; //hour
r_data[5] =0x00; //day
r_data[6] =0x00; //Wday
r_data[7] =0x00; //month
r_data[8] =0x00; //year
}
void TENSOU(void)
{

w_data[0] =r_data[0]; //CNT0
w_data[1] =r_data[1]; //CNT2
w_data[2] =r_data[2]; //sec
w_data[3] =r_data[3]; //min
w_data[4] =r_data[4]; //hour
w_data[5] =r_data[5]; //day
w_data[6] =r_data[6]; //Wday
w_data[7] =r_data[7]; //month
w_data[8] =r_data[8]; //year
}



//---- INIT TIME -------------
void INIT_TIME(void)
{
int i;

COM_WS();
for(i=0;i<9;i++){
wdat=w_data[i];
COM_WE();
}
COM_STOP();

com=0x00;
wdat=0b00000000; //start
COM_WS();
COM_WE();
COM_STOP();
}
//----- WRITE TIME -------------
void WRITE_DAT(void)
{

w_data[0] =0x20; //CNT0
w_data[1] =0x00; //CNT2
w_data[2] =0x00; //sec
w_data[3] =0x22; //min
w_data[4] =0x11; //hour
w_data[5] =0x05; //day
w_data[6] =0x00; //Wday
w_data[7] =0x09; //month
w_data[8] =0x15; //year
}

//--取得データ10進のまま、分けてメモリに入れる
void CRT_10(void)
{
n_secL =(dsec & 0x0F);
n_secH =(dsec >> 4) & 0x07;
n_minL =(dmin & 0x0F);
n_minH =(dmin >> 4) & 0x07;
n_hourL =(dhour & 0x0F);
n_hourH =(dhour >> 4) & 0x03;
n_dayL =(dday & 0x0F);
n_dayH =(dday >> 4) & 0x03;

week = dweek & 0x07;
n_monthL =(dmonth & 0x0F);
n_monthH =(dmonth >> 4) & 0x01;
n_yearL =(dyear & 0x0F);
n_yearH =(dyear >> 4) & 0x0F;

}

// ニキシー管メモリに入れる 時分秒ーーーーーー
void CRT_TIME(void)
{
nik1=n_hourH;
nik2=n_hourL;
nik3=n_minH;
nik4=n_minL;
nik5=n_secH;
nik6=n_secL;
Z_flg=0;
}
// ニキシー管メモリに入れる 年月日ーーーーーー
void CRT_YEAR(void)
{
nik1=n_yearH;
nik2=n_yearL;
nik3=n_monthH;
nik4=n_monthL;
nik5=n_dayH;
nik6=n_dayL;
Z_flg=1;

}

//---- 10進ーー>16進変換---------
// dat16 のデータを 10進に変換し dat10 に戻す。
void henkan16(void)
{
sec =((dsec >> 4) & 0x07)*10 + (dsec & 0x0F);
min =((dmin >> 4) & 0x07)*10 + (dmin & 0x0F);
hour =((dhour >> 4) & 0x03)*10 + (dhour & 0x0F);
day =((dday >> 4) & 0x03)*10 + (dday & 0x0F);

week = dweek & 0x07;
month =((dmonth >> 4) & 0x01)*10 + (dmonth & 0x0F);
year =((dyear >> 4) & 0x0F)*10 + (dyear & 0x0F);
}

//---- 16進ーー>10進変換---------
// dat16 のデータを 10進に変換し dat10 に戻す。
void henkan10(void)
{
dat10 = ((dat16 / 10) << 4) | (dat16 % 10);

}

//-----数字出力------------------------------------------------------
//PO_DAT に数値を入れて 
void PO_OUT(void)
{
if(PO_DAT == 0){POC0_OFF;POC1_OFF;POC2_OFF;POC3_OFF;} //0000 0
if(PO_DAT == 1){POC0_ON;POC1_OFF;POC2_OFF;POC3_OFF;} //0001 1
if(PO_DAT == 2){POC0_OFF;POC1_ON;POC2_OFF;POC3_OFF;} //0010 2
if(PO_DAT == 3){POC0_ON;POC1_ON;POC2_OFF;POC3_OFF;} //0011 3
if(PO_DAT == 4){POC0_OFF;POC1_OFF;POC2_ON;POC3_OFF;} //0100 4
if(PO_DAT == 5){POC0_ON;POC1_OFF;POC2_ON;POC3_OFF;} //0101 5
if(PO_DAT == 6){POC0_OFF;POC1_ON;POC2_ON;POC3_OFF;} //0110 6
if(PO_DAT == 7){POC0_ON;POC1_ON;POC2_ON;POC3_OFF;} //0111 7
if(PO_DAT == 8){POC0_OFF;POC1_OFF;POC2_OFF;POC3_ON;} //1000 8
if(PO_DAT == 9){POC0_ON;POC1_OFF;POC2_OFF;POC3_ON;} //1001 9
if(PO_DAT >> 9){POC0_OFF;POC1_OFF;POC2_OFF;POC3_OFF;} //以外


}

//-------------------------------------------------------------------
// 設定タイム 点滅ルーチン
// KEY_M 押すと 2管づつ点滅させる
// KEY_M でアップする

void SET_YH(void)
{

BRS_flg=10; //点滅時間
BRM_flg=10;
BRH_flg=10;
BR_SEL=4; //セレクト 時=2 分=1 秒=0

while (1){

if (BRS_flg > 5){LHH_on;}
if (BRS_flg > 40){LHH_off;}




wait_ms(3);
PO_DAT = nik1;
PO_OUT();
LHH_off;

if (BRH_flg > 5){LHL_on;}
if (BRH_flg > 40){LHL_off;}

wait_ms(5);
PO_DAT = nik2;
PO_OUT();
LHL_off;

if (BRH_flg > 5){LMH_on;}
if (BRH_flg > 40){BRH_flg=0;LMH_off;}

wait_ms(4);
PO_DAT = nik3;
PO_OUT();

LMH_off;

if (BRM_flg > 5){LML_on;}
if (BRM_flg > 40){BRM_flg=0;LML_off;}

wait_ms(4);
PO_DAT = nik4;
PO_OUT();
LML_off;

if (BRM_flg > 5){LSH_on;}
if (BRM_flg > 40){BRM_flg=0;LSH_off;}

wait_ms(3);
PO_DAT = nik5;
PO_OUT();
LSH_off;

if (BRS_flg > 5){LSL_on;}
if (BRS_flg > 40){BRS_flg=0;LSL_off;}

wait_ms(3);
PO_DAT = nik6;
PO_OUT();
LSL_off;

if(BR_SEL == 0 ){BRS_flg++;}
if(BR_SEL == 1 ){BRM_flg++;}
if(BR_SEL == 2 ){BRH_flg++;}
if(BR_SEL == 3 ){break;}
if(KEY_M){BR_SEL++;
wait_ms(500);
if(BR_SEL >3 ){BR_SEL=0;}
}

if(BR_SEL == 1){S_MIN();}
if(BR_SEL == 2){S_HOUR();}

if(KEY_Z){
INIT_TIME();
wait_ms(1000);
break;
}

}
}

//-----分セット-------------------------------------
void S_MIN(void)
{
henkan16();

if(KEY_U){min++;
if (min > 59){min=0;}
wait_ms(300);

dat16=min;
henkan10();
dmin=dat10;
nik4 =(dmin & 0x0F);
nik3 =(dmin >> 4) & 0x07;

w_data[3]=dat10;
}
if(KEY_D){min--;
if(min < 0 ){min=59;}
wait_ms(300);

dat16=min;
henkan10();
dmin=dat10;
nik4 =(dmin & 0x0F);
nik3 =(dmin >> 4) & 0x07;
w_data[3]=dat10;
}


}
//-----分セット-------------------------------------
void S_HOUR(void)
{
henkan16();

if(KEY_U){hour++;
if (hour > 23){hour=0;}
wait_ms(300);

dat16=hour;
henkan10();
dhour=dat10;
nik2 =(dhour & 0x0F);
nik1 =(dhour >> 4) & 0x07;
w_data[4]=dat10;

}
if(KEY_D){hour--;
if(hour < 0 ){hour=23;}
wait_ms(300);

dat16=hour;
henkan10();
dhour=dat10;
nik2 =(dhour & 0x0F);
nik1 =(dhour >> 4) & 0x07;
w_data[4]=dat10;
}

}


//-------------------------------------------------------------------
// 設定 年月 点滅ルーチン
// KEY_M 押すと 2管づつ点滅させる
// KEY_M でアップする

void SET_YY(void)
{

BRS_flg=10; //点滅時間
BRM_flg=10;
BRH_flg=10;
BR_SEL=4; //セレクト 時=2 分=1 秒=0

while (1){

if (BRS_flg > 5){LHH_on;}
if (BRS_flg > 40){LHH_off;}




wait_ms(3);
PO_DAT = nik1;
PO_OUT();
LHH_off;

if (BRH_flg > 5){LHL_on;}
if (BRH_flg > 40){LHL_off;}

wait_ms(5);
PO_DAT = nik2;
PO_OUT();
LHL_off;

if (BRH_flg > 5){LMH_on;}
if (BRH_flg > 40){BRH_flg=0;LMH_off;}

wait_ms(4);
PO_DAT = nik3;
PO_OUT();

LMH_off;

if (BRM_flg > 5){LML_on;}
if (BRM_flg > 40){BRM_flg=0;LML_off;}

wait_ms(4);
PO_DAT = nik4;
PO_OUT();
LML_off;

if (BRM_flg > 5){LSH_on;}
if (BRM_flg > 40){BRM_flg=0;LSH_off;}

wait_ms(3);
PO_DAT = nik5;
PO_OUT();
LSH_off;

if (BRS_flg > 5){LSL_on;}
if (BRS_flg > 40){BRS_flg=0;LSL_off;}

wait_ms(3);
PO_DAT = nik6;
PO_OUT();
LSL_off;

if(BR_SEL == 0 ){BRS_flg++;}
if(BR_SEL == 1 ){BRM_flg++;}
if(BR_SEL == 2 ){BRH_flg++;}
if(BR_SEL == 3 ){break;}
if(KEY_M){BR_SEL++;
wait_ms(500);
if(BR_SEL >3 ){BR_SEL=0;}
}

if(BR_SEL == 0){S_DAY();}
if(BR_SEL == 1){S_MON();}
if(BR_SEL == 2){S_YEAR();}

if(KEY_Z){
INIT_TIME();
wait_ms(1000);
break;
}

}
}

//-----日セット-------------------------------------
void S_DAY(void)
{
henkan16();

if(KEY_U){day++;
if (day > 31){day=0;}
wait_ms(300);

dat16=day;
henkan10();
dday=dat10;
nik6 =(dday & 0x0F);
nik5 =(dday >> 4) & 0x07;

w_data[5]=dat10;
}
if(KEY_D){day--;
if(day < 0 ){day=31;}
wait_ms(300);

dat16=day;
henkan10();
dday=dat10;
nik6 =(dday & 0x0F);
nik5 =(dday >> 4) & 0x07;
w_data[5]=dat10;
}


}
//-----月セット-------------------------------------
void S_MON(void)
{
henkan16();

if(KEY_U){month++;
if (month > 12){month=0;}
wait_ms(300);

dat16=month;
henkan10();
dmonth=dat10;
nik4 =(dmonth & 0x0F);
nik3 =(dmonth >> 4) & 0x07;
w_data[7]=dat10;

}
if(KEY_D){month--;
if(month < 0 ){month=12;}
wait_ms(300);

dat16=month;
henkan10();
dmonth=dat10;
nik4 =(dmonth & 0x0F);
nik3 =(dmonth >> 4) & 0x07;
w_data[7]=dat10;
}

}
//-----年セット-------------------------------------
void S_YEAR(void)
{
henkan16();

if(KEY_U){year++;
if (year > 99){hour=0;}
wait_ms(300);

dat16=year;
henkan10();
dyear=dat10;
nik2 =(dyear & 0x0F);
nik1 =(dyear >> 4) & 0x07;
w_data[8]=dat10;

}
if(KEY_D){year--;
if(year < 0 ){year=99;}
wait_ms(300);

dat16=year;
henkan10();
dyear=dat10;
nik2 =(dyear & 0x0F);
nik1 =(dyear >> 4) & 0x07;
w_data[8]=dat10;
}

}

//-------キー操作----------------------------------------------------
// 仮に YHをモードにしておく
//
void KEY_IN(void)
{
if(KEY_YH){
if (Z_flg == 0){
LD1_OFF;
CRT_YEAR();
wait_ms(500);
LD1_ON;

}else{
LD1_OFF;
CRT_TIME();
wait_ms(500);
LD1_ON;
}
}



if (KEY_M){
TENSOU(); //読んだ時刻をw_data[0]へ転送しておく
//時刻設定で0にもどらないようにする

if(Z_flg == 0){SET_YH();}else{SET_YY();}
}


}


//-----------------------------------------------------------

int main () {



//初期化 出力=1 入力=0
// RTC8564 JP1,JP2 はオープンにして、PC5,PC4はプルアップする


DDRB = 0x00; // 0b0000-0000
DDRC = 0x0F; // 0b1111-0000
DDRD = 0xFF; // 0b1111-1111

PORTC = 0x3F; // H 出力
PORTB = 0x00; //
PORTD = 0x00; // H 出力


//---------------------------------------------
// SCL=8M/(16+ 2*32*1)=100kHz
TWBR=32;
TWSR=0x00; //ビット速度値
TWCR=0b00000100; // TWI SCL/SDA で使用する
//---------------------
/* 開始条件送出*/



READ_TIME(); // RTC 時刻読取 --->dyear-dsec
CRT_10(); //取得時間を 10進のままメモリに入れる
CRT_TIME(); // ニキシー管に 時、分、秒を表示


outdat=0;



while(1){


KEY_IN();

LHH_on;
wait_ms(3);
PO_DAT = nik1;
PO_OUT();
LHH_off;
LHL_on;
wait_ms(5);
PO_DAT = nik2;
PO_OUT();
LHL_off;
LMH_on;
wait_ms(4);
PO_DAT = nik3;
PO_OUT();


LMH_off;
LML_on;
wait_ms(4);
PO_DAT = nik4;
PO_OUT();
LML_off;
LSH_on;
wait_ms(3);
PO_DAT = nik5;
PO_OUT();
LSH_off;
LSL_on;
wait_ms(3);
PO_DAT = nik6;
PO_OUT();
LSL_off;


LD1_ON;
LD2_ON;
READ_TIME(); // RTC 時刻読取 --->dyear-dsec
CRT_10();
if(Z_flg == 0){CRT_TIME();}else{CRT_YEAR();}

} //while(1)終了

return 0;

}