二、LED模块
(一)硬件结构
如图,为LED的硬件结构。首先我们来说明一下PD2如何控制锁存器,PD2------高电平时,PC8------PC15的高低电平对LED有效。若为低电平,PC8------PC15的高低电平对LED没有影响。

LED的配置步骤

(二)LED示例代码
cpp
/**
* @brief 显示led灯
* @param 显示哪个灯
* @param 控制亮灭 0 - 亮 1 - 灭
* @retval
*/
void led_show(uint8_t led, int id)
{
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET);//把PD2置高电平 锁存器-透明模式-读取GPIO状况
if(id)
{
HAL_GPIO_WritePin(GPIOC ,GPIO_PIN_8<<(led-1),GPIO_PIN_SET);
}
else
{
HAL_GPIO_WritePin(GPIOC ,GPIO_PIN_8<<(led-1),GPIO_PIN_RESET);
}
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);//把PD2置低电平 锁存器-锁存-不再读取GPIO状况
}
(三)左移运算符
左移运算符(<<)是位运算的一种,它的作用是将一个数的二进制位 全部向左移动指定的位数,右边空出的位置用 0 补齐,左边超出的位数则直接丢弃。
那我们这里是如何使用左移运算选择LED灯的呢?
首先,我们来看一下GPIO_PIN_8 的地址为16进制**(uint16_t)0x0100** 转换为二进制为:
0000 0001 0000 0000
然后,我们通过左移运算符,左移一位便可以得到二进制为0000 0010 0000 0000
转换为16进制为 0x0200
对于着GPIO_PIN_9 (uint16_t)0x0200)
所以,通过左移运算符,可以选择LED灯。
最后,我们来讲讲16进制如何转换为二进制
十六进制的每 1 位,正好对应二进制的4 位(因为 2=16)
| 16 进制 | 二进制 | 16 进制 | 二进制 | 16 进制 | 二进制 | 16 进制 | 二进制 |
|---|---|---|---|---|---|---|---|
| 0 | 0000 | 4 | 0100 | 8 | 1000 | C | 1100 |
| 1 | 0001 | 5 | 0101 | 9 | 1001 | D | 1101 |
| 2 | 0010 | 6 | 0110 | A | 1010 | E | 1110 |
| 3 | 0011 | 7 | 0111 | B | 1011 | F | 1111 |
(四)结语
一定要注意PD2的一个功能!!! 17届蓝桥杯大家一起共勉!!!