//Exemplo 6
//Controle de Display 7seg com dois dígitos
#include "pico/stdlib.h"
#include <stdio.h>
// Definição dos pinos dos segmentos do display e dos controles dos displays (Dig1 e Dig2)
const uint8_t pinos_segmentos[] = {2, 3, 4, 5, 6, 7, 8}; // Pinos dos segmentos a, b, c, d, e, f, g
const uint8_t pinos_display[] = {10, 11}; // Pinos de controle dos displays (Digito 1, Digito 2)
// Mapeamento dos dígitos para os segmentos do display 7-segmentos
const uint8_t digitos[10][7] = {
{1, 1, 1, 1, 1, 1, 0}, // 0
{0, 1, 1, 0, 0, 0, 0}, // 1
{1, 1, 0, 1, 1, 0, 1}, // 2
{1, 1, 1, 1, 0, 0, 1}, // 3
{0, 1, 1, 0, 0, 1, 1}, // 4
{1, 0, 1, 1, 0, 1, 1}, // 5
{1, 0, 1, 1, 1, 1, 1}, // 6
{1, 1, 1, 0, 0, 0, 0}, // 7
{1, 1, 1, 1, 1, 1, 1}, // 8
{1, 1, 1, 0, 0, 1, 1}, // 9
};
// Função para configurar os pinos como saída
void setup() {
for (int i = 0; i < 7; i++) {
gpio_init(pinos_segmentos[i]);
gpio_set_dir(pinos_segmentos[i], GPIO_OUT);
}
for (int i = 0; i < 2; i++) {
gpio_init(pinos_display[i]);
gpio_set_dir(pinos_display[i], GPIO_OUT);
gpio_put(pinos_display[i], 1); // Displays inicialmente desligados
}
}
// Função para exibir um dígito em um display específico
void mostrar_digito(uint8_t digito, uint8_t display) {
// Desliga os displays
gpio_put(pinos_display[0], 1);
gpio_put(pinos_display[1], 1);
// Atualiza os segmentos para o dígito desejado
for (int i = 0; i < 7; i++) {
gpio_put(pinos_segmentos[i], digitos[digito][i]);
}
// Liga o display desejado
gpio_put(pinos_display[display], 0);
}
int main()
{
// Inicializa e configura os pinos
stdio_init_all();
setup();
while (1)
{
//Cálculo dos valores das dezenas e unidades(Digito 1 e Digito 2)
for (int count = 0; count < 100; count++) {
uint8_t dezena = (count / 10);
uint8_t unidade = (count % 10);
printf("Contagem: %d\n", count);//linha de debug para acompanhar a contagem
for (int j = 0; j < 100; j++) { // Multiplexação dos dígitos
mostrar_digito(unidade, 1); // Mostra o dígito das unidades no display 1
sleep_ms(5);
mostrar_digito(dezena, 0); // Mostra o dígito das dezenas no display 2
sleep_ms(5);
}
sleep_ms(100); // Pausa entre incrementos na contagem
}
}
return 0;
}