#include <16F877A.h> #fuses XT,NOWDT,PUT,NOBROWNOUT,NOLVP #use delay(clock = 4000000) #byte PORTA=0X05 #byte PORTC=0x07 #byte PORTB=0X06 #define A0 PIN_A0 #define A1 PIN_A1 #define A2 PIN_A2 #define A3 PIN_A3 #define A4 PIN_A4 int sec1,sec2,min1,min2,hour1,hour2; int counter=125; int flag=0; const int table[10]={0b11000000, 0b11111001, 0b10100100, 0b10110000, 0b10011001, 0b10010010, 0b10000010, 0b11111000, 0b10000000, 0b10010000}; void main() { PORTB=0X00; PORTC=0X00; set_tris_a(0xff); set_tris_c(0x00); set_tris_b(0x00); set_RTCC(6); setup_counters(RTCC_INTERNAL,RTCC_DIV_32); enable_interrupts (INT_RTCC); enable_interrupts (GLOBAL); for(;;) { PORTB=table[sec1]; PORTC=0X01; delay_ms(2); PORTB=table[sec2]; PORTC=0x02; delay_ms(2); PORTB=table[min1]; PORTC=0x04; delay_ms(2); PORTB=table[min2]; PORTC=0x08; delay_ms(2); PORTB=table[hour1]; PORTC=0x10; delay_ms(2); PORTB=table[hour2]; PORTC=0x20; delay_ms(2); if(flag==1){ flag=0; } if(input(A0)==0) { disable_interrupts(INT_RTCC); if(input(A1)==0){ delay_ms(250); if(++min1>9) { min1=0; if(++min2>5) { min2=0; } } } if(input(A2)==0){ delay_ms(250); if( ++hour1>9 ){ hour1=0; ++hour2; } if( (hour2==2) & (hour1>3) ) { sec1=0; sec2=0; min1=0; min2=0; hour1=0; hour2=0; } } } else if(input(A0)==1){ enable_interrupts(INT_RTCC); } } } #int_RTCC void microII() { //void switch_time(); if(--counter>0)return; counter=125; flag=1; if(++sec1>9){ sec1=0; if(++sec2>5){ sec2=0; if(++min1>9){ min1=0; if(++min2>5){ min2=0; if( ++hour1>9 ) { hour1=0; ++hour2; } if( (hour2==2) & (hour1>3) ) { sec1=0; sec2=0; min1=0; min2=0; hour1=0; hour2=0; } } } } } }
fred1144