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 72 73 74 75 76 77
| unsigned short mask(unsigned short num) {
switch (num) {
case 0 : return 0x40;
case 1 : return 0x79;
case 2 : return 0x24;
case 3 : return 0x30;
case 4 : return 0x99;
case 5 : return 0x92;
case 6 : return 0x82;
case 7 : return 0xF8;
case 8 : return 0x80;
case 9 : return 0x90;
}
}
unsigned short digit_no, digit10, digit1, digit, i, number;
void interrupt() {
if (digit_no==0) {
PORTA = 0; // Turn off all 7seg displays
PORTB = digit1; // send mask for ones digit to PORTD
PORTA = 1; // turn on 1st 7 seg., turn off 2nd
digit_no = 1;
} else {
PORTA = 0; // Turn off all 7seg displays
PORTB = digit10; // send mask for tens digit to PORTD
PORTA = 2; // turn on 2nd 7 seg., turn off 1st
digit_no = 0;
}
/*if(digit_no==0)
{
PORTA = 0;
PORTC = digit1;
PORTA = 4;
}
else if(digit_no==0)
{
PORTA = 0;
PORTC = digit10;
PORTC = 8;
digit_no = 0;
}*/
TMR0 = 0; // clear TMRO
INTCON = 0x20; // clear TMR0IF and set TMR0IE
}
void main() {
OPTION_REG = 0x80; // Timer0 settings
TMR0 = 0; // clear TMRO
INTCON = 0xA0; // Disable PEIE,INTE,RBIE,T0IE
PORTA = 0; // clear PORTA (make sure both displays are off)
TRISA = 0; // designate PORTA pins as output
PORTB = 0; // clear PORTD (make sure LEDs are off)
TRISB = 0; // designate PORTD pins as output
PORTC = 0;
TRISC = 0;
number=10;
do {
digit = number % 10u ;
digit1 = mask(digit); // prepare ones digit
digit = (char)(number / 10u) % 10u ;
digit10 = mask(digit); // prepare tens digit
Delay_ms(100);
number--;
if(number<=0)
{
number=10;
Delay_ms(1000);
}
}
while(1);
} |
Partager