Перейти к содержанию

Анимированный переход на семисегментном индикаторе


-=FISHER=-

Рекомендуемые сообщения

Доброго дня всем!

Я хочу применить в своих многофункциональных часах анимированный переход между режимами, чтобы например показания времени сменялись показаниями температуры сверху вниз. То есть температура как бы спускалась сверху, а часы уезжали вниз.

Я себе это представляю так:

1. Вытеснение: стирать "уходящие" сегменты, а ниже прорисовывать или стирать (если сегмент выше был пустым) новые сегменты. 

2. Наплыв: прорисовывать "приходящие" сегменты, а выше стирать (если приходящий сегмент пустой) новые сегменты. 

У меня пока получилась вот такая абракадара (работает как надо) это Вытеснение вниз (надпись как бы съезжает):

Скрытый текст

			trim_convert(hour*100+min);
			refresh_scr(); _delay_ms(500); //выведем время в обнычном формате

			for(int j=0; j<4; j++) //первый КАДР
			{
				if(scr[j]&(1<<1)){scr[j]&=~(1<<1); scr[j]|=(1<<2);} //если в 1 сегменте что-то было - стёрли и записали во 2
				else{scr[j]&=~(1<<2);} //если ничего не было, то стираем сегмент под ним, то есть 2ой
			
				if(!(scr[j]&(1<<0))){scr[j]&=~(1<<3);}
			
				if(scr[j]&(1<<6)) //если в 6 сегменте что-то было - стёрли и записали в 0
				{
					if(scr[j]&(1<<0)){scr[j]|=(1<<3);} //если в 0 сегменте что-то было то перерисовали в 3
							
					scr[j]&=~(1<<6); scr[j]|=(1<<0); 
				} 
				else
				{
					if(scr[j]&(1<<0)){scr[j]|=(1<<3);} //если в 0 сегменте что-то было то перерисовали в 3
					scr[j]&=~(1<<0);
				} //если ничего не было, то стираем сегмент под ним, то есть 0ой
			
				if(scr[j]&(1<<5)){scr[j]&=~(1<<5); scr[j]|=(1<<4);} //если в 5 сегменте что-то было - стёрли и записали в 4
				else{scr[j]&=~(1<<4);} //если ничего не было, то стираем сегмент под ним, то есть 4й
			}	
			refresh_scr(); _delay_ms(500);
			
			for(int j=0; j<4; j++) //второй КАДР
			{
				if(scr[j]&(1<<2)){scr[j]&=~(1<<2);} //если во 2 сегменте что-то было - стёрли
			
				if(scr[j]&(1<<0)){scr[j]&=~(1<<0); scr[j]|=(1<<3);} //если в 0 сегменте что-то было - стёрли и записали в 3
				else{scr[j]&=~(1<<3);} //если ничего не было, то стираем сегмент под ним, то есть 4й
			
				if(scr[j]&(1<<4)){scr[j]&=~(1<<4);} //если в 4 сегменте что-то было - стёрли
			}
			refresh_scr(); _delay_ms(500);
			
			for(int j=0; j<4; j++) //третий КАДР
			{
				if(scr[j]&(1<<3)){scr[j]&=~(1<<3); } //если в 3 сегменте что-то было - стёрли	
			}	
			refresh_scr(); _delay_ms(500);

 

Но ведь наверняка есть способ проще всё это алгоритмитизировать?...

 

Мы все учились по-немногу, чему-нибудь и как-нибудь...

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

4 hours ago, -=FISHER=- said:

есть способ проще

Добавьте ещё знакогенераторов

zgen1[]= //генератор ЦИФР, сдвинутых на 1 позицию вниз

zgen2[]= //генератор ЦИФР, сдвинутых на 2 позиции вниз

и т.д.

и при выводе анимации просто в каждом кадре используйте соответствующий знакогенератор в функии trim_convert( nomer_kadra);

 

 

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

1 минуту назад, colorad сказал:

А сдвиг слева направо чем хуже ?

Сдвигать нужно ведь по особому правилу...

227174922_.jpg.5530006273bb827333854de973df6333.jpg

12 минут назад, Yurkin2015 сказал:

Добавьте ещё знакогенераторов

Похоже это отличная идея!

Мы все учились по-немногу, чему-нибудь и как-нибудь...

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, colorad сказал:

А сдвиг слева направо чем хуже ? 

Я кажется не правильно вас понял, кнопки располагаются вертикально, друг над другом, поэтому как бы логичнее именно вертикальная прокрутка.

Мы все учились по-немногу, чему-нибудь и как-нибудь...

Ссылка на комментарий
Поделиться на другие сайты

6 минут назад, -=FISHER=- сказал:

кнопки располагаются вертикально, друг над другом, поэтому как бы логичнее именно вертикальная прокрутка.

Возможно, что так логичнее, но дискретность грубовата . Вот если б один знак имел размерность 8х8, тогда вертикальня анимация была б плавней . Совсем не претендую на истину,  просто высказал некоторое соображение .

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, colorad сказал:

Возможно, что так логичнее, но дискретность грубовата

Полностью с вами согласен. А какой самый приемлемый вариант анимации на ваш взгляд?

Мы все учились по-немногу, чему-нибудь и как-нибудь...

Ссылка на комментарий
Поделиться на другие сайты

Я выше предлагал пару вариантов типа бегущей строки с остановкой на индикации каждого параметра или яркостную анимацию . Программно такие варианты не сложны . 

 Сам когда-то делал типа крутящихся черточек . Потом видел очень похожее в другом проекте .  Еще лучше какой-нибудь авторский оригинальный  вариант придумать .

Ссылка на комментарий
Поделиться на другие сайты

Тоже как-то озадачивался оформлением перехода с индикации одной величины на индикацию другой на семисегментниках. Пришёл к убеждению, что вертикальные сдвиги - фигня полная. Выглядит как просто мельтешение сегментов. Горизонтальные сдвиги - только при более четырёх индикаторов в строке выглядят более-менее сдвигом. Глаз более-менее воспринимает, как строку и различает сдвиг.  При четырёх и менее - наиболее профессионально выглядит смена через затемнение.

 

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...