//********************************************************************** #define ledR GPIO.F0 #define ledG GPIO.F4 #define ledB GPIO.F5 #define SWITCH GPIO.F3 //********************************************************************** static unsigned char led_cnt, ledR_cnt, ledG_cnt, ledB_cnt; void interrupt(){ if (INTCON.T0IF == 1) { INTCON.T0IF = 0; GPIO.F1 = ~GPIO.F1; // if ((led_cnt <= ledR_cnt) && (ledR_cnt != 0)) ledR = 0; else ledR = 1; // if ((led_cnt <= ledG_cnt) && (ledG_cnt != 0)) ledG = 0; else ledG = 1; // if ((led_cnt <= ledB_cnt) && (ledB_cnt != 0)) ledB = 0; else ledB = 1; // if (led_cnt < 9) led_cnt++; else led_cnt = 0; } if (PIR1.TMR1IF == 1) { PIR1.TMR1IF = 0; } } //********************************************************************** void Pwm_Change_DutyEx(unsigned int duty_ratio) { CCPR1L = duty_ratio >> 2; CCP1CON.F6 = duty_ratio & 0b00000001; CCP1CON.F7 = (duty_ratio & 0b00000010) >> 1; } //********************************************************************** void buzzer() { Pwm_Init(500); Pwm_Change_DutyEx((PR2 * 4) / 2); Pwm_Start(); Delay_ms(100); Pwm_Stop(); // Pwm_Init(1000); Pwm_Change_DutyEx((PR2 * 4) / 2); Pwm_Start(); Delay_ms(100); Pwm_Stop(); // Pwm_Init(2000); Pwm_Change_DutyEx((PR2 * 4) / 2); Pwm_Start(); Delay_ms(100); Pwm_Stop(); // Pwm_Init(4000); Pwm_Change_DutyEx((PR2 * 4) / 2); Pwm_Start(); Delay_ms(100); Pwm_Stop(); // Pwm_Init(8000); Pwm_Change_DutyEx((PR2 * 4) / 2); Pwm_Start(); Delay_ms(100); Pwm_Stop(); } //********************************************************************** void main() { unsigned char cntR, cntG, cntB; unsigned int tmp, ref; OSCCON = 0b01110000; // クロックは8Mhz CMCON0 = 0b00000111; // コンパレータは使用しない。 ANSEL = 0b00000010; // AN1を使用する。 TRISIO = 0b00001010; GPIO = 0b00000000; OPTION_REG = 0b10000000; // INTCON.T0IE = 1; INTCON.T0IF = 0; OPTION_REG.T0CS = 0; OPTION_REG.PSA = 1; OPTION_REG.PS0 = 0; OPTION_REG.PS1 = 0; OPTION_REG.PS2 = 0; // led_cnt = 0; ledR_cnt = 0; ledG_cnt = 0; ledB_cnt = 0; // INTCON.PEIE = 1; // これ以降の処理で割り込みを許可する。 INTCON.GIE = 1; // これ以降の処理で割り込みを許可する。 // ref = Adc_Read(1); while (1) { if (SWITCH == 0) { ref = Adc_Read(1); } if (Adc_Read(1) > ref) { ledR_cnt = 0; ledG_cnt = 0; ledB_cnt = 0; continue; } tmp = rand(); ledR_cnt = (((double)tmp) / 32768.0) * 10.0; tmp = rand(); ledG_cnt = (((double)tmp) / 32768.0) * 10.0; tmp = rand(); ledB_cnt = (((double)tmp) / 32768.0) * 10.0; buzzer(); Delay_ms(1000); } } //**********************************************************************