/* 電圧計 3LED式 * PIC16F88 - (PIC16F819) * 2009/3/1 3/6 battery-ck 3/8 A/D分散 for LED PARA LIGHT C-533SR CONFIG=$2007 _CP_OFF _CCP1_RB0 _DEBUG_OFF _WRT_ENABLE_OFF _CPD_OFF _LVP_OFF (RB3=I/O) _BODEN_OFF _MCLR_OFF (RA5=I/O) _PWRTE_ON _WDT_OFF _INTRC_IO (RA6=I/O) CONFIG=$2008 _IESO_ON _FCMEN_ON */ #define Dot_Select_SW PORTA.F5 #define LED_0 PORTA.F4 #define LED_1 PORTA.F6 #define LED_2 PORTA.F7 #define LED_Dot PORTB.F7 static unsigned short Icnt,SGM7; static unsigned short LED_DATA0,LED_DATA1,LED_DATA2; // LED Control [ PARA LIGHT C-533SR ] void Interrupt() { if(PIR1.TMR2IF==1) PIR1.TMR2IF=0; Icnt++; // if(Icnt==1){ LED_2=1; //LED OFF PORTB=LED_DATA0; LED_0=0; //LED ON } if(Icnt==2){ LED_0=1; //LED OFF PORTB=LED_DATA1; if (Dot_Select_SW==0) LED_Dot=1; LED_1=0; //LED ON } if(Icnt==3){ Icnt=0; LED_1=1; //LED OFF PORTB=LED_DATA2; if (Dot_Select_SW==1) LED_Dot=1; LED_2=0; //LED ON } } void to_7segments_LED(unsigned int S_Data) { S_Data=(S_Data & 0x0F); if (S_Data==0) SGM7=0x3f; if (S_Data==1) SGM7=0x06; if (S_Data==2) SGM7=0x5b; if (S_Data==3) SGM7=0x4f; if (S_Data==4) SGM7=0x66; if (S_Data==5) SGM7=0x6d; if (S_Data==6) SGM7=0x7d; if (S_Data==7) SGM7=0x07; if (S_Data==8) SGM7=0x7f; if (S_Data==9) SGM7=0x6f; } void main() { unsigned short i; unsigned int adc; unsigned int is_a,is_b,is_c,is_d,tema,temb; OSCCON=0b01100000; //4MHz // ADCON1=0b10001110; //16F819用 CMCON =0b00000111; //16F88用 コンパレータなし ANSEL =0b00000011; //16F88用 TRISA =0b00100011; //0.1=A/D 2.3=Battery ctrl 4=Dp SW TRISB =0; //output PIE1.TMR2IE=1; T2CON=0X04; // Post=1/1 (5:Prescaler=1/4 4:1/1) // (0.25mS)1/4/256=0.75mSec *3/segment INTCON.PEIE=1; // Interrupt ON PORTA=0b11110000; // LED OFF & Charge start Delay_ms(200); // while(1) { adc=0; INTCON.GIE=0; // Interrupt OFF for(i=0;i<8;i++) adc += Adc_Read(0); INTCON.GIE=1; // Interrupt ON Delay_ms(150); INTCON.GIE=0; // Interrupt OFF for(i=0;i<8;i++) adc += Adc_Read(0); INTCON.GIE=1; // Interrupt ON // adc=(adc >> 4); //平均値 if (adc > 159) // for アルカリ電池 PORTA.F3=1; // Charging over is_a=adc/1000; tema=is_a*1000; is_b=(adc - tema)/100; temb=is_b*100; is_c=(adc - tema -temb)/10; is_d=adc - tema - temb - (is_c*10); to_7segments_LED(is_b); // [LED 100] LED_DATA2=SGM7; to_7segments_LED(is_c); // [LED 10] LED_DATA1=SGM7; to_7segments_LED(is_d); // [LED 1] LED_DATA0=SGM7; Delay_ms(150); } }