Improve Article
Save Article
Improve Article
Save Article
In this article, we will discuss the Digital Clock in C++ Language. It is an application that allows for a personal clock that starts at a custom set time and shows the time from that point onwards. This article describes how to make such a clock in a 24-hour format with HH:MM:SS slots and start the time from where one would want it to be, and then it moves forward from there.
Features: It is a Simple Digital clock developed using basic C++ concepts that shows hour, minute, and second.
Approach: The requirements for this program are just the basic concepts of the data types, variables, manipulators, Control statements, Conditional statements, etc. Below are the steps:
- Create a screen that will show “Current time” of your location which will be implemented using simple output methods used in C++ i.e., cout, and a manipulator “setw()“.
- In the fore mentioned screen, implement the HH column, MM column, SS column, that will contain the time.
- Implement colors using System(“color 4A”), the color will be in hexadecimal format and the console can be used to implement them using double-digit hex codes (0 to F) which will, in turn, change the text color in the console of the output.
- In the last screen, a digital clock can be seen finally implemented and running from the inputted time.
Functions Used:
- System(“cls”): It is used to clear the Console or the Screen. It can be avoided if anyone wants to see whatever is appearing on the screen.
- setw(): This function is used to leave the space of particular characters that you can write in the parenthesis. It is declared in <iomanip> header file. Here setw(70) is used.
- System(“color 4A”): This function is used to make background RED and text as LIGHT GREEN.
- Sleep(): sleep is a function that is declared in <windows.h> header file. It actually suspends the execution of the program temporarily for a period of time in milliseconds.
Below is the implementation of the above approach:
C++
#include <iomanip>
#include <iostream>
#include <stdlib.h>
#include <windows.h>
using
namespace
std;
int
main()
{
system
(
"color 4A"
);
int
hour, min, sec;
cout << setw(70)
<<
"*Enter Current time*n"
;
cout <<
"HH- "
;
cin >> hour;
cout <<
"MM- "
;
cin >> min;
cout <<
"SS- "
;
cin >> sec;
system
(
"color 4A"
);
if
(hour > 23) {
cout <<
"Wrong Time input"
;
}
else
if
(min > 60) {
cout <<
"Wrong Time Input"
;
}
else
if
(sec > 60) {
cout <<
"Wrong Time Input"
;
}
else
{
while
(1)
{
system
(
"cls"
);
for
(hour; hour < 24; hour++) {
for
(min; min < 60; min++) {
for
(sec; sec < 60; sec++) {
system
(
"cls"
);
cout <<
"nnnn~~~~~~~~~"
"~~~~~~~~~~~~~~~~~~~~~"
"~~~~~~~~~~~~~~~~~~"
"Current Time = "
<< hour <<
":"
<< min <<
":"
<< sec
<<
"Hrs~~~~~~~~~~~~~~~~~~"
"~~~~~~~~~~~~~~~~~~~~~"
"~~~~~~~~~"
;
Sleep(1000);
}
sec = 0;
}
min = 0;
}
}
}
}
Input:
Output:
Improve Article
Save Article
Improve Article
Save Article
In this article, we will discuss the Digital Clock in C++ Language. It is an application that allows for a personal clock that starts at a custom set time and shows the time from that point onwards. This article describes how to make such a clock in a 24-hour format with HH:MM:SS slots and start the time from where one would want it to be, and then it moves forward from there.
Features: It is a Simple Digital clock developed using basic C++ concepts that shows hour, minute, and second.
Approach: The requirements for this program are just the basic concepts of the data types, variables, manipulators, Control statements, Conditional statements, etc. Below are the steps:
- Create a screen that will show “Current time” of your location which will be implemented using simple output methods used in C++ i.e., cout, and a manipulator “setw()“.
- In the fore mentioned screen, implement the HH column, MM column, SS column, that will contain the time.
- Implement colors using System(“color 4A”), the color will be in hexadecimal format and the console can be used to implement them using double-digit hex codes (0 to F) which will, in turn, change the text color in the console of the output.
- In the last screen, a digital clock can be seen finally implemented and running from the inputted time.
Functions Used:
- System(“cls”): It is used to clear the Console or the Screen. It can be avoided if anyone wants to see whatever is appearing on the screen.
- setw(): This function is used to leave the space of particular characters that you can write in the parenthesis. It is declared in <iomanip> header file. Here setw(70) is used.
- System(“color 4A”): This function is used to make background RED and text as LIGHT GREEN.
- Sleep(): sleep is a function that is declared in <windows.h> header file. It actually suspends the execution of the program temporarily for a period of time in milliseconds.
Below is the implementation of the above approach:
C++
#include <iomanip>
#include <iostream>
#include <stdlib.h>
#include <windows.h>
using
namespace
std;
int
main()
{
system
(
"color 4A"
);
int
hour, min, sec;
cout << setw(70)
<<
"*Enter Current time*n"
;
cout <<
"HH- "
;
cin >> hour;
cout <<
"MM- "
;
cin >> min;
cout <<
"SS- "
;
cin >> sec;
system
(
"color 4A"
);
if
(hour > 23) {
cout <<
"Wrong Time input"
;
}
else
if
(min > 60) {
cout <<
"Wrong Time Input"
;
}
else
if
(sec > 60) {
cout <<
"Wrong Time Input"
;
}
else
{
while
(1)
{
system
(
"cls"
);
for
(hour; hour < 24; hour++) {
for
(min; min < 60; min++) {
for
(sec; sec < 60; sec++) {
system
(
"cls"
);
cout <<
"nnnn~~~~~~~~~"
"~~~~~~~~~~~~~~~~~~~~~"
"~~~~~~~~~~~~~~~~~~"
"Current Time = "
<< hour <<
":"
<< min <<
":"
<< sec
<<
"Hrs~~~~~~~~~~~~~~~~~~"
"~~~~~~~~~~~~~~~~~~~~~"
"~~~~~~~~~"
;
Sleep(1000);
}
sec = 0;
}
min = 0;
}
}
}
}
Input:
Output:
Здравствуйте! В сегодняшней статье мы рассмотрим, как создать цифровые часы при помощи Python и Tkinter. Также нам понадобится модуль time.
Мы создадим окно, затем добавим к нему метку Lable, в которой будут отображаться цифровые знаки, обновляющиеся по логике часов. Так мы будем имитировать изменение времени.
И так, приступим.
Создадим файл в Pycharm или любом другом редакторе и придадим ему расширение .py.
# Для начала импортируем все элементы из модуля
from tkinter import *
from tkinter.ttk import *
# импорт модуля для преобразования кортежей через format
from time import strftime
# создание экземпляра класса Tk(), для отображенния окна приложения
root = Tk()
# добавление заголовка к окну
root.title('Цифровые часы')
# создание текстовой метки в окне прилржения, для отображения цифровых знаков. Цифры будут белыми на черном фоне
lable = Label(root, font=('aerial', 30), background='black', foreground='white')
# функция отображения времени
def time():
string = strftime('%H:%M:%S %p')
lable.config(text=string)
lable.after(1000, time)
# азмещение метки времени по центру
lable.pack(anchor='center')
time()
# запуск цикла программы
mainloop()
Если все сделано правильно, на экране отобразится текущее время с компьютера.
Таким образом, мы создали цифровые часы с Python и графической библиотекой Tkinter.
-
Создано 27.10.2022 12:37:46
-
Михаил Русаков
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
-
Кнопка:
Она выглядит вот так:
-
Текстовая ссылка:
Она выглядит вот так: Как создать свой сайт
- BB-код ссылки для форумов (например, можете поставить её в подписи):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 |
uses Dos,Crt,Graph; var gd,gm,Xc,Yc,c1,c2,c3,c4,c5,c6, d1,d2,d3,d4,d5,d6,d7,d8:integer; hr,min,sec,hund:word; {прорисовка цифр} procedure Zero(xn,yn:integer); begin Rectangle(0+xn,0+yn,5+xn,10+yn); end; procedure One(xn,yn:integer); begin Line(5+xn,0+yn,5+xn,10+yn); end; procedure Two(xn,yn:integer); begin Line(0+xn,0+yn,5+xn,0+yn); Line(5+xn,0+yn,5+xn,5+yn); Line(5+xn,5+yn,0+xn,5+yn); Line(0+xn,5+yn,0+xn,10+yn); Line(0+xn,10+yn,5+xn,10+yn); end; procedure Three(xn,yn:integer); begin Line(0+xn,0+yn,5+xn,0+yn); Line(5+xn,0+yn,5+xn,5+yn); Line(5+xn,5+yn,0+xn,5+yn); Line(5+xn,5+yn,5+xn,10+yn); Line(0+xn,10+yn,5+xn,10+yn); end; procedure Fouhr(xn,yn:integer); begin Line(0+xn,0+yn,0+xn,5+yn); Line(5+xn,0+yn,5+xn,5+yn); Line(5+xn,5+yn,0+xn,5+yn); Line(5+xn,5+yn,5+xn,10+yn); end; procedure Five(xn,yn:integer); begin Line(0+xn,0+yn,5+xn,0+yn); Line(0+xn,0+yn,0+xn,5+yn); Line(5+xn,5+yn,0+xn,5+yn); Line(5+xn,5+yn,5+xn,10+yn); Line(0+xn,10+yn,5+xn,10+yn); end; procedure Six(xn,yn:integer); begin Line(0+xn,0+yn,5+xn,0+yn); Line(0+xn,0+yn,0+xn,5+yn); Line(5+xn,5+yn,0+xn,5+yn); Line(5+xn,5+yn,5+xn,10+yn); Line(0+xn,10+yn,5+xn,10+yn); Line(0+xn,5+yn,0+xn,10+yn); end; procedure Seven(xn,yn:integer); begin Line(0+xn,0+yn,5+xn,0+yn); Line(5+xn,0+yn,5+xn,10+yn); end; procedure Eight(xn,yn:integer); begin Rectangle(0+xn,0+yn,5+xn,10+yn); Line(0+xn,5+yn,5+xn,5+yn); end; procedure Nine(xn,yn:integer); begin Line(0+xn,0+yn,5+xn,0+yn); Line(5+xn,0+yn,5+xn,5+yn); Line(5+xn,5+yn,0+xn,5+yn); Line(5+xn,5+yn,5+xn,10+yn); Line(0+xn,10+yn,5+xn,10+yn); Line(0+xn,0+yn,0+xn,5+yn); end; {выбор нужной цифры} procedure Number(n,xn,yn:integer); begin case n of 0:Zero(xn,yn); 1:One(xn,yn); 2:Two(xn,yn); 3:Three(xn,yn); 4:Fouhr(xn,yn); 5:Five(xn,yn); 6:Six(xn,yn); 7:Seven(xn,yn); 8:Eight(xn,yn); 9:Nine(xn,yn); end; end; {рисование каркаса} procedure KarkasElectro; begin Rectangle(Xc-40,Yc-15,Xc+36,Yc+15); putpixel(Xc-40+25,Yc-3,Green); putpixel(Xc-40+25,Yc+3,Green); putpixel(Xc-40+50,Yc-3,Green); putpixel(Xc-40+50,Yc+3,Green); end; {рисование нужных цифр} procedure DrawElectro; begin c1:=hr div 10;{часы} c2:=hr mod 10; c3:=min div 10;{минуты} c4:=min mod 10; c5:=sec div 10;{сукунды} c6:=sec mod 10; SetColor(Black);{черным цветом, стираем старое изображение} Number(c1,Xc-40+5,Yc-15+10); Number(c2,Xc-40+15,Yc-15+10); Number(c3,Xc-40+30,Yc-15+10); Number(c4,Xc-40+40,Yc-15+10); Number(c5,Xc-40+55,Yc-15+10); Number(c6,Xc-40+65,Yc-15+10); GetTime(hr,min,sec,hund);{определяем системное время} c1:=hr div 10; c2:=hr mod 10; c3:=min div 10; c4:=min mod 10; c5:=sec div 10; c6:=sec mod 10; SetColor(Green);{снова рисуем уже зеленым цветом} Number(c1,Xc-40+5,Yc-15+10); Number(c2,Xc-40+15,Yc-15+10); Number(c3,Xc-40+30,Yc-15+10); Number(c4,Xc-40+40,Yc-15+10); Number(c5,Xc-40+55,Yc-15+10); Number(c6,Xc-40+65,Yc-15+10); end; begin gd:=0; initgraph(gd,gm,''); Xc:=GetMaxX div 2;{центр экрана} Yc:=GetMaxY div 2; GetTime(hr,min,sec,hund);{начальное системное время} KarkasElectro; {рисуем каркас} repeat delay(1000);{в цикле через секунду} DrawElectro;{меняем изображение} until KeyPressed;{пока не нажата какая-то клавиша} end. |
В качестве примера использования событийной системы на таблице я выбрал такой популярный девайс как часы на микроконтроллере. Чтобы пример был понятен как можно более широкому кругу людей функционал часов ограничивается отображением и установкой времени. Программа носит учебный характер и не претендует на оптимальность.
Схема
Написание программы
Итак, попытаюсь сформулировать, как я кодил эту программу.
Программа учебная, а значит, все должно быть по минимуму. Отображение часов и минут, двоеточие, моргающее раз в секунду, и возможность это самое время выставить.
Из аппаратных средств нужен микроконтроллер AVR – atmega8535, символьный lcd и кнопки — для навигации по одноуровнему меню часов и установки времени. Трех штук — Enter, Up, Down вполне хватит. Кнопкой Cancel пренебрежем.
Кнопки будут опрашиваться в прерывании таймера Т0, а с помощью таймера Т1 будут формироваться секундные интервалы. Можно, конечно, использовать таймер Т2 с внешним часовым кварцем, но не суть.. точность сейчас не главное.
В прерываниях таймеров в очередь будут помещаться события. Событий будет четыре — по одному на каждую кнопку + секундный тик.
У часов будет три состояния — отображение времени, установка часов, установка минут.
Исходя из всего этого, можно расписать логику работы часов в виде таблице переходов.
Чтобы описать таблицу в Си коде, нужно определить коды состояний и событий, а также написать обработчики. Коды состояний и событий я вынес в заголовочный файл list_event.h, он используется в некоторых программных модулях.
//коды событий
#define EVENT_NULL 0
#define EVENT_KEY_UP 1
#define EVENT_KEY_DOWN 2
#define EVENT_KEY_ENTER 3
#define EVENT_SYS_TIMER 4
//коды состояний
#define STATE_NO_CHANGE 0
#define STATE_NORMAL 1
#define STATE_SET_HOUR 2
#define STATE_SET_MINUTE 3
Обработчики я поместил в модуль intrface.h, interface.c. На начальном этапе их можно заменить пустой функцией EmptyFunc (она есть в заготовке событийной системы) или создать функции-обработчики без тела, как делал я.
В модуле interface нет комментариев, но там все довольно просто — функции делают в точности то, что описано в последнем столбце таблицы переходов. Думаю, разберетесь.
//interface.h прототипы функций
void GUI_General(void);
void GUI_SelectHour(void);
void GUI_SelectMinute(void);
void GUI_IncHour(void);
void GUI_DecHour(void);
void GUI_IncMinute(void);
void GUI_DecMinute(void);
void GUI_SetTime(void);
void GUI_ChangeTime(void);
Таблицу переходов закодил в заготовке событийной системы — event-system.c
__flash struct ROW_TABLE table[] = {
//STATE EVENT NEXT STATE STATE_FUNC
{STATE_NORMAL, EVENT_KEY_ENTER, STATE_SET_HOUR, GUI_SelectHour},
{STATE_NORMAL, EVENT_SYS_TIMER, STATE_NO_CHANGE, GUI_ChangeTime},
{STATE_SET_HOUR, EVENT_KEY_ENTER, STATE_SET_MINUTE, GUI_SelectMinute},
{STATE_SET_HOUR, EVENT_KEY_UP, STATE_NO_CHANGE, GUI_IncHour},
{STATE_SET_HOUR, EVENT_KEY_DOWN, STATE_NO_CHANGE, GUI_DecHour},
{STATE_SET_MINUTE, EVENT_KEY_ENTER, STATE_NORMAL, GUI_General},
{STATE_SET_MINUTE, EVENT_KEY_UP, STATE_NO_CHANGE, GUI_IncMinute},
{STATE_SET_MINUTE, EVENT_KEY_DOWN, STATE_NO_CHANGE, GUI_DecMinute},
{ 0, 0, 0, EmptyFunc}
};
Дальше.
Сделал модуль timer.c, timer.h. Там три функции — функция инициализации таймеров Т0 и Т1 и функции прерываний. Т0 вызывает прерывания каждые 10мс, Т1 — каждую секунду.
void TIM_Init(void)
{
…..
}
//опрос кнопок
#pragma vector = TIMER0_COMP_vect
__interrupt void Timer0Comp(void)
{
BUT_Debrief(); //функция опроса кнопок из модуля button.c
}
//секундный таймер
#pragma vector = TIMER1_COMPA_vect
__interrupt void Timer1CompA(void)
{
ES_PlaceEvent(EVENT_SYS_TIMER);
}
Остальные модули buttons.c, bcd.c, lcd_lib.c у меня уже были готовы — остались от проекта «термометр на микроконтроллере». Я подключил их к проекту и настроил заголовочные файлы:
в button.h — пины, к которым подключены кнопки и порт
в lcd_lib.h – пины, к которым подключен lcd, порт, частоту кварца, опрос флага занятости и тип контроллера.
в bcd.h – переопределил функцию вывода на lcd
Далее, включил в main заголовочные файлы необходимых модулей и вписал функции инициализации — таймеров, дисплея, событийной системы и кнопок.
//модуль main
#include <ioavr.h>
#include <intrinsics.h>
#include «lcd_lib.h»
#include «buttons.h»
#include «event-system.h»
#include «interface.h»
#include «timer.h»
int main( void )
{
unsigned char event = 0;
LCD_Init();
BUT_Init();
TIM_Init();
ES_Init();
GUI_General();
__enable_interrupt();
while(1){
event = ES_GetEvent();
if (event){
ES_Dispatch(event);
}
}
return 0;
}
И последним этапом было написание кода обработчиков и отладка программы.
Вот собственно и все.
Простые цифровые часы, которые делаются в «два клика»
Unit1.cpp
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Timer1Timer(TObject *Sender) { Form1->Label1->Caption=Time().FormatString("hh:mm:ss"); } //---------------------------------------------------------------------------
Unit1.h
//--------------------------------------------------------------------------- #ifndef Unit1H #define Unit1H //--------------------------------------------------------------------------- #include <System.Classes.hpp> #include <Vcl.Controls.hpp> #include <Vcl.StdCtrls.hpp> #include <Vcl.Forms.hpp> #include <Vcl.ExtCtrls.hpp> //--------------------------------------------------------------------------- class TForm1 : public TForm { __published: // IDE-managed Components TTimer *Timer1; TLabel *Label1; void __fastcall Timer1Timer(TObject *Sender); private: // User declarations public: // User declarations __fastcall TForm1(TComponent* Owner); }; //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; //--------------------------------------------------------------------------- #endif
- Подробности
- Родительская категория: Уроки и примеры программирования C++ Embarcadero RAD Studio 10 | C++ Builder 10
- Категория: Часы и таймеры
-
Просмотров: 7200
Перейти к содержанию
На чтение 2 мин Просмотров 15
Условие задачи : Написать программу выводящую на экран «электронные часы», которые работают в течение нескольких минут или пока не нажата любая кнопка пользователя.
Сложность : легкая.
Как мы будем решать эту задачу?
Сразу стоит сказать что нам понадобиться два цикла for , один для минут один для секунд.
Для начала мы просто сделаем цикл для секунд т.е. от 0 до 60. Но просто секунды нам не нужны.
Поэтому мы сразу делаем еще один цикл для минут, от 0 до числа которое введет пользователь -1 .
Почему -1? Если вы оставите то число которое ввел пользователь, то у вас цикл будет работать на минуту больше.
Давайте перейдем к каркасу программы
crt ;
var
i, min, sec :
integer
;
begin
write
(
‘Введите количество минут : ‘
); readln(min);
{пользователь вводит кол-во минут}
end
.
Итого три переменные. Давайте создадим цикл для секунд :
sec :=
0
to
60
do
begin
writeln
(минуты,
‘ : ‘
,sec);
Delay(
1000
);
clrscr;
{каждую секунду мы будем очищать экран}
end
;
Информация
- Delay(1000) — будет у нас делать задержку в 1 секунду
Теперь добавляем наш второй цикл :
i:=
0
to
min-
1
do
for
sec :=
0
to
60
do
begin
writeln
(i,
‘ : ‘
,sec);
Delay(
1000
);
clrscr;
{каждую секунду мы будем очищать экран}
end
;
Осталось сделать так чтобы по нажатию на любую клавишу программы прекращала работу.
Информация
- KeyPresses — нажатие клавиши
- Halt — выход из программы
Весь код программы
crt ;
var
i , sec , min :
integer
;
begin
write
(
‘Введите количество минут : ‘
); readln(min);
for
i:=
0
to
min-
1
do
begin
for
sec :=
0
to
60
do
begin
writeln
(i,
‘ : ‘
,sec);
Delay(
1000
);
clrscr;
if
KeyPressed
then
Halt ;
end
;
end
;
end
.
Беликова Ирина
Учитель физики, информатики и вычислительной техники. Победитель конкурса лучших учителей Российской Федерации в рамках Приоритетного Национального Проекта «Образование».