#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"
#define SEG_A GPIO_NUM_0
#define SEG_B GPIO_NUM_2
#define SEG_C GPIO_NUM_4
#define SEG_D GPIO_NUM_5
#define SEG_E GPIO_NUM_12
#define SEG_F GPIO_NUM_14
#define SEG_G GPIO_NUM_27
#define SEG_DP GPIO_NUM_17
#define SEG_COM1 GPIO_NUM_1
void display_digit(int digit) {
const int segments[10][7] = {
// A B C D E F G
{ 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, 1, 0, 1, 1 } // 9
};
gpio_set_level(SEG_A, 0);
gpio_set_level(SEG_B, 0);
gpio_set_level(SEG_C, 0);
gpio_set_level(SEG_D, 0);
gpio_set_level(SEG_E, 0);
gpio_set_level(SEG_F, 0);
gpio_set_level(SEG_G, 0);
gpio_set_level(SEG_DP, 0);
for (int i = 0; i < 7; i++) {
if (segments[digit][i]) {
switch (i) {
case 0: gpio_set_level(SEG_A, 1); break;
case 1: gpio_set_level(SEG_B, 1); break;
case 2: gpio_set_level(SEG_C, 1); break;
case 3: gpio_set_level(SEG_D, 1); break;
case 4: gpio_set_level(SEG_E, 1); break;
case 5: gpio_set_level(SEG_F, 1); break;
case 6: gpio_set_level(SEG_G, 1); break;
}
}
}
}
void app_main(void) {
gpio_set_direction(SEG_A, GPIO_MODE_OUTPUT);
gpio_set_direction(SEG_B, GPIO_MODE_OUTPUT);
gpio_set_direction(SEG_C, GPIO_MODE_OUTPUT);
gpio_set_direction(SEG_D, GPIO_MODE_OUTPUT);
gpio_set_direction(SEG_E, GPIO_MODE_OUTPUT);
gpio_set_direction(SEG_F, GPIO_MODE_OUTPUT);
gpio_set_direction(SEG_G, GPIO_MODE_OUTPUT);
gpio_set_direction(SEG_DP, GPIO_MODE_OUTPUT);
int count = 0;
while (1) {
display_digit(count);
count++;
if (count > 9) {
count = 0;
}
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
}