Регулируемый таймер обратного отсчета
Компоненты и расходные материалы
| | × | 1 | |
| 4-значный 7-сегментный дисплей | | × | 1 | |
| | × | 4 | |
| | × | 1 | |
| | × | 21 | |
| Беспаечный макет, полный размер | | × | 1 | |
Об этом проекте
Таймер обратного отсчета, наверное, самый естественный проект для 4-х разрядного 7-сегментного дисплея. Изучая то, что доступно в Интернете, я нашел несколько проектов, но не нашел тот, который имел в виду, а именно автономный регулируемый таймер обратного отсчета, который можно удобно настроить с помощью кнопок (а не путем загрузки измененного кода). Поэтому я решил сделать такой.
Я потратил некоторое время на написание кода, который упростит использование и настройку таймера, чтобы его можно было использовать на практике.
Включенный код также может быть использован в других проектах с 4-значным 7-сегментным дисплеем. В частности, у него есть функция, которая отображает заданное число (0-9999) для заданного временного интервала. Возможно, этот функционал есть в некоторых библиотеках, но быстрый поиск его не выявил. Поскольку программирование этого дисплея немного сложно (поскольку вы можете отображать только одну цифру за раз), такая функция действительно удобна.
Код
- Таймер обратного отсчета с 4-значным 7-сегментным дисплеем
Таймер обратного отсчета с 4-значным 7-сегментным дисплеем C / C ++
Код содержит функцию таймера обратного отсчета, которая запускает обратный отсчет, отображаемый на 4-значном 7-сегментном дисплее. Он также имеет полезную функцию PrintNumber, которая показывает заданное 4-значное число на дисплее в течение заданного времени. Его можно использовать в других проектах. #include int digit_pin [] ={6, 9, 10, 11}; // ШИМ Отображение цифровых выводов слева направоint SpeakerPin =15; #define DIGIT_ON LOW #define DIGIT_OFF HIGHint segA =2; int segB =3; int segC =4; int segD =5; int segE =A0; // вывод 6 используется bij display 1 для его функции pwm int segF =7; int segG =8; // int segPD =; int button1 =13; int button2 =12; int button3 =16; int button4 =17; int countdown_time =60; struct struct_digits {int digit [4]; }; void setup () {pinMode (segA, ВЫХОД); pinMode (segB, ВЫХОД); pinMode (segC, ВЫХОД); pinMode (сегД, ВЫХОД); pinMode (сегмент, ВЫХОД); pinMode (segF, ВЫХОД); pinMode (сегГ, ВЫХОД); для (int я =0; я <4; я ++) {pinMode (digit_pin [я], ВЫХОД); } pinMode (динамикPin, ВЫХОД); pinMode (button1, INPUT_PULLUP); pinMode (button2, INPUT_PULLUP); pinMode (button3, INPUT_PULLUP); pinMode (button4, INPUT_PULLUP);} void playTone (int tone, int duration) {for (long k =0; k 0; q -) {PrintNumber (q, del); если (digitalRead (button2) ==LOW) {return false; }} PrintNumber (0,0); playTone (1519,1000); return true;} void reset () {int м, нули, d, нажата3 =0, нажата4 =0; m =время обратного отсчета; struct struct_digits цифра; dig =IntToDigits (время обратного отсчета); while (digitalRead (button1) ==HIGH) {для (int j =0; j <4; j ++) {SwitchDigit (j); lightNumber (цифра. цифра [j]); задержка (5); } if (digitalRead (button3) ==LOW) {if (loaded3 ==0 || loaded3> 30) {if (countdown_time> 0) {countdown_time - =1; } dig =IntToDigits (countdown_time); } нажал3 + =1; } else if (digitalRead (button4) ==LOW) {if (loaded4 ==0 || loaded4> 30) {if (countdown_time <9999) {countdown_time + =1; } dig =IntToDigits (countdown_time); } нажал4 + =1; } если (digitalRead (button3) ==ВЫСОКИЙ) {нажатый3 =0; } если (digitalRead (button4) ==ВЫСОКИЙ) {нажатый4 =0; }}} недействительный цикл () {сброс (); в то время как (! Обратный отсчет (countdown_time, 962)) {сброс (); } while (digitalRead (button2) ==1) {};}
Схема