//********************************************************************** void main() { static unsigned int ad, adbuf[30], cnt, max, min; // CMCON = 0b00000111; ANSEL = 0b00000100; TRISA = 0b00111111; TRISB = 0b00000000; OSCCON = 0b01110000; // for (cnt = 0; cnt < 10; cnt++) { PORTB = 0b00000000; PORTA = 0b00000000; Delay_ms(100); PORTB = 0b11111111; PORTA = 0b11000000; Delay_ms(100); } while (1) { // アナログデータを30個読み込む for (cnt = 0; cnt < 30; cnt++) adbuf[cnt] = Adc_Read(2); // その30個のデータから最大値と最小値を求める max = 0; min = 1024; for (cnt = 0; cnt < 30; cnt++) { max = (max < adbuf[cnt]) ? adbuf[cnt] : max; min = (min > adbuf[cnt]) ? adbuf[cnt] : min; } // 最大値と最小値の差を求める ad = (max - min) / 100; // switch (ad) { case 0: PORTB = 0b11111110; PORTA.F6 = 1; PORTA.F7 = 1; break; case 1: PORTB = 0b11111100; PORTA.F6 = 1; PORTA.F7 = 1; break; case 2: PORTB = 0b11111000; PORTA.F6 = 1; PORTA.F7 = 1; break; case 3: PORTB = 0b11110000; PORTA.F6 = 1; PORTA.F7 = 1; break; case 4: PORTB = 0b11100000; PORTA.F6 = 1; PORTA.F7 = 1; break; case 5: PORTB = 0b11000000; PORTA.F6 = 1; PORTA.F7 = 1; break; case 6: PORTB = 0b10000000; PORTA.F6 = 1; PORTA.F7 = 1; break; case 7: PORTB = 0b00000000; PORTA.F6 = 1; PORTA.F7 = 1; break; case 8: PORTB = 0b00000000; PORTA.F6 = 0; PORTA.F7 = 1; break; case 9: PORTB = 0b00000000; PORTA.F6 = 0; PORTA.F7 = 0; break; } Delay_ms(10); } } //**********************************************************************