Чт авг 18, 2022 17:54:35
Чт авг 18, 2022 19:34:47
uint8_t change_display_flag = 1; // флаг выполнения для КА1. При запуске от =1, чтобы сразу вывести на дисплей первый режим.
uint8_t update_curr_time = 0; // флаг выполнения для КА2
uint8_t dynascan_flag = 0; // флаг выполнения для КА3
uint8_t display_mode = 0; // переменная выбора для КА1
#define WATCH_MODE 0
#define DATA_MODE 1
#define TEMPER_MODE 2
int main(void)
{
/* функции, выполняемые до основного цикла */
/* основной бесконечный цикл работы программы */
while(1)
{
/* КА-1. Обработка запроса на смену режима дисплея */
if(change_display_flag)
{
/* Выбор режима (что будет показываться) */
switch(display_mode) {
case WATCH_MODE:
ShowWatch(); // вызов функции, выводящей часы
break;
case DATA_MODE:
ShowDate(); // вызов функции, выводящей дату
break;
case TEMPER_MODE:
ShowTemperature(); // вызов функции, выводящей температуру
break;
}
change_display_flag = 0; // сброс флага смены дисплея
}
/* КА-2. Обработка запроса на обновление показаний дисплея в режиме часов.
* Если текущий режим на дисплее - часы, и есть запрос
* изменить показываемое время */
if((display_mode == WATCH_MODE) && (update_curr_time))
{
ShowWatch(); // вызов функции, выводящей часы
update_curr_time = 0; // сброс флага запроса обновления показаний
}
/* КА-3. Обработка запроса на переключение разрядов динам.индикации дисплея.
* вызывается по флагу, который устанавливается в прерывании таймера */
if(dynascan_flag)
{
DND_DynaScan();
dynascan_flag = 0;
}
}
}
void ShowWatch(void)
{
/* переменные для десятков и единиц часов,
* десятков и единиц минут */
uint8_t dHour, uHour, dMin, uMin;
/* Получение текущего времени */
GetCurrentTime(&dHour, &uHour, &dMin, &uMin);
/* Вывод на дисплей текущего времени
* (преобразование чисел в комбинации сегментов) */
_DND_Print(dHour, uHour, dMin, uMin);
}
Пт авг 19, 2022 11:39:15
Рассмотрим автомат обновления текущего времени на дисплее в режиме показа часов и автомат работы динамической индикации.Спойлер
Код:
uint8_t change_display_flag = 1; // флаг выполнения для КА1. При запуске от =1, чтобы сразу вывести на дисплей первый режим.
uint8_t update_curr_time = 0; // флаг выполнения для КА2
uint8_t dynascan_flag = 0; // флаг выполнения для КА3
uint8_t display_mode = 0; // переменная выбора для КА1
#define WATCH_MODE 0
#define DATA_MODE 1
#define TEMPER_MODE 2
int main(void)
{
/* функции, выполняемые до основного цикла */
/* основной бесконечный цикл работы программы */
while(1)
{
/* КА-1. Обработка запроса на смену режима дисплея */
if(change_display_flag)
{
/* Выбор режима (что будет показываться) */
switch(display_mode) {
case WATCH_MODE:
ShowWatch(); // вызов функции, выводящей часы
break;
case DATA_MODE:
ShowDate(); // вызов функции, выводящей дату
break;
case TEMPER_MODE:
ShowTemperature(); // вызов функции, выводящей температуру
break;
}
change_display_flag = 0; // сброс флага смены дисплея
}
/* КА-2. Обработка запроса на обновление показаний дисплея в режиме часов.
* Если текущий режим на дисплее - часы, и есть запрос
* изменить показываемое время */
if((display_mode == WATCH_MODE) && (update_curr_time))
{
ShowWatch(); // вызов функции, выводящей часы
update_curr_time = 0; // сброс флага запроса обновления показаний
}
/* КА-3. Обработка запроса на переключение разрядов динам.индикации дисплея.
* вызывается по флагу, который устанавливается в прерывании таймера */
if(dynascan_flag)
{
DND_DynaScan();
dynascan_flag = 0;
}
}
}
Пт авг 19, 2022 11:52:14
Пт авг 19, 2022 14:04:26
Если изначально есть "1253", то при сдвиге влево нужно следующим шагом анимации вывести число "253_" ( _ - это пробел), затем еще один шаг анимации - число "53_ _", потом "5_ _ _", и в завершении "_ _ _ _ ".
Чтобы вдвинуть слева направо НОВОЕ число, нужно наоборот: "8 _ _ _ ", "08_ _", "908_", "1908".
наверно нужно прочесть что у нас буфере на пример время
присвоить d0 = digit_out[0] что в первом разряде ,
d1 = во втором разряде
и т.д.
и вызвать функцию эффект
Пт авг 19, 2022 21:05:31
Сб авг 20, 2022 06:54:53
Вс авг 21, 2022 10:28:48
Вт авг 23, 2022 14:23:20
Сб авг 27, 2022 17:44:48
Сб авг 27, 2022 18:08:14
Сб авг 27, 2022 21:39:57
Сб авг 27, 2022 22:27:53
День недели просится на 3 символа
Сб авг 27, 2022 23:31:56
Вс авг 28, 2022 06:44:15
Вс авг 28, 2022 07:26:53
Вс авг 28, 2022 10:00:34
день недели показывать отдельным экраном. 3 знакоместа из четырех.
Я никогда нигде не видел индикацию дней недели, если семисегментники. И не надо.
Вс авг 28, 2022 11:06:06
Вс авг 28, 2022 11:13:42
меня одни часы на 7сегментниках показывают время - число_месяц - время - день_недели - время, 8 сек/1.5 сек/8 сек/1.5 сек
вторые - время - число_месяц - день_недели - температура_за_бортом - время 8 сек/1.5 сек/1.5 сек/2 сек
Вс авг 28, 2022 12:10:30