Untitled
unknown
plain_text
2 years ago
5.2 kB
10
Indexable
#include <xc.h>
#include <libpic30.h>
#include <stdio.h>
#include <string.h>
#include "lcd.h"
#include "buttons.h"
#define INITIAL_TIME (1500) // Ca?kowity pocz?tkowy czas dla ka?dego gracza w sekundach
volatile unsigned int total_seconds = INITIAL_TIME;
void delay_ms(unsigned long milliseconds) {
while (milliseconds--) {
__delay32(4000); // Zak?adaj?c 8 MHz FCY (8 MIPS)
}
}
int main(void) {
char display_buffer[32];
LCD_Initialize();
unsigned int white_time_remaining = total_seconds;
unsigned int black_time_remaining = total_seconds;
int current_phase = 3;
while (1) {
// Sprawdzamy przyciski w ka?dej iteracji p?tli g?ównej
if (BUTTON_IsPressed(BUTTON_S6)) {
current_phase = 0; // Mat
LCD_ClearScreen();
LCD_PutString("Mat", strlen("Mat")); // Wy?wietlenie komunikatu "Mat"
delay_ms(2000); // Czekamy 2 sekundy na odczyt komunikatu
white_time_remaining = total_seconds;
black_time_remaining = total_seconds;
current_phase = 3; // Powrót do ekranu startowego
continue; // Przeskakujemy do nast?pnej iteracji p?tli
}
if (BUTTON_IsPressed(BUTTON_S3) && BUTTON_IsPressed(BUTTON_S4)) {
current_phase = 0; // Remis
LCD_ClearScreen();
LCD_PutString("Remis", strlen("Remis")); // Wy?wietlenie komunikatu "Remis"
delay_ms(2000); // Czekamy 2 sekundy na odczyt komunikatu
white_time_remaining = total_seconds;
black_time_remaining = total_seconds;
current_phase = 3; // Powrót do ekranu startowego
continue; // Przeskakujemy do nast?pnej iteracji p?tli
}
switch (current_phase) {
case 0: // Koniec czasu - resetowanie zegarów i powrót do ekranu startowego
LCD_ClearScreen();
if (white_time_remaining < 1) {
LCD_PutString("Biale przegrywaja", strlen("Biale przegrywaja"));
} else if (black_time_remaining < 1) {
LCD_PutString("Czarne przegrywaja", strlen("Czarne przegrywaja"));
}
delay_ms(10000); // Czekamy 10 sekund
white_time_remaining = total_seconds; // Reset czasu bia?ych
black_time_remaining = total_seconds; // Reset czasu czarnych
current_phase = 3;
break;
case 1: // Tura bia?ych
if (BUTTON_IsPressed(BUTTON_S4)) {
current_phase = 2;
break;
}
sprintf(display_buffer, "%02u:%02u biale", white_time_remaining / 60, white_time_remaining % 60);
LCD_ClearScreen();
LCD_PutString(display_buffer, strlen(display_buffer));
LCD_PutString("\n", 1);
sprintf(display_buffer, "%02u:%02u czarne", black_time_remaining / 60, black_time_remaining % 60);
LCD_PutString(display_buffer, strlen(display_buffer));
delay_ms(1000); // Czekamy 1 sekund?
white_time_remaining--;
if (white_time_remaining < 1) {
current_phase = 0;
}
break;
case 2: // Tura czarnych
if (BUTTON_IsPressed(BUTTON_S3)) {
current_phase = 1;
break;
}
sprintf(display_buffer, "%02u:%02u czarne", black_time_remaining / 60, black_time_remaining % 60);
LCD_ClearScreen();
LCD_PutString(display_buffer, strlen(display_buffer));
LCD_PutString("\n", 1);
sprintf(display_buffer, "%02u:%02u biale", white_time_remaining / 60, white_time_remaining % 60);
LCD_PutString(display_buffer, strlen(display_buffer));
delay_ms(1000); // Czekamy 1 sekund?
black_time_remaining--;
if (black_time_remaining < 1) {
current_phase = 0;
}
break;
case 3: // Kto zaczyna?
LCD_ClearScreen();
LCD_PutString("Kto zaczyna?\n S3=b S4=cz", strlen("Kto zaczyna?\n S3=b S4=cz"));
delay_ms(1000);
LCD_ClearScreen();
if (BUTTON_IsPressed(BUTTON_S3)) {
current_phase = 1; // Bia?e zaczynaj?
break;
}
if (BUTTON_IsPressed(BUTTON_S4)) {
current_phase = 2; // Czarne zaczynaj?
break;
}
break;
default:
break;
}
// Resetowanie gry przez przytrzymanie przycisku S5
if (BUTTON_IsPressed(BUTTON_S5)) {
current_phase = 3;
white_time_remaining = total_seconds;
black_time_remaining = total_seconds;
}
}
return 0;
}
Editor is loading...
Leave a Comment