Загрузка данных


while (1) {
        int x = 0, y = 0;
        int hit = 0;

        // Считывание X (классический порядок битов: Pin_0 = 1, Pin_1 = 2, Pin_2 = 4)
        if (PORT_ReadInputDataBit(MDR_PORTB, PORT_Pin_0) == 0) x += 1;
        if (PORT_ReadInputDataBit(MDR_PORTB, PORT_Pin_1) == 0) x += 2;
        if (PORT_ReadInputDataBit(MDR_PORTB, PORT_Pin_2) == 0) x += 4;
        if (PORT_ReadInputDataBit(MDR_PORTB, PORT_Pin_3) == 0) x *= -1; // Знаковый бит

        // Считывание Y (классический порядок битов: Pin_4 = 1, Pin_5 = 2, Pin_6 = 4)
        if (PORT_ReadInputDataBit(MDR_PORTB, PORT_Pin_4) == 0) y += 1;
        if (PORT_ReadInputDataBit(MDR_PORTB, PORT_Pin_5) == 0) y += 2;
        if (PORT_ReadInputDataBit(MDR_PORTB, PORT_Pin_6) == 0) y += 4;
        if (PORT_ReadInputDataBit(MDR_PORTB, PORT_Pin_7) == 0) y *= -1; // Знаковый бит

        // Кнопка SELECT
        if (PORT_ReadInputDataBit(MDR_PORTC, PORT_Pin_0) == 0) {
            
            // Проверка попадания в прямоугольник (ТЕПЕРЬ ТОЛЬКО ЦЕЛЫЕ ЧИСЛА!)
            if (x >= -4 && x <= 4 && y >= -3 && y <= 3) {
                
                // 1-я четверть (ВЕРХНИЙ КРУГ)
                if (x >= 0 && y >= 0) {
                    // Уравнение окружности: x^2 + (y-3)^2 >= R^2 (R=2, R^2=4)
                    if ( (x*x + (y - 3)*(y - 3)) >= 4 ) {
                        hit = 1;
                    }
                }
                
                // 3-я четверть (НИЖНИЙ КРУГ)
                else if (x <= 0 && y <= 0) {
                    // Уравнение окружности: x^2 + (y+3)^2 >= 4
                    if ( (x*x + (y + 3)*(y + 3)) >= 4 ) {
                        hit = 1;
                    }
                }
            }

            if (hit == 1) {
                Blink(1); // Попал (Серая зона)
            } else {
                Blink(2); // Промах (Белая зона или за границами)
            }

            // Ждем отпускания кнопки SELECT
            while(PORT_ReadInputDataBit(MDR_PORTC, PORT_Pin_0) == 0);
        }
    }