/**********************************************************************
Contador 0–15 em Decimal, Binário e Hexadecimal
**********************************************************************/
#include <stdio.h>
#include <string.h>
#include "pico/stdlib.h"
#include "pico/bootrom.h"
#include "ssd1306.h"
#define botao_B1 22
Buffer de ecrã
uint8_t display_buffer[128 * SSD1306_HEIGHT / 8] = {0};
int main() {
Configuração de botões (modo de arranque)
gpio_init(botao_B1);
gpio_set_dir(botao_B1, GPIO_IN);
bool boot = gpio_get(botao_B1);
if (boot == 0) { reset_usb_boot(0, 0); }
stdio_init_all();
Inicializar OLED
SSD1306_init();
ssd1306_clear_buffer(display_buffer);
ssd1306_send_data(display_buffer, 128 * SSD1306_HEIGHT / 8);
sleep_ms(10);
uint8_t contador = 0;
Char buffer_decimal[20];
Char buffer_hex[20];
Char buffer_bin[20];
enquanto (verdadeiro) {
// ==============================
FORMATAÇÃO DE NÚMEROS
// ==============================
Decimal
sprintf(buffer_decimal, "DEC: %d", contador);
Hexadecimal
sprintf(buffer_hex, "HEX: %X", contador);
Binário (4 bits)
sprintf(buffer_bin, "BIN: %d%d%d%d%d",
(contador >> 3) & 1,
(contador >> 2) & 1,
(contador >> 1) & 1,
Counter & 1
);
// ==============================
LIMPA O TAMPÃO
// ==============================
ssd1306_clear_buffer(display_buffer);
// ==============================
ESCREVA NO ECRÃ
// ==============================
ssd1306_write_text(display_buffer, 0, 0, "CONTADOR 0-15");
ssd1306_write_text(display_buffer, 0, 16, buffer_decimal);
ssd1306_write_text(display_buffer, 0, 32, buffer_hex);
ssd1306_write_text(display_buffer, 0, 48, buffer_bin);
Atualizações OLED
ssd1306_send_data(display_buffer, 128 * SSD1306_HEIGHT / 8);
Contador de incremento
contador++;
se (contador > 15) {
Contador = 0;
}
sleep_ms(1000);
}
}