/* 2010/2/25 RTC Read TEST With LED 3Didits Last 2010/3/1 Presents BY M.Kikuchi */ sbit Soft_I2C_Scl at RA1_bit; sbit soft_I2c_Sda at RA2_bit; sbit Soft_I2C_Scl_Direction at TRISA1_bit; sbit Soft_I2C_Sda_Direction at TRISA2_bit; char Icnt; char LED0,LED1,LED2,Seconds,Minutes; char to_7LED(char S_Data) { //数から7セグメントLED Dataへ switch (S_Data & 0x0F) { case 0: return(0x3f);break; case 1: return(0x06);break; case 2: return(0x5b);break; case 3: return(0x4f);break; case 4: return(0x66);break; case 5: return(0x6d);break; case 6: return(0x7d);break; case 7: return(0x07);break; case 8: return(0x7f);break; case 9: return(0x6f); } } void Read_Time() { Soft_I2C_Start(); Soft_I2C_Write(0xA2); //Device + write Soft_I2C_Write(2); //Address Soft_I2C_Start(); Soft_I2C_Write(0xA3); //Device + read Seconds=Soft_I2C_Read(1); Minutes=Soft_I2C_Read(0); Soft_I2C_Stop(); } void interrupt() { //1mSecで割り込み表示 char ITEMP; if(PIR1.TMR2IF==1) PIR1.TMR2IF=0; Icnt++; TRISA.F3=1; //dp off PORTB=0xFF; //LED all off switch(Icnt) { case 1: //Bit0 set ITEMP=LED0; if(ITEMP.F0==1) ITEMP.F7=1; TRISB = (~ITEMP & 0b11111110); PORTB=0b11111110; break; case 2: //Bit1 set ITEMP=LED1; if(ITEMP.F1==1) ITEMP.F7=1; TRISB = (~ITEMP & 0b11111101); PORTB=0b11111101; break; case 3: //Bit2 set Icnt=0; ITEMP=LED2; TRISA.F3=0; //dp set PORTA.F3=1; if(ITEMP.F2==1) ITEMP.F7=1; TRISB = (~ITEMP & 0b11111011); PORTB=0b11111011; } } void main() { OSCCON=0x60; //4MHz CMCON=0x07; //for 16F88 ANSEL=0; //for 16F88 Delay_ms(1000); //1Sec TRISB=0; PORTB=0XFF; TRISA=0; // Init INTCON.PEIE=1; T2CON=0x05; //1mSec PIE1.TMR2IE=1; LED0=0x3F; //Init LED LED1=0x08; LED2=0x08; Icnt=0; INTCON.GIE=1; //Interrupt ON Soft_I2C_Init(); // Soft_I2C_Start(); Soft_I2C_Write(0xA2); //Address Soft_I2C_Write(2); //Address Soft_I2C_Write(0); //Reg clr Soft_I2C_Write(0); Soft_I2C_Stop(); while(1) { INTCON.GIE=0; //Interrupt off Read_Time(); INTCON.GIE=1; //Enable LED1=to_7LED((Seconds & 0xf0)>>4); LED0=to_7LED(Seconds & 0x0f); LED2=to_7LED(Minutes & 0x0f); Delay_ms(200); } }