#include "pico/stdlib.h"
#define DIG_1 7
#define DIG_2 8
#define DIG_3 9
#define DIG_4 10
#define BOTAO_A 11
#define BOTAO_B 12
void multiplex_display(int *ptrNum);
void contagem(int jogador);
int numberA = 99, numberB = 99, tic_time = 0;
int main(){
int display[4]={1,1,0,0};
int table[11] =
{0x3F, 0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X67,0X00};
for(int pin=0; pin<11; pin++){
gpio_init(pin);
gpio_set_dir(pin, GPIO_OUT);
}
gpio_init(BOTAO_A);
gpio_set_dir(BOTAO_A,GPIO_OUT);
gpio_init(BOTAO_B);
gpio_set_dir(BOTAO_B,GPIO_OUT);
//inicializando saidas
gpio_clr_mask(0x7F);
sleep_ms(1000);
gpio_set_mask(0x780);
sleep_ms(1000);
int jogador = 1; //jogador inicia com zero para que o relogio nao mude sem que alguem aperte o botao
while (true){
display[0] = table[(numberA /10)*1000]; //primeiro digito do numero A
display[1] = table[(numberA %10)*100]; //segundo digito do numero A
display[2] = table[(numberB / 10)*10]; //primeiro digito do numero B
display[3] = table[numberB % 10]; //segundo digito do numero B
multiplex_display(display);
sleep_ms(1);
if (BOTAO_A == 0){ //testa botao e atribui um valor ao jogador
jogador = 2;
} else if (BOTAO_B == 0)
{
jogador = 1;
}
contagem(jogador);
if (BOTAO_A && BOTAO_B) //se os dois botoes forem apertados ao mesmo tempo o relogio para
{
jogador = 0;
}
}
}
void contagem(int jogador)
{
if (jogador == 1)
{
tic_time++;
sleep_ms(1);
if (tic_time >1000){ //tempo de um segundo entre o decremento
tic_time = 0;
numberB--;
if (numberB == 0) numberB = 99;
}
}
if (jogador == 2)
{
tic_time++;
sleep_ms(1);
if (tic_time >1000){ //tempo de um segundo entre o decremento
tic_time = 0;
numberA--;
if (numberA == 0) numberA = 99;
}
}
}
void multiplex_display (int *ptrNum)
{
static int display = 0;
if (display == 0) {
gpio_clr_mask(0b01111111);
gpio_put(DIG_4, 1);
gpio_put(DIG_1, 0);
gpio_set_mask(*ptrNum+display);
display++;
sleep_ms(200);
} else if (display ==1){
gpio_clr_mask(0b01111111);
gpio_put(DIG_1, 1);
gpio_put(DIG_4, 0);
gpio_set_mask(*ptrNum+display);
display++;
sleep_ms(200);
}else if (display ==2){
gpio_clr_mask(0b01111111);
gpio_put(DIG_2, 1);
gpio_put(DIG_3, 0);
gpio_set_mask(*ptrNum+display);
display++;
sleep_ms(200);
} else {
gpio_clr_mask(0b01111111);
gpio_put(DIG_3, 1);
gpio_put(DIG_4, 0);
gpio_set_mask(*ptrNum)+display;
display=0;
sleep_ms(200);
}
}