codeFlowType:
codeWrite
codeFlowLang:
C#
Панель samkoon-043qe . Программа написания SKTOOL7.1. Задание: написать макрос на языке СИ таймер обратного отсчета где числовой ввод установки времени LW1. Числовой дисплей отображающий оставшееся время LW2 . Кнопка пуск таймера битовый переключатель LB1. Кнопка пауза ,битовый переключатель LB2.
// Макрос для панели Samkoon-043QE в среде SKTOOL7.1
// Задача: Реализовать таймер обратного отсчета с вводом времени, дисплеем, кнопками "Пуск" и "Пауза"
using System;
namespace Samkoon043QE_Timer
{
class Program
{
// Время в секундах для установки таймера
static int totalTimeSeconds = 0;
// Оставшееся время
static int remainingSeconds = 0;
// Статусы таймера
static bool timerRunning = false;
static bool timerPaused = false;
static void Main(string[] args)
{
Console.WriteLine("Введите время таймера в секундах (LW1):");
// Ввод времени установки (LW1)
if (int.TryParse(Console.ReadLine(), out totalTimeSeconds))
{
remainingSeconds = totalTimeSeconds;
}
else
{
Console.WriteLine("Некорректный ввод. Программа завершена.");
return;
}
// Основной цикл
while (true)
{
// Отображение оставшегося времени на дисплее LW2
DisplayRemainingTime();
// Проверка кнопок:
Console.WriteLine("Нажмите 'p' для Пуска, 's' для Паузы, 'e' для выхода:");
if (Console.KeyAvailable)
{
var key = Console.ReadKey(true).KeyChar;
switch (key)
{
case 'p':
case 'P':
StartTimer();
break;
case 's':
case 'S':
PauseTimer();
break;
case 'e':
case 'E':
Console.WriteLine("Выход из программы.");
return;
}
}
// Таймер обратного отсчета, если он запущен и не на паузе
if (timerRunning && !timerPaused)
{
System.Threading.Thread.Sleep(1000); // Задержка 1 секунда
remainingSeconds--;
if (remainingSeconds <= 0)
{
Console.WriteLine("Время вышло!");
timerRunning = false;
remainingSeconds = 0;
}
}
else
{
// Малая задержка для предотвращения высокой загрузки CPU
System.Threading.Thread.Sleep(200);
}
}
}
static void DisplayRemainingTime()
{
// Форматирование времени HH:MM:SS
TimeSpan remainingTime = TimeSpan.FromSeconds(remainingSeconds);
Console.WriteLine($"LW2 (оставшееся время): {remainingTime:hh\\:mm\\:ss}");
}
static void StartTimer()
{
if (remainingSeconds > 0)
{
timerRunning = true;
timerPaused = false;
Console.WriteLine("Таймер запущен.");
}
else
{
Console.WriteLine("Оставшееся время равно 0, установите новое время.");
}
}
static void PauseTimer()
{
if (timerRunning)
{
timerPaused = !timerPaused;
Console.WriteLine(timerPaused ? "Таймер поставлен на паузу." : "Таймер продолжен.");
}
}
}
}
Объяснение:
totalTimeSeconds
и remainingSeconds
хранят время установки и оставшееся время.remainingSeconds
каждую секунду, и выводит оставшееся время на дисплей LW2.Примечание: В реальной панели Samkoon-043QE чаще используются функции мультиграфики и интеграция внутренней логики программирования, однако на примере кода показана логика таймера на C# для понятности.