- Типы данных, переменные и константы
- Ввод с клавиатуры и вывод данных на экран
- Арифметические операции и комбинированные операторы
- Операторы выбора if и else в С++
- Оператор switch в С++
- Цикл for в C++
- Циклы while, do while, вложенные циклы
- Двумерные массивы C++
- Массивы в C++
- Функции в C++
- Указатели C++
- Указатель на указатель C++
- Классы в С++
Дополнительный сборник задач с решениями
На этой странице собраны все задачи по темам уроков, размещенных на нашем сайте. К каждой задаче прилагается наш вариант решения. Постарайтесь всё же решать их самостоятельно и только потом сравнивать наш исходный код со своим. “Хочешь научиться программировать – программируй”!
Больше практических заданий с решениями найдёте здесь.
Рекомендуем посетить Сайт для юных программистов – где вы найдете уроки по различным языкам программирования (в том числе для детей), 3D-моделированию, Linux и др.
Всем привет,нужна помощь в написании кода на Си для микро контролера С8051F38 с жк экраном ,нужно подключить к микро контролеру 7сигментное табло(общий анод) через кнопку,при включении на табло и на экране должно отображатся 0,при зажатии на кнопку должен пойти отсчет вперед до 9 с задержкой в 500мс,при отпускании кнопки табло сохраняет последнее показанное число ,при очередном зажатии отсчет продолжается с того места где остановился и так по кругу,отсчет должен отображатся паралельно и на жк экране с надписью Status:running зеленым цветом когда отсчет идет,и Status :stop красным когда останавливается,пробовал,но не получается
#include
#include
#include
#define BUTTON_PIN PB0
#define SEGMENT_A_PIN PD0
#define SEGMENT_B_PIN PD1
#define SEGMENT_C_PIN PD2
#define SEGMENT_D_PIN PD3
#define SEGMENT_E_PIN PD4
#define SEGMENT_F_PIN PD5
#define SEGMENT_G_PIN PD6
#define SEGMENT_PORT PORTD
#define SEGMENT_DDR DDRD
#define BUTTON_PORT PORTB
#define BUTTON_DDR DDRB
// Таблица символов для 7-сегментного индикатора (общий анод)
const unsigned char SEGMENT_DIGITS[] = {
0b00001000, // 0
0b00111110, // 1
0b00100100, // 2
0b00011100, // 3
0b01001110, // 4
0b01100100, // 5
0b01111000, // 6
0b00000110, // 7
0b01111110, // 8
0b01101100, // 9
};
// Переменные
volatile uint8_t current_digit = 0;
volatile uint8_t button_state_prev = 1; // Инициализация как “отпущена” для исключения ложных нажатий
void display_digit(uint8_t digit) {
SEGMENT_PORT = ~SEGMENT_DIGITS[digit]; // Инвертировать значения для общего анода
}
void update_display() {
display_digit(status == 0 ? 0 : current_digit);
}
void handle_button_press() {
if (status == 0) {
status = 1;
current_digit = 0;
} else {
current_digit = (current_digit + 1) % 16;
}
update_display();
}
void handle_button_release() {
if (status == 1) {
status = 0;
}
}
void setup() {
// Настройка кнопки как входа с подтягивающим резистором
BUTTON_DDR &= ~(1 << BUTTON_PIN);
BUTTON_PORT |= (1 << BUTTON_PIN);
// Настройка выводов сегментов как выходов
SEGMENT_DDR |= (1 << SEGMENT_A_PIN) |
(1 << SEGMENT_B_PIN) |
(1 << SEGMENT_C_PIN) |
(1 << SEGMENT_D_PIN) |
(1 << SEGMENT_E_PIN) |
(1 << SEGMENT_F_PIN) |
(1 << SEGMENT_G_PIN);
}
void loop() {
// Считывание состояния кнопки с обнаружением фронтов (volatile для обновления флага)
volatile uint8_t button_state = PINB & (1 << BUTTON_PIN);
// Обработка нажатия кнопки с обнаружением фронтов
if (!button_state && button_state_prev) {
handle_button_press();
}
// Обработка отпускания кнопки с обнаружением фронтов
if (button_state && !button_state_prev) {
handle_button_release();
}
// Обновление отображения
update_display();
// Задержка 500 мс (заменить на соответствующую функцию задержки)
_delay_ms(500);
// Обновление предыдущего состояния кнопки
button_state_prev = button_state;
}
int main() {
setup();
loop();
return 0;
}
помогите пожалуйста, через неделю у меня экзамен по с++ ещё я сломал палец что мне делать помогите научите меня прогроммировать ато я вашему сайту поставлю 1 звезду быстро помогите мне суки твари
Как прошел экзамен?
Дано натуральне число n (n <=100), ціле число k (k =+-1) і послідовність цілих чисел a1, a2, …, an. Здійснити циклічний зсув елементів послідовності на 1 позицію вправо (при k =1) або вліво (при
k = −1)