LED模块控制与左移运算详解

二、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届蓝桥杯大家一起共勉!!!

相关推荐
Tronlong创龙18 小时前
SBC‑TLT153 嵌入式 Linux 应用开发,交叉编译与 GDB 调试实践(上)
嵌入式硬件·嵌入式开发·硬件开发·工业控制·工业开发板
巴渝小禹19 小时前
单片机死循环delay_us()计算方法
单片机·嵌入式硬件
Yiran_G19 小时前
LoRa串口模组和SoC模组怎么选?从MCU架构看无线通信方案设计
嵌入式硬件·物联网
HQB202619 小时前
CN6150|简芯维尔 6V/500mA 高速低噪声 CMOS‑LDO 线性稳压器
嵌入式硬件·硬件工程
科芯创展20 小时前
XZ3445 高集成升压/升降压DC-DC电源芯片技术解析
单片机·嵌入式硬件
艾芯微科技21 小时前
高充放电流锂电充放 SoC:ETA9885E10,便携储能、小移动电源 BOM 选型笔记
网络·单片机·嵌入式硬件·集成测试·51单片机
艾芯微科技21 小时前
钰泰 ETA6973PQ3Y|QFN3×3 2A 同步降压 Buck,I2C 可配置多档输出,动态调压 PMIC
网络·单片机·嵌入式硬件·fpga开发·集成测试·51单片机
Brilliantwxx1 天前
【STM32】 通用定时器:输入捕获与输出比较详解 测脉宽、测频率
stm32·单片机·嵌入式硬件·mcu
意法半导体STM321 天前
【官方原创】LAT1703 STM32C5 LL Cordic例程
stm32·单片机·嵌入式硬件·stm32c5·ll cordic