Код: Выделить всё
#include <mega8.h>
#include <delay.h>
unsigned char number[] =
{
0x3f, //0
0x06, //1
0x5b, //2
0x4f, //3
0x66, //4
0x6d, //5
0x7d, //6
0x07, //7
0x7f, //8
0x6f //9
};
//числа для вывода на индикатор
volatile unsigned char data1 = 0;
volatile unsigned char data2 = 0;
volatile unsigned char data3 = 0;
void main( void )
{
//порт, к которому подкл. сегменты
PORTB = 0xff;
DDRB = 0xff;
//порт, к которому подкл. катод
PORTD = 0;
DDRD |= (1<<2)|(1<<1)|(1<<0);
//инициализация таймера Т0
TIMSK = (1<<TOIE0);
TCCR0 = (1<<CS02)|(0<<CS01)|(1<<CS00);
TCNT0 = 0xb2;
#asm("sei");
while(1){
//программный счетчик секунд
data3++;
if (data3 == 10){
data3 = 0;
data2++;
if (data2 == 1) data2 = 0;
data1++;
if (data1 == 10) data1 = 0;
}
delay_ms(100);
}
}
//прерывания таймера Т0 - вывод на индикатор
interrupt [TIM0_OVF] void Timer0Ovf(void)
{
static unsigned char count = 0;
TCNT0 = 0xb2;
//гасим оба разряда
PORTD &= ~((1<<2)|(1<<1)|(1<<0));
//зажигаем следующий разряд
if (count == 2) {
PORTB = number[data3];
PORTD |= (1<<2);
}
if (count == 0) {
PORTB = number[data2];
PORTD |= (1<<1);
}
if (count == 1) {
PORTB = number[data1];
PORTD |= (1<<0);
}
count++;
if (count == 3) count = 0;
}


