Показать сообщение отдельно
Старый 16.01.2016, 20:17   #4 (Ссылка на пост)
Debian
Извините, я на тракторе!
 
Аватар для Debian
Пол:
 
Активность Longevity
0/20 19/20
Today Сообщения
0/5 ssss10164
Адрес: Вот там вот и живем...
Благодарил(а): 3,010
Благодарили 12,134 раз в 3,551 постах
Записей в дневнике: 21
Галерея: 2
Вес репутации: 149 Debian скоро в модераторы
Debian скоро в модераторыDebian скоро в модераторыDebian скоро в модераторыDebian скоро в модераторыDebian скоро в модераторыDebian скоро в модераторыDebian скоро в модераторыDebian скоро в модераторыDebian скоро в модераторыDebian скоро в модераторыDebian скоро в модераторы
Отправить сообщение для  Debian с помощью ICQ
Цитата:
Сообщение от ДмитрийТ Посмотреть сообщение
Эту микросхему я и использую. Данные этой микросхемы берутся в двух переменных hour и minut. Как их прикрутить к этой функции?
как-то так:

PHP код:
#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 dig_data=0
byte dig_num=0//Отображаемый разряд
//----------------------------------------------------//
char Hours 0x00;
char DesHours =0x00;

char Minutes 0x00;
char DesMinutes =0x00;

// тут забираем данные из часов DS1307
void GetTime (void){
Hours DsReadHours();
Minutes DsReadMinutes();
DesHours Hours & (~((1<<7)|(1<<6)));
DesHours >>=4// значения десятков часов
Hours &= (~((1<<7)|(1<<6)|(1<<5)|(1<<4))); // значения часов
DesMinutes Minutes >>4// Десятки минут
Minutes &= (~((1<<7)|(1<<6)|(1<<5)|(1<<4))); // Единицы минут
}

void show_dig() { 
SS=0//Ни чего не кажем 
if (dig_num==16) { // пятый разряд
dig_num++; 

spi(dig_num); //Отправляем байт для отображения разряда

if (dig_num == 1){
spi(led_table[DesHours]); //Получаем разряд из dig_data и отправляем 
}
if (
dig_num == 2){
spi(led_table[Hours]); //Получаем разряд из dig_data и отправляем 
}
if (
dig_num == 4){
spi(led_table[DesMinutes]); //Получаем разряд из dig_data и отправляем 
}
if (
dig_num == 8){
spi(led_table[Minutes]); //Получаем разряд из dig_data и отправляем байт с цифрой 

dig_num<<=1//Смещаем бит для отображения следующего разряда 
SS=1//Показываем разряд 


void main(void) { 
PORTB=0
DDRB=0x2C//Настраиваем порт для SPI 
ACSR=0x80//Отключаем компаратор 
//Включаем SPI 
//Биты будем отправлять LSB-MSB, т.е. от младших к старшим 
SPCR=0x70
SPSR=0
while (
1) {
GetTime ();
show_dig(); //Показываем разряды 
    
}

Ты только массив byte led_table подкорректируй под индикатор...ибо не понятно что там за какие знакоместа отвечает

хотя можно и без ДСки обойтись, повешать часовой кварц как тактирование таймера, поставить пред делитель, и по переполнению таймера в прерывание делать все черные дела
__________________
Какая разница из какого места растут руки, если они золотые.
Debian вне форума  
Ответить с цитированием