/* * Project name: Display7Seg_02 (Usage of 2 7Seg. displays) * Copyright: (c) MikroElektronika, 2005-2008. * Description: This code demonstrates displaying numbers (0,1,2..99) on two 7-segment displays. Each digit is on for 1 second. * Test configuration: MCU: PIC16F877A Dev.Board: EasyPIC5 Oscillator: HS, 08.0000 MHz Ext. Modules: - SW: mikroC v8.0 */ #include "Display_utils.h" unsigned short digit_no, digit10, digit1, digit, i; void interrupt() { if (digit_no==0) { PORTA = 0; // Turn off all 7seg displays PORTD = 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 PORTD = digit10; // send mask for tens digit to PORTD PORTA = 2; // turn on 2nd 7 seg., turn off 1st digit_no = 0; } TMR0 = 0; // clear TMRO INTCON = 0x20; // clear TMR0IF and set TMR0IE } void main() { OPTION_REG = 0x80; // Timer0 settings TMR0 = 0; INTCON = 0xA0; // Disable PEIE,INTE,RBIE,T0IE PORTA = 0; // clear PORTA (make sure both displays are off) TRISA = 0; // designate PORTA pins as output PORTD = 0; // clear PORTD (make sure LEDs are off) TRISD = 0; // designate PORTD pins as output do { for (i = 0; i<=99; i++) { // count from 0 to 99 digit = i % 10u; digit1 = mask(digit); // prepare ones digit digit = (char)(i / 10u) % 10u; digit10 = mask(digit); // prepare tens digit Delay_ms(1000); } } while (1); // endless loop }