Пользуюсь WainAVR и Proteus 7 pro. Есть наброска программы для секундомера, но она считает только от 0...9, а хочется хотя бы до 999999 без плавающей точки, в будущем хочу еще сделать и с точкой 00.0
Вопрос, как реализовать что бы счет продолжался до 99 на 2-х разрядном 7-ми сегментном индикаторе?
Код: Выделить всё
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
/* -A-
F B
-G-
E C
-D-
*/
// составляем из сегментов цифры
#define N0 (0x3F) //0
#define N1 (0x06) //1
#define N2 (0x5B) //2
#define N3 (0x4F) //3
#define N4 (0x66) //4
#define N5 (0x6D) //5
#define N6 (0x7D) //6
#define N7 (0x07) //7
#define N8 (0x7F) //8
#define N9 (0x6F) //9
unsigned char indikator[10]={N0, N1, N2, N3, N4, N5, N6, N7, N8, N9};
void export_data (unsigned int data)
{
unsigned char i; //переменная i
for (i=0;i<16;i++) {
if ((data&0x8000)==0x00)
PORTD&=~_BV(PD5); //Выставляем биты данных на PD5 (DATA канал)
else
PORTD|=_BV(PD5);
PORTD|=_BV(PD6); //Импульс на SH_CP (запись)
PORTD&=~_BV(PD6);
data=(data<<1);
}
PORTD|=_BV(PD7); //Импульс на ST_CP (защелка - вывод на индикатор записанных данных)
PORTD&=~_BV(PD7);
}
int main(void)
{
unsigned int DS=0; //переменная DS
unsigned int i=0; //переменная i
PORTD=0x00; //Первоначально устанавливаем на всех выходах 0
DDRD=0xff; //установить PD0-PD2 как выходы
while (1) //Бесконечный цикл
{
DS=indikator[i]; //Закодированное число в 16hex системе исчисления
export_data(DS); //Отправляем данные на сдвиговый регистр
if (i==9) // Если i > 9 то обнуляем и пытаемся зажечь второй разряд
i=0;
else i++;
_delay_ms(300); //пауза 300 мс.
}
}


