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

相关推荐
senijusene2 小时前
通信概念,51UART的使用,以及MODBUS的简单应用
c语言·开发语言·单片机·51单片机
Zevalin爱灰灰2 小时前
零基础入门学用物联网(ESP8266) 第一部分 基础知识篇(五)
单片机·物联网·嵌入式·esp8266
学嵌入式的小杨同学4 小时前
STM32 进阶封神之路(二十二):DMA 实战全攻略 ——ADC 采集 + 串口收发 + 内存复制(库函数 + 代码落地)
c++·stm32·单片机·嵌入式硬件·mcu·硬件架构·pcb
是翔仔呐4 小时前
C语言从黑框框到控硬件!51单片机零基础保姆式全系列教程 开篇前言+全书总览
c语言·开发语言·单片机·嵌入式硬件·gitee·51单片机
流浪_彩虹4 小时前
MCU/DSP 与 ROS2 如何通信?XRCE-DDS 实现 rostopic 与嵌入式 Msg 无缝映射(附架构图)
单片机·嵌入式硬件
DLGXY5 小时前
STM32(二十八)——FLASH闪存
stm32·单片机·嵌入式硬件
9稳5 小时前
基于plc的自动化立体仓库控制系统设计
开发语言·网络·数据库·嵌入式硬件·plc
ToneChip5 小时前
USBi 调试 与 MCU 运行 共存方案总结
单片机·嵌入式硬件·音频
学嵌入式的小杨同学5 小时前
STM32 进阶封神之路(二十一):DMA 深度解析 —— 从直接内存访问到无 CPU 干预数据传输(底层原理 + 寄存器配置)
stm32·单片机·嵌入式硬件·mcu·硬件架构·硬件工程·智能硬件