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

相关推荐
这波不该贪内存的13 小时前
裸机开发VS单片机:架构与实战对比
单片机
山羊硬件Time14 小时前
自动化管理Linux的好工具:shell script
linux·嵌入式硬件·硬件工程师·基带工程·硬件开发
神一样的老师14 小时前
【兆易创新GD32VW553开发板试用】红外遥控接入天气时钟实战
驱动开发·单片机·嵌入式硬件
asjodnobfy15 小时前
Π型滤波电路
嵌入式硬件·硬件工程
多看多敲多思考17 小时前
华润微CS32ME10 MCU使用教程(2)---CS32ME10之UART串口模块使用
stm32·单片机·嵌入式硬件·mcu
神一样的老师17 小时前
【兆易创新GD32VW553开发板试用】天气时钟设计与调试实战
单片机·嵌入式硬件·物联网
国科安芯17 小时前
核电站仪控与监测系统中抗辐射 MCU 芯片应用研究
单片机·嵌入式硬件·macos·无人机·cocos2d·核电站
黑白园18 小时前
STM32系统时钟由72M修改为36M验证示例
stm32·单片机·嵌入式硬件
LCG元18 小时前
基于ARM7的LCD设计与实现:S3C4510B通用IO口控制液晶模块
stm32·单片机·嵌入式硬件
山后太阳18 小时前
Keil5(MDK-ARM)完整下载安装教程+入门教程:从零搭建STM32开发环境
arm开发·stm32·嵌入式硬件