//******************************************************************************** /* <簡易砂時計(スイッチ不要)> */ //******************************************************************************** #define SW1 GPIO.F0 #define SW2 GPIO.F1 #define SW3 GPIO.F2 #define SP TRISIO.F4 #define LED GPIO.F5 #define INPUT_MODE 1 #define OUTPUT_MODE 0 #define ON 0 #define OFF -1 //******************************************************************************** static int clock, blink; void interrupt(){ if (PIR1.CCP1IF == 1) { PIR1.CCP1IF = 0; // if (blink != OFF) { blink++; if (blink == 5) { LED = ~LED; blink = ON; } } // clock++; } } //******************************************************************************** short Delay_sec(unsigned int sec) { clock = 0; blink = OFF; sec *= 10; while (clock < sec) { if ((clock % 10) == 0) { LED = 1; Sound_Play(3000, 50); //3kHz×50msec LED = 0; } // SP = INPUT_MODE; if (Adc_Read(3) > 100) { SP = OUTPUT_MODE; blink = ON; return (-1); } SP = OUTPUT_MODE; } blink = ON; // return (0); } //******************************************************************************** void main() { // OSCCON = 0b01010000; //クロックを2Mhzに設定 CMCON0 = 0b00000111; //コンパレータは使用しない。 ANSEL = 0b00001000; //A/D変換はAN3を使用する。 TRISIO = 0b00001111; //入出力ポートを設定する。 // CCPの設定 PIE1.CCP1IE = 1; PIR1.CCP1IF = 0; CCP1CON = 0b00001011; CCPR1L = 0x6A; // 0.1sec...10hz...クロックが2Mhzの時 CCPR1H = 0x18; // 0.1sec...(1÷8000000)*4*8*6250 // TIMER1の設定 PIE1.TMR1IE = 0; PIR1.TMR1IF = 0; TMR1L = 0; TMR1H = 0; T1CON.T1CKPS0 = 1; T1CON.T1CKPS1 = 1; T1CON.TMR1ON = 1; // Sound_Init(&GPIO, 4); // clock = 0; blink = ON; // 割り込みの設定 INTCON.PEIE = 1; INTCON.GIE = 1; while (1) { SP = INPUT_MODE; while (Adc_Read(3) < 100) ; SP = OUTPUT_MODE; // if (Delay_sec(60 + (60 * (GPIO & 0x07))) == 0) { LED = 1; Sound_Play(523, 250); //ド(ピン) LED = 0; Sound_Play(659, 250); //ミ(ポン) LED = 1; Sound_Play(784, 250); //ソ(パン) LED = 0; Sound_Play(1047, 500); //ド(ポーン) LED = 1; Delay_ms(500); LED = 0; Sound_Play(1047, 250); //ド(ピン) LED = 1; Sound_Play(784, 250); //ソ(ポン) LED = 0; Sound_Play(659, 250); //ミ(パン) LED = 1; Sound_Play(523, 500); //ド(ポーン) LED = 0; } // Delay_ms(500); } } //********************************************************************************