Хочу собрать часы с разными функциями на 7ми сегментных индикаторах,
atmega 168 и сдвиговых регистрах.
В общем для отображения времени рассматриваю такой вариант через SPI:
Код:
#include <spi.h>
#define SS PORTB.2
typedef unsigned char byte;
typedef unsigned long ulong;
byte led_table[10]={0b00000011,0b10011111,0b00100101,0b00001101,0b10011001,0b01001001,0b01000001,0b00011111,0b00000001,0b00001001};
ulong show_data=12345678; //Отображаемая цифра
ulong dig_data=0;
byte dig_num=0; //Отображаемый разряд
void show_dig() {
SS=0; //Ни чего не кажем
if (dig_num==0) {
dig_data=show_data; //Если показываем первую цифру обнавляем переменную
dig_num++;
}
spi(dig_num); //Отправляем байт для отображения разряда
spi(led_table[dig_data%10]); //Получаем разряд из dig_data и отправляем байт с цифрой
dig_data/=10;
dig_num<<=1; //Смещаем бит для отображения следующего разряда
SS=1; //Показываем разряд
}
void main(void) {
PORTB=0;
DDRB=0x2C; //Настраиваем порт для SPI
ACSR=0x80; //Отключаем компаратор
//Включаем SPI
//Биты будем отправлять LSB-MSB, т.е. от младших к старшим
SPCR=0x70;
SPSR=0;
while (1) show_dig(); //Показываем разряды
}
Индикатор 4х разрядный будет.
Как можно переделать данный код, чтобы выводить часы и минуты из 2х переменных?