thedarkotaku
Newbie level 1
hey everyone. i'm trying to eventually build a six digit counter for common cathode seven segment leds. I started off with an example that did two just fine. but everytime I try to add any more to it it refuses to work. I copied an example from a post on this site on how to multiplex them. but still no luck. any ideas?
Code C - [expand] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 unsigned short mask(unsigned short num); unsigned short digit_no,digit1000,digit100, digit10, digit1, digit, i; void interrupt() { if (digit_no==0) { PORTA = 0; // Turn off all displays PORTB = digit1; // Set mask for displaying ones on PORTD PORTA = 1; // Turn on display for ones digit_no = 1; } else if(digit_no==1){ PORTA = 0; // Turn off all displays PORTB = digit10; // Set mask for displaying tens on PORTD PORTA = 2; // Turn on display for tens digit_no = 2; } else if(digit_no==2){ PORTA = 0; PORTB = digit100; PORTA = 3; digit_no = 3; // Turn on display for hundreds } else if(digit_no==3){ PORTA = 0; PORTB = digit1000; PORTA = 4; // Turn on display for thousands digit_no = 0; } TMR0 = 0; // Reset counter TMRO INTCON = 0x20; // Bit T0IF=0, T0IE=1 } void main() { OPTION_REG = 0x80; // Set timer TMR0 TMR0 = 0; INTCON = 0xA0; // Disable interrupt PEIE,INTE,RBIE,T0IE PORTA = 0; // Turn off all displays TRISA = 0; // All port A pins are configured as outputs PORTB = 0; // Turn off all display segments TRISB = 0; // All port D pins are configured as outputs do { for (i = 0; i<=9999; i++) { // Count from 0 to 9999 digit = i % 10u; digit1 = mask(digit); // Prepare mask for displaying ones digit = (char)(i / 10u) % 10u; digit10 = mask(digit); digit = (char)(i / 100u) % 10u; digit100 = mask(digit); digit = (char)(i / 1000u) % 10u; digit1000 = mask(digit); Delay_ms(1000); } } while (1); // Endless loop } unsigned short mask(unsigned short num) { switch (num) { case 0 : return 0x3F; case 1 : return 0x06; case 2 : return 0x5B; case 3 : return 0x4F; case 4 : return 0x66; case 5 : return 0x6D; case 6 : return 0x7D; case 7 : return 0x07; case 8 : return 0x7F; case 9 : return 0x6F; } }
Last edited by a moderator: