#include "stm32c0xx.h"
#define A 8
#define B 9
#define C 7
#define D 6
#define E 5
#define F 3
#define G 15
int tab[5][7] =
{
// a b c d e f g
{0, 0, 0, 1, 0, 0, 0}, // A
{1, 0, 0, 1, 1, 1, 1}, // I
{1, 0, 0, 0, 0, 0, 1}, // U
{0, 1, 1, 0, 0, 0, 0}, // E
{0, 0, 0, 0, 0, 0, 1} // O
};
void delay_ms(volatile uint32_t ms)
{
for (volatile uint32_t j = 0; j < ms * 800; j++);
}
void display_number(int num)
{
if (tab[num][0]) GPIOA->BSRR = (1U << A);
else GPIOA->BRR = (1U << A);
if (tab[num][1]) GPIOA->BSRR = (1U << B);
else GPIOA->BRR = (1U << B);
if (tab[num][2]) GPIOA->BSRR = (1U << C);
else GPIOA->BRR = (1U << C);
if (tab[num][3]) GPIOA->BSRR = (1U << D);
else GPIOA->BRR = (1U << D);
if (tab[num][4]) GPIOA->BSRR = (1U << E);
else GPIOA->BRR = (1U << E);
if (tab[num][5]) GPIOA->BSRR = (1U << F);
else GPIOA->BRR = (1U << F);
if (tab[num][6]) GPIOA->BSRR = (1U << G);
else GPIOA->BRR = (1U << G);
}
int main(void)
{
/* Enable clock GPIOA */
RCC->IOPENR |= RCC_IOPENR_GPIOAEN;
/* Set PA3, PA5, PA6, PA7, PA8, PA9, PA15 sebagai output */
GPIOA->MODER &= ~((3U << (2 * A)) | (3U << (2 * B)) | (3U << (2 * C)) |
(3U << (2 * D)) | (3U << (2 * E)) | (3U << (2 * F)) |
(3U << (2 * G)));
GPIOA->MODER |= ((1U << (2 * A)) | (1U << (2 * B)) | (1U << (2 * C)) |
(1U << (2 * D)) | (1U << (2 * E)) | (1U << (2 * F)) |
(1U << (2 * G)));
int i = 0; // mulai dari A
while (1)
{
display_number(i);
delay_ms(1000);
i = (i + 1) % 5;
}
}Loading
st-nucleo-c031c6
st-nucleo-c031c6