#define T 255 #include #define isCoin() bit_is_clear(PINB,0) #define isStop() bit_is_clear(PINB,1) #define isHimi() bit_is_clear(PINB,6) uint8_t R25=1, S=0; void t_100us(){ uint8_t i; for(i=0;i=10) MM10=0; t=0; ra(); } }else if(S==2){ // だんだんゆっくり if(++t>=R25){ if(++MM10>=10) MM10=0; PORTD=LUT[MM10]; ra(); t=0; R25+=10; if(R25>=100){ ra(); ra(); S=3; MS10=SS=MM=0; PORTB|=0x04; // TVon } } if(isHimi()) S=4; // 秘密スイッチonならS=4 }else if(S==3){ // TV on if(SS&1) PORTB|= 0x10; // 奇数ならドット消灯 else PORTB&=~0x10; // 偶数ならドット点灯 if(++MS10==100){ if(++SS==60){ if(MM10==0){ // 0の時1分後TVoff S=0; PORTB&=~0x04; if(++MM==10){ // 10分毎に PORTD=LUT[--MM10]; // カウントダウン if(MM10==0){ // タイムアウト S=0; PORTB&=~0x04; // TV off } MM=0; } } SS=0; } MS10=0; } }else if(S==4){ if(!isHimi()) S=5; //秘密スイッチoffならS=5 }else if(S==5){ PORTB|=0x04; //TV0n PORTD =0x40; //数字表示を0に if(isHimi()) S=6; //秘密スイッチonならS=6 }else if(S==6){ PORTB&=~0x04; //TVoff PORTD = 0x7f; //数字消灯 if(!isHimi()) S=0; //秘密スイッチoffならS=0 } t_10ms(); //10ms毎にループ } }