Показать сообщение отдельно
Старый 09.01.2016, 12:31   #1 (Ссылка на пост)
ДмитрийТ
Задержался
 
Аватар для ДмитрийТ
Пол:
 
Активность Longevity
0/20 10/20
Today Сообщения
0/5 sssssss71
Адрес: Херсон
Благодарил(а): 2
Благодарили 1 раз в 1 посте
Галерея: 0
Вес репутации: 10 ДмитрийТ идет по правильному пути
Динамическая и статическая индикация на 7сегмент. и 74hc595

Хочу собрать часы с разными функциями на 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х переменных?
Изображения
 
ДмитрийТ вне форума  
Ответить с цитированием