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

相关推荐
时空自由民.1 小时前
RGB Image Sensor 和 RGB LCD Scren 的HSYNC和VSYNC的区别,以及ESP32 RGB LCD外设工作原理介绍
单片机
RFID舜识物联网1 小时前
耐高温RFID技术如何解决汽车涂装车间管理难题?
大数据·人工智能·嵌入式硬件·物联网·安全·信息与通信
笨笨饿2 小时前
#55_NE595脉冲电路
stm32·单片机·硬件工程
2301_805962932 小时前
ESP32之esptool.py 常用快捷命令
stm32·单片机·嵌入式硬件
NULL指向我2 小时前
TMS320F28379D笔记1:主控-从核双核架构认识
笔记·单片机
sweetone2 小时前
用一个电阻及一段胶带修复 VORWERK (福维克) THERMOMIX(美善品) TM5-1食品料理机 不工作故障
经验分享·单片机·嵌入式硬件
星宇笔记2 小时前
我做了一个本地网页版嵌入式调试工具:支持 Serial / TCP / UDP、实时曲线、HEX 发送
单片机·嵌入式硬件·网络协议·tcp/ip·udp·开源软件
时空自由民.2 小时前
显示屏关键参数
单片机
LS_learner2 小时前
DDRPHY、DDRPHYIO、DDR颗粒三者的关系以及带宽增大对三者功耗的影响
嵌入式硬件
Fang_pi_dai_zhi3 小时前
物联网onenet的token算法
单片机·物联网