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);
}
}