//********************************************************************** /*   <簡易レベルメータ(8チャネル×8ドット)> */ //********************************************************************** extern void main(); extern void interrupt(); extern void opening_demonstration(); //********************************************************************** char bar_col[9] = { 0b00000000, 0b10000000, 0b11000000, 0b11100000, 0b11110000, 0b11111000, 0b11111100, 0b11111110, 0b11111111 }; char bar_row[9] = { 0b11111110, 0b11111101, 0b11111011, 0b11110111, 0b11101111, 0b11011111, 0b10111111, 0b01111111, 0b11111111 }; char bar_data[8]; //********************************************************************** //■■■メイン関数■■■ void main() { //クロックを8MHzに設定します。 OSCCON.IRCF2 = 1; OSCCON.IRCF1 = 1; OSCCON.IRCF0 = 1; // TRISA = 0b00101111; TRISB = 0b00001110; TRISC = 0b00000000; //A/D変換を使用します。 ADCON1.PCFG3 = 0; ADCON1.PCFG2 = 1; ADCON1.PCFG1 = 0; ADCON1.PCFG0 = 0; //TIMER0を設定します。 T0CON.T0CS = 0; T0CON.PSA = 0; T0CON.T0PS2 = 0; T0CON.T0PS1 = 1; T0CON.T0PS0 = 0; T0CON.TMR0ON = 1; INTCON.TMR0IE = 1; INTCON.TMR0IF = 0; // 割り込みを許可します。 INTCON.PEIE = 1; INTCON.GIE = 1; // opening_demonstration(); // while (1) { bar_data[0] = bar_col[Adc_read(0) / 114]; bar_data[1] = bar_col[Adc_read(1) / 114]; bar_data[2] = bar_col[Adc_read(2) / 114]; bar_data[3] = bar_col[Adc_read(3) / 114]; bar_data[4] = bar_col[Adc_read(4) / 114]; bar_data[5] = bar_col[Adc_read(8) / 114]; bar_data[6] = bar_col[Adc_read(9) / 114]; bar_data[7] = bar_col[Adc_read(10) / 114]; Delay_ms(50); } } //********************************************************************** //■■■割り込み関数■■■ short bar = 0; void interrupt() { if (INTCON.TMR0IF == 1) { INTCON.TMR0IF = 0; // switch (bar) { case 0: case 1: case 2: case 3: case 4: case 5: case 6: PORTC = bar_row[8]; PORTB = bar_data[bar]; PORTA.F4 = bar_data[bar].F1; PORTA.F6 = bar_data[bar].F2; PORTA.F7 = bar_data[bar].F3; PORTC = bar_row[bar]; bar++; break; case 7: PORTC = bar_row[8]; PORTB = bar_data[bar]; PORTA.F4 = bar_data[bar].F1; PORTA.F6 = bar_data[bar].F2; PORTA.F7 = bar_data[bar].F3; PORTC = bar_row[bar]; bar = 0; break; } } } //********************************************************************** //■■■オープニングデモ関数■■■ void opening_demonstration() { short cnt1, cnt2; int cnt; // for (cnt2 = 0; cnt2 < 10; cnt2++) { for (cnt1 = 0; cnt1 < 8; cnt1++) { bar_data[cnt1] = bar_col[8]; } // Delay_ms(100); // for (cnt1 = 0; cnt1 < 8; cnt1++) { bar_data[cnt1] = bar_col[0]; } // Delay_ms(100); } // for (cnt = 0; cnt < 1000; cnt++) { bar_data[rand() / 4096] = rand() / 128; Delay_ms(10); } // for (cnt1 = 0; cnt1 < 8; cnt1++) { for (cnt2 = 0; cnt2 < 9; cnt2++) { bar_data[cnt1] = bar_col[cnt2]; Delay_ms(10); } } // for (cnt1 = 0; cnt1 < 8; cnt1++) { for (cnt2 = 8; cnt2 >= 0; cnt2--) { bar_data[cnt1] = bar_col[cnt2]; Delay_ms(10); } } // for (cnt2 = 0; cnt2 < 9; cnt2++) { for (cnt1 = 0; cnt1 < 8; cnt1++) { bar_data[cnt1] = bar_col[cnt2]; Delay_ms(10); } } // for (cnt2 = 8; cnt2 >= 0; cnt2--) { for (cnt1 = 0; cnt1 < 8; cnt1++) { bar_data[cnt1] = bar_col[cnt2]; Delay_ms(10); } } } //**********************************************************************