Пн ноя 25, 2019 12:27:14
точно так же, как и всегда: любой эффект - это последовательность сменяемых состояний. к линамической индикации это не имеет отношения - динамическая индикация лишь служит средством вывода информации, а подготовкой информации занимается не она.Kotto писал(а):как авторы часов на ВЛИ и ГРИ реализуют различные спец эффекты
Пн ноя 25, 2019 12:32:38
Пн ноя 25, 2019 12:38:35
верноKotto писал(а):Далее в массиве я просто где нибудь в другом месте меняю символы, верно?
простота - хуже воровства в том слмысле, что простота в одном всегда оборачивается сложностью в другом.Kotto писал(а):Может как то проще можно?
Пн ноя 25, 2019 12:58:05
Пн ноя 25, 2019 13:19:19
Пн ноя 25, 2019 13:38:27
Вт ноя 26, 2019 07:10:34
Вт ноя 26, 2019 13:14:39
Вт ноя 26, 2019 13:32:34
Вт ноя 26, 2019 13:37:06
Вт ноя 26, 2019 13:42:11
Вт ноя 26, 2019 14:01:07
Пт ноя 29, 2019 13:35:00
unsigned char zero[8] = {1, 0, 1, 0, 1, 0, 1, 1};
unsigned char one[8] = {1, 1, 0, 1, 0, 1, 1, 1};
unsigned char two[8] = {1, 0, 1, 1, 1, 0, 0, 0};
unsigned char three[8] = {1, 0, 1, 0, 1, 1, 0, 0};
unsigned char four[8] = {0, 1, 1, 0, 1, 1, 1, 0};
unsigned char five[8] = {0, 0, 1, 0, 1, 1, 0, 1};
unsigned char six[8] = {1, 0, 1, 0, 1, 0, 1, 0};
unsigned char seven[8] = {1, 1, 1, 1, 0, 1, 0, 0};
unsigned char eight[8] = {0, 0, 1, 0, 1, 0, 0, 0};
unsigned char nine[8] = {0, 1, 1, 1, 0, 1, 0, 0};
Пт ноя 29, 2019 14:27:38
Пт ноя 29, 2019 15:29:08
// Timer2 overflow interrupt service routine
interrupt [TIM2_OVF] void timer2_ovf_isr(void) // Прерывание по переполнению на Timer2. Отвечает за динамическую индикацию.
{
switch (a) {
case 0: if ((b1 >= 0) && (b1 < 6)) {show_num (lh); PORTC.4 = 0;}
if (b1 > 7) {b1 = 0;}
break;
case 1: show_num (rh); PORTC.3 = 0;
break;
case 2: show_num (lm); PORTC.0 = 0;
break;
case 3: show_num (rm); PORTC.1 = 0;
break;
case 4: show_num (ls); PORTC.2 = 0;
break;
case 5: show_num (rs); PORTD.3 = 0;
break;
}
a++;
b1++;
if (a == 6) {a = 0;}
}
// Timer2 output compare interrupt service routine
interrupt [TIM2_COMP] void timer2_comp_isr(void)
{
all_off ();
off_segments ();
}
// Timer2 overflow interrupt service routine
interrupt [TIM2_OVF] void timer2_ovf_isr(void) // Прерывание по переполнению на Timer2. Отвечает за динамическую индикацию.
{
switch (a) {
case 0: show_num (lh); PORTC.4 = 0;
break;
case 1: show_num (rh); PORTC.3 = 0;
break;
case 2: show_num (lm); PORTC.0 = 0;
break;
case 3: show_num (rm); PORTC.1 = 0;
break;
case 4: show_num (ls); PORTC.2 = 0;
break;
case 5: if ((b1 >= 0) && (b1 < 7)) {show_num (rs); PORTD.3 = 0;}
if (b1 > br) {b1 = 0;}
break;
}
a++;
b1++;
if (a == 6) {a = 0;}
}
br++;
if (br > 100) {br = 8;}
delay_ms (10);
Пт ноя 29, 2019 15:42:19
Пт ноя 29, 2019 16:38:20
Пт ноя 29, 2019 18:02:03
int main(void){
char arr1[6] = {0,0,0,0,0,1};
char arr2[6] = {0,0,0,0,0,2};
char arr3[6] = {0,0,0,0,0,3};
while(1){
memcpy(scr, arr1, 6);
delay_ms(1000);
memcpy(scr, arr2, 6);
delay_ms(1000);
memcpy(scr, arr3, 6);
delay_ms(1000);
}
}
Пт ноя 29, 2019 18:41:45
unsigned char a = 0;
// Десятки часов, единицы часов
// десятки минут, единицы минут
// десятки секунд, единицы секунд
unsigned char disp[6];
// Timer2 overflow interrupt service routine
interrupt [TIM2_OVF] void timer2_ovf_isr(void)
{
switch (a) {
case 0: show_num (disp[5]); PORTC.4 = 0;
break;
case 1: show_num (disp[4]); PORTC.3 = 0;
break;
case 2: show_num (disp[3]); PORTC.0 = 0;
break;
case 3: show_num (disp[2]); PORTC.1 = 0;
break;
case 4: show_num (disp[1]); PORTC.2 = 0;
break;
case 5: show_num (disp[0]); PORTD.3 = 0;
break;
}
a++;
if (a == 6) {a = 0;}
}
// Timer2 output compare interrupt service routine
interrupt [TIM2_COMP] void timer2_comp_isr(void)
{
// При включенной сетке погасить сегменты -
// пауза для исчезновения тока - выключить сетку -
// включить сегменты следующего индикатора - включить сетку оного.
all_off ();
off_segments ();
}
while (1) {
if (i > 100000) {
RTC_init (); // Обратиться к ds3231 с прсьбой подготовить передачу даты и времени
RTC_read_time (); // считаем время и дату
disp[5] = hour23 / 10; disp[4] = hour23 % 10;
disp[3] = minute23 / 10; disp[2] = minute23 % 10;
disp[1] = sec23 / 10; disp[0] = sec23 % 10;
i = 0;
}
i++;
}
}
unsigned char zero = 0b10101011;
unsigned char one = 0b11010111;
unsigned char two = 0b10111000;
unsigned char three = 0b10101100;
unsigned char four = 0b01101110;
unsigned char five = 0b00101101;
unsigned char six = 0b10101010;
unsigned char seven = 0b11110100;
unsigned char eight = 0b00101000;
unsigned char nine = 0b01110100;
void show_num (unsigned char a) {
switch (a) {
case 0: PORTD.4 = zero&0b10000000;
PORTD.5 = zero&0b01000000;
PORTD.6 = zero&0b00100000;
PORTD.7 = zero&0b00010000;
PORTB.1 = zero&0b00001000;
PORTB.2 = zero&0b00000100;
PORTB.6 = zero&0b00000010;
PORTB.7 = zero&0b00000001;
break;
case 1: PORTD.4 = one&0b10000000;
PORTD.5 = one&0b01000000;
PORTD.6 = one&0b00100000;
PORTD.7 = one&0b00010000;
PORTB.1 = one&0b00001000;
PORTB.2 = one&0b00000100;
PORTB.6 = one&0b00000010;
PORTB.7 = one&0b00000001;
break;
case 2: PORTD.4 = two&0b10000000;
PORTD.5 = two&0b01000000;
PORTD.6 = two&0b00100000;
PORTD.7 = two&0b00010000;
PORTB.1 = two&0b00001000;
PORTB.2 = two&0b00000100;
PORTB.6 = two&0b00000010;
PORTB.7 = two&0b00000001;
break;
case 3: PORTD.4 = three&0b10000000;
PORTD.5 = three&0b01000000;
PORTD.6 = three&0b00100000;
PORTD.7 = three&0b00010000;
PORTB.1 = three&0b00001000;
PORTB.2 = three&0b00000100;
PORTB.6 = three&0b00000010;
PORTB.7 = three&0b00000001;
break;
case 4: PORTD.4 = four&0b10000000;
PORTD.5 = four&0b01000000;
PORTD.6 = four&0b00100000;
PORTD.7 = four&0b00010000;
PORTB.1 = four&0b00001000;
PORTB.2 = four&0b00000100;
PORTB.6 = four&0b00000010;
PORTB.7 = four&0b00000001;
break;
case 5: PORTD.4 = five&0b10000000;
PORTD.5 = five&0b01000000;
PORTD.6 = five&0b00100000;
PORTD.7 = five&0b00010000;
PORTB.1 = five&0b00001000;
PORTB.2 = five&0b00000100;
PORTB.6 = five&0b00000010;
PORTB.7 = five&0b00000001;
break;
case 6: PORTD.4 = six&0b10000000;
PORTD.5 = six&0b01000000;
PORTD.6 = six&0b00100000;
PORTD.7 = six&0b00010000;
PORTB.1 = six&0b00001000;
PORTB.2 = six&0b00000100;
PORTB.6 = six&0b00000010;
PORTB.7 = six&0b00000001;
break;
case 7: PORTD.4 = seven&0b10000000;
PORTD.5 = seven&0b01000000;
PORTD.6 = seven&0b00100000;
PORTD.7 = seven&0b00010000;
PORTB.1 = seven&0b00001000;
PORTB.2 = seven&0b00000100;
PORTB.6 = seven&0b00000010;
PORTB.7 = seven&0b00000001;
break;
case 8: PORTD.4 = eight&0b10000000;
PORTD.5 = eight&0b01000000;
PORTD.6 = eight&0b00100000;
PORTD.7 = eight&0b00010000;
PORTB.1 = eight&0b00001000;
PORTB.2 = eight&0b00000100;
PORTB.6 = eight&0b00000010;
PORTB.7 = eight&0b00000001;
break;
case 9: PORTD.4 = nine&0b10000000;
PORTD.5 = nine&0b01000000;
PORTD.6 = nine&0b00100000;
PORTD.7 = nine&0b00010000;
PORTB.1 = nine&0b00001000;
PORTB.2 = nine&0b00000100;
PORTB.6 = nine&0b00000010;
PORTB.7 = nine&0b00000001;
break;
}
}
Пт ноя 29, 2019 19:34:13