#include <16F84A.h> #fuses HS,NOWDT,PUT,NOPROTECT #use delay(crystal=8000000) short s; // Used to know button position unsigned int digit, digit1, digit10, digit100,digit1000; unsigned long i; unsigned int seg(unsigned int num) { switch (num) { case 0 : return 0xC0; case 1 : return 0xF9; case 2 : return 0xA4; case 3 : return 0xB0; case 4 : return 0x99; case 5 : return 0x92; case 6 : return 0x82; case 7 : return 0xF8; case 8 : return 0x80; case 9 : return 0x90; } } void main() { while(TRUE) { if(input(PIN_B7) == 1) s = 1; if(s == 1) { if(input(PIN_B7) == 0) { s = 0; i++; if(i > 9999) i = 0; } } digit = i % 10; digit1 = seg(digit); output_a(0x0F); // Turn off all displays output_b(digit1); // Send ones digit output_a(0x07); // Turn on display for ones delay_ms(5); digit = (i / 10) % 10; digit10 = seg(digit); output_a(0x0F); // Turn off all displays output_b(digit10); // Send tens digit output_a(0x0B); // Turn on display for tens delay_ms(5); digit = (i / 100) % 10; digit100 = seg(digit); output_a(0x0F); // Turn off all displays output_b(digit100); // Send hundreds digit output_a(0x0D); // Turn on display for hundreds delay_ms(5); digit = (i / 1000) % 10; digit1000 = seg(digit); output_a(0x0F); // Turn off all displays output_b(digit1000); // Send thousands digit output_a(0x0E); // Turn on display for thousands delay_ms(5); } }