/****************************************** * ハンダゴテタイマ * リビルド * 2016-2-17 * PIC 16F627A * XIDE V3.15 * XC8 V1.35 * 操作音追加(2016-2-20) * データ未設定の場合はスタートしない。 ********************************************/ // PIC16F627A Configuration Bit Settings // 'C' source line config statements #include // #pragma config statements should precede project file includes. // Use project enums instead of #define for ON and OFF. // CONFIG #pragma config FOSC = INTOSCIO // Oscillator Selection bits (INTOSC oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN) #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled) #pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled) #pragma config MCLRE = OFF // RA5/MCLR/VPP Pin Function Select bit (RA5/MCLR/VPP pin function is digital input, MCLR internally tied to VDD) #pragma config BOREN = OFF // Brown-out Detect Enable bit (BOD disabled) #pragma config LVP = OFF // Low-Voltage Programming Enable bit (RB4/PGM pin has digital I/O function, HV on MCLR must be used for programming) #pragma config CPD = OFF // Data EE Memory Code Protection bit (Data memory code protection off) #pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off) #define _XTAL_FREQ 4000000 #define Buzzer RA0 #define Handa RA1 #define Self RA7 #define On 1 #define Off 0 int sw3; int sw2; int sw1; int sw3_data; int sw2_data; int sw1_data; int sw12_data; int sec1_data; int sec10_data; int min1_data; int min10_data; int data_set; int count; int count1; int start_stop; int entyou; int buzzer; int dengen; int sec1_data_w; int sec10_data_w; int min1_data_w; int min10_data_w; unsigned int Power; void count_up(void); void InitInterTimer0 (void); void WaitTime (int cnt); void datahozon(void); void datasaisettei(void); void Clic(void);//操作音追加(2016-2-20) void main(void){ CMCON=0X07; //1,2,17,18 PORTA=0xFF; PORTB=0xFF; TRISA=0x1C; TRISB=0x00; //OSCCON = 0b01110000; //内蔵発振器 8MHz使用に設定 Buzzer=Off;//ブザーoff Handa=Off;//出力電源オフ Self=0;//本体操作(電源ON)HIGHで本体切断 sec1_data=0; sec10_data=0; min1_data=0; min10_data=0; sw3=1; sw2=1; sw1=1; sw3_data=1; sw2_data=1; sw1_data=1; sw12_data=1; min1_data_w=min1_data; min10_data_w=min10_data; start_stop=0;//初期値ストップ buzzer=Off; dengen=Off; entyou=Off; data_set=0; // タイマ0割込み設定関数の呼び出し InitInterTimer0(); // 割込み全体の許可 GIE = 1; for( ; ; ){ //キー入力チェック1 if(RA2==0){ sw3=0;// スタートストップ } if(RA3==0){ sw2=0;//SW2 一分 } if(RA4==0){ sw1=0;//SW1十分 } //LED表示 PORTB=0xf0 | sec1_data_w;//秒1位表示 RB4=0; __delay_us(125); //__delay(250); RB4=1; PORTB=0xf0 | sec10_data_w;//秒10位表示 RB5=0; __delay_us(125); //__delay(250); RB5=1; PORTB=0xf0 | min1_data_w;//分1位表示 RB6=0; __delay_us(125); //__delay(250); RB6=1; PORTB=0xf0 | min10_data_w;//分10位表示 RB7=0; __delay_us(125); //__delay(250); RB7=1; GIE = 0; //キー入力チェック2 //スタートストップチェック if(RA2==0){ if(sw3==0){ if(Power<65000){Power++;} if(Power==5000){RA7=1;}//長押し電源OFF if(sw3_data==1){ sw3_data=0; if(start_stop==1){ start_stop=0; Clic();//操作音追加(2016-2-20) if(entyou==0){Handa=Off;}//延長時以外は、出力電源を切る } else{ if(entyou==0){ if(data_set==1){ if(buzzer==0){datahozon();}//セット時間を保存 start_stop=1; Clic(); } if(data_set==0){ Clic(); } } if(entyou==1){ sec1_data_w=0; sec10_data_w=0; Clic();//操作音追加(2016-2-20) datasaisettei(); entyou=0; start_stop=1; buzzer=0; } //Clic(); } } } } else{ sw3_data=1; sw3=1; Power=0; } //************************************** //1分操作 if(RA3==0){ if(sw2==0){ if(sw2_data==1){ sw2_data=0; if(start_stop==0){ sec1_data_w=0; sec10_data_w=0; if(min1_data_w<9){ Clic();//操作音追加(2016-2-20) min1_data_w++; } else{ Clic();//操作音追加(2016-2-20) min1_data_w=0; } } } } } else{ sw2_data=1; sw2=1; } //************************************** //10分操作 if(RA4==0){ if(sw1==0){ if(sw1_data==1){ sw1_data=0; if(start_stop==0){ sec1_data_w=0; sec10_data_w=0; if(min10_data_w<9){ Clic();//操作音追加(2016-2-20) min10_data_w++; } else{ Clic();//操作音追加(2016-2-20) min10_data_w=0; } } } } } else{ sw1_data=1; sw1=1; } if((min10_data_w+min1_data_w)>0){data_set=1;} //**************************************** //同時操作??セット時間のクリアー if(sw2_data==0){ if(sw1_data==0){ if(sw12_data==1){ sw12_data=0; if(start_stop==0){ min1_data_w=0; min10_data_w=0; data_set=0; buzzer=0; } } } else{ sw12_data=1; } } else{ sw12_data=1; sw1=1; sw2=1; } //*******ブザーオンオフ********************************* if(buzzer==1){ if(min1_data_w==0 && min10_data_w==0 && sec10_data_w==0 && sec1_data_w==0){ if(Buzzer==0){Buzzer=1;sec1_data_w=0;sec10_data_w=2;start_stop=0;entyou=1;} } if(min1_data_w>0 || min10_data_w>0 || sec10_data_w>0 || sec1_data_w>0){ if(Handa==0 && start_stop==1){Handa=1;}//電源オン } } if(buzzer==0){ if(Buzzer==1){ Buzzer=0; //entyou=0; //sec1_data_w=0; //sec10_data_w=0; //datasaisettei(); } } GIE = 1; } } // 割込みサービスルーチン static void interrupt isr(){ //****************延長処理********************* // データ未設定の場合はスタートしない。 if(entyou==1){ if(count<1950){ count++; } else{ if(sec1_data_w>0){ sec1_data_w--; buzzer=1; count=0; } else{ if(sec10_data_w>0){ sec10_data_w--; sec1_data_w=9; count=0; } else{ Self=1;//******************本体電源もオフ********************* for( ; ; ){ } } } } } //***************カウントダウン************** if(start_stop==1 && ((sec1_data_w+sec10_data_w+min1_data+min10_data)>0)){ if(count<1950){ count++; } else{ if(sec1_data_w>0){ sec1_data_w--; buzzer=1; count=0; } else{ if(sec10_data_w>0){ sec10_data_w--; sec1_data_w=9; count=0; } else{ if(min1_data_w>0){ min1_data_w--; sec10_data_w=5; sec1_data_w=9; count=0; } else{ if(min10_data_w>0){ min10_data_w--; min1_data_w=9; sec1_data_w=9; sec10_data_w=5; count=0; } else{ count=0; entyou=1; start_stop=0; //sec1_data_w=0; //sec10_data_w=2;//延長カウント20秒に変更(2016-2-20) } } } } } } //***********************カウントダウン終了******************** // タイマ0割込みフラグをクリア TMR0IF = 0; } void InitInterTimer0 (void){ T0CS = 0;// クロック源を内部クロックに設定 PSA = 0;// プリスケーラをタイマ0に割り当て PS2 = 0;// プリスケーラ値を2に設定 PS1 = 0; PS0 = 0; TMR0 = 0x00;// TMR0レジスタをクリア TMR0IF = 0;// タイマ0割込みフラグをクリア TMR0IE = 1;// タイマ0割込みの許可 } // 待ち時間関数の呼び出し void WaitTime (int cnt){ while(cnt > 0){cnt--;} } void datahozon(void){ min1_data=min1_data_w; min10_data=min10_data_w; } void datasaisettei(void){ min1_data_w=min1_data; min10_data_w=min10_data; } void Clic(void){//操作音追加(2016-2-20) Buzzer=On; __delay_ms(10); Buzzer=Off; }