//********************************************************************** #define SEG1 PORTC.F5 #define SEG2 PORTC.F4 #define SEG3 PORTC.F3 #define SEG4 PORTC.F2 #define SEG5 PORTC.F1 //********************************************************************** static unsigned char segTbl[13] = { 0b10111110, // 0 0b10100000, // 1 0b11011010, // 2 0b11110010, // 3 0b11100100, // 4 0b01110110, // 5 0b01111110, // 6 0b10100110, // 7 0b11111110, // 8 0b11110110, // 9 0b01000000, // - 0b11111111, // all-on 0b00000000, // all-off }; //********************************************************************** unsigned char ChangeSegData(unsigned char c) { switch (c) { case '0': c = (segTbl[0]); break; case '1': c = (segTbl[1]); break; case '2': c = (segTbl[2]); break; case '3': c = (segTbl[3]); break; case '4': c = (segTbl[4]); break; case '5': c = (segTbl[5]); break; case '6': c = (segTbl[6]); break; case '7': c = (segTbl[7]); break; case '8': c = (segTbl[8]); break; case '9': c = (segTbl[9]); break; case '-': c = (segTbl[10]); break; case '*': c = (segTbl[11]); break; case ' ': c = (segTbl[12]); break; default: c = (segTbl[10]); break; } return(c); } //********************************************************************** static unsigned char dat1, dat2, dat3, dat4, dat5, datCnt; void interrupt(){ if (INTCON.T0IF == 1) { INTCON.T0IF = 0; // SEG1 = 1; SEG2 = 1; SEG3 = 1; SEG4 = 1; SEG5 = 1; // switch (datCnt) { case 0: PORTB = ChangeSegData(dat1); SEG1 = 0; datCnt++; break; case 1: PORTB = ChangeSegData(dat2); SEG2 = 0; datCnt++; break; case 2: PORTB = ChangeSegData(dat3); SEG3 = 0; datCnt++; break; case 3: PORTB = ChangeSegData(dat4); SEG4 = 0; datCnt++; break; case 4: PORTB = ChangeSegData(dat5); SEG5 = 0; datCnt = 0; break; default: break; } } if (PIR1.TMR1IF == 1) { PIR1.TMR1IF = 0; PORTC.F0 = ~PORTC.F0; } } //********************************************************************** void main() { unsigned int ad0, ad1, tmp; unsigned char buf[10]; // TRISA = 0b00001011; TRISB = 0b00000000; TRISC = 0b00000000; OPTION_REG = 0b00000000; // ad0を使用する。 ADCON1.PCFG3 = 0; ADCON1.PCFG2 = 1; ADCON1.PCFG1 = 0; ADCON1.PCFG0 = 1; // CCP1モジュールは使用しない。 CCP1CON.CCP1M3 = 0; CCP1CON.CCP1M2 = 0; CCP1CON.CCP1M1 = 0; CCP1CON.CCP1M0 = 0; // CCP2モジュールは使用しない。 CCP2CON.CCP1M3 = 0; CCP2CON.CCP1M2 = 0; CCP2CON.CCP1M1 = 0; CCP2CON.CCP1M0 = 0; // タイマー0を設定する。 INTCON.T0IE = 1; INTCON.T0IF = 0; OPTION_REG.T0CS = 0; OPTION_REG.PSA = 0; OPTION_REG.PS2 = 1; OPTION_REG.PS1 = 0; OPTION_REG.PS0 = 1; // タイマー1を設定する。 PIE1.TMR1IE = 1; PIR1.TMR1IF = 0; T1CON.T1CKPS0 = 1; T1CON.T1CKPS1 = 1; T1CON.TMR1ON = 1; // PORTC = 0xFF; datCnt = 0; dat1 = ' '; dat2 = ' '; dat3 = ' '; dat4 = ' '; dat5 = ' '; // INTCON.PEIE = 1; // これ以降の処理で割り込みを許可する。 INTCON.GIE = 1; // これ以降の処理で割り込みを許可する。 // while (1) { ad0 = Adc_Read(0); // 温度センサーの出力をオペアンプで10倍した値。 ad1 = Adc_Read(1); // 温度センサーの出力をそのままの値。 // 小数点以下の温度を四捨五入する。1度=100mV ad0 = (int)((double)ad0 * 2.48); if ((ad0 - ((ad0 / 100) * 100)) >= 50) ad0 = (ad0 / 100) + 1; else ad0 = (ad0 / 100); IntToStr(ad0, buf); dat5 = buf[4]; dat4 = buf[5]; // 小数点以下の温度を四捨五入する。1度=10mV ad1 = (int)((double)ad1 * 2.48); if ((ad1 - ((ad1 / 10) * 10)) >= 5) ad1 = (ad1 / 10) + 1; else ad1 = (ad1 / 10); IntToStr(ad1, buf); dat2 = buf[4]; dat1 = buf[5]; // dat3 = '-'; Delay_ms(500); } } //**********************************************************************