使用2D阵列初始化STM32F引脚

我正在做一个项目,涉及使用STM32F4板点亮一个7SEG显示器,到目前为止,我设法使用这段代码初始化所有输出引脚。

void init_library(vector_pin_t pines)
{

    GPIO_InitTypeDef puerto;
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE); 

    puerto.GPIO_Pin   = 0xFFFF;     //Using only this to choose all pins
    puerto.GPIO_Mode  = GPIO_Mode_OUT;
    ...
    }

上面的代码很好用 但我想知道如何用一个二维数组 “v “来做同样的事情?

vector_pin_t v={{PortD,Pin_Port_0},{PortD,Pin_Port_1}{PortD,Pin_Port_2},
{PortD,Pin_Port_3} , {PortD,Pin_Port_4}, {PortD,Pin_Port_5}, {PortD,Pin_Port_6}, {PortD,Pin_Port_7}};

init_library(v);

解决方案:

一个更简单的方法是将每个数字的引脚值存储在一个字节中(每个引脚1位)。

例如像这样。

#define NUM_DIGIT_VALUES 11

// Segments:
// ..a..
// f   b
// . g .
// e   c
// ..d.. dot

static const byte digits[NUM_DIGIT_VALUES] = {
    // dot-abcdefg
    0b01111110, // = 0
    0b00110000, // = 1
    0b01101101, // = 2
    0b01111001, // = 3
    0b00110011, // = 4
    0b01011011, // = 5
    0b01011111, // = 6
    0b01110000, // = 7
    0b01111111, // = 8
    0b01111011, // = 9
    0b01001001  // = overflow
};

然后你可以一次把整个字节写到一个端口上.

例如:要显示数字 2,就把 digits[2]写入所需的端口。

本文来自投稿,不代表运维实战侠立场,如若转载,请注明出处:https://www.shizhanxia.com/891.html

(0)
上一篇 2022年6月29日 下午4:01
下一篇 2022年6月29日 下午4:01

相关推荐

发表评论

登录后才能评论