#define SegDataPort PORTD #define SegCntrlPort PORTB int timer; void InitTimer0(); unsigned char DigitTo7SegEncoder(unsigned char digit); unsigned char seconds = 0; unsigned char miseconds = 0; unsigned char minutes = 0; int pause=0; void InitTimer0(){ T0CON = 0x88; TMR0H = 0xB1; TMR0L = 0xE0; GIE_bit = 1; TMR0IE_bit = 1; } void main() { TRISD = 0; //op TRISB = 0; //op TRISC = 0XFF; InitTimer0(); pause=1; while(1) { if(PORTC.b1 == 0) { delay_ms(100); miseconds=0; seconds=0; minutes=0; pause=1; } if(PORTC.b2 == 0) { delay_ms(100); pause=1; } if(PORTC.b3 == 0) { delay_ms(100); pause=0; } SegDataPort = DigitTo7SegEncoder(miseconds%10); SegCntrlPort = 0x20; delay_ms(10); SegCntrlPort = 0x00; SegDataPort = DigitTo7SegEncoder(miseconds/10); SegCntrlPort = 0x10; delay_ms(10); SegCntrlPort = 0x00; SegDataPort = DigitTo7SegEncoder(seconds%10); SegCntrlPort = 0x08; delay_ms(10); SegCntrlPort = 0x00; SegDataPort = DigitTo7SegEncoder(seconds/10); SegCntrlPort = 0x04; delay_ms(10); SegCntrlPort = 0x00; SegDataPort = DigitTo7SegEncoder(minutes%10); SegCntrlPort = 0x02; delay_ms(10); SegCntrlPort = 0x00; SegDataPort = DigitTo7SegEncoder(minutes/10); SegCntrlPort = 0x01; delay_ms(10); SegCntrlPort = 0x00; } } void Interrupt(){ if (TMR0IF_bit){ TMR0IF_bit = 0; TMR0H = 0xB1; TMR0L = 0xE0; if(pause==0) { miseconds++; if(miseconds == 100) { miseconds = 0; seconds++; } if(seconds == 60) { seconds = 0; minutes++; } if(minutes > 23) minutes = 0; } } } unsigned char DigitTo7SegEncoder(unsigned char digit) { unsigned char SegVal; switch(digit) { case 0: PORTD = 0b10111111; break; case 1: PORTD = 0b10000110; break; case 2: PORTD = 0b11011011; break; case 3: PORTD = 0b11001111; break; case 4: PORTD = 0b11100110; break; case 5: PORTD = 0b11101101; break; case 6: PORTD = 0b11111101; break; case 7: PORTD = 0b10000111; break; case 8: PORTD = 0b11111111; break; case 9: PORTD = 0b11101111; } return PORTD; } /*PORTD=0x06; PORTB=0x0F; delay_ms(500); PORTD=0x06; PORTB=0x00; delay_ms(500);*/