#include <16F877.h> #device adc=8 #fuses NOWDT,HS, NOPUT, NOPROTECT, BROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG #use delay(clock=4000000) #define sw_up pin_a0 // SWITCH UP #define sw_down pin_a1 // SWITCH DOWN INT16 COUNT; int8 A,B,C,D; //int8 segment[10] ={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//common anode int8 num[10] ={ 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x27,0x7F,0x6F};//common cathode 0 1 2 3 4 5 6 7 8 9 // 0 1 2 3 4 5 6 7 8 9 VOID HEX_BCD(INT16 VALUE); void main(){ setup_adc_ports(NO_ANALOGS); setup_adc(ADC_OFF); setup_psp(PSP_DISABLED); setup_spi(FALSE); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); setup_timer_1(T1_DISABLED); setup_timer_2(T2_DISABLED,0,1); OUTPUT_LOW(PIN_C0); OUTPUT_LOW(PIN_C1); OUTPUT_LOW(PIN_C2); OUTPUT_LOW(PIN_C3); COUNT=0; WHILE(true){ IF(!INPUT(SW_up)){IF(COUNT++>9999)COUNT=0;delay_ms(150);} IF(!INPUT(SW_down)){IF(COUNT --<1)COUNT=9999;delay_ms(150);} HEX_BCD(COUNT); OUTPUT_D(NUM[D]); // nuoy OUTPUT_HIGH(PIN_C0); DELAY_MS(5); OUTPUT_LOW(PIN_C0); OUTPUT_D(NUM[C]); // sib OUTPUT_HIGH(PIN_C1); DELAY_MS(5); OUTPUT_LOW(PIN_C1); OUTPUT_D(NUM[B]); // Roy OUTPUT_HIGH(PIN_C2); DELAY_MS(5); OUTPUT_LOW(PIN_C2); OUTPUT_D(NUM[A]); // PHUN OUTPUT_HIGH(PIN_C3); DELAY_MS(5); OUTPUT_LOW(PIN_C3); DELAY_MS(100); } } void HEX_BCD(INT16 VALUE){ A=0;B=0;C=0;D=0; while(value>=1000){A++;value-=1000;} while(value>=100){B++;value-=100;} while(value>=10){C++;value-=10;} D=value; }