LED部分的原理图
led前面有锁存器,这是为了防止led会受到lcd的干扰(lcd也需要用到这些引脚)。
每次想要对led操作,就需要先打开锁存器,再执行操作,最后关闭锁存器。
这里需要注意的是,引脚配置为低电平时,LED才会点亮。
具体操作
1)配置
首先要在stm32CubeMX里面配置PD2为高电平,目的是打开锁存器。
然后配置PC8-PC15都是高电平,默认刚上电是关闭的。
这里给高电平,但是不用上拉电阻。
2)代码
这是截取的一小段代码。需要强调的是:
一堆代码
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
LCD_Init();
LCD_Clear(Black);
LCD_SetBackColor(Black);
LCD_SetTextColor(White);
一堆代码
一定要在LCD初始化之前关闭锁存器。
这样LCD无论如何操作也不会对led造成干扰。
这就是你刚才配置的那个 锁存器和PC8-PC15。
3)相关函数
void led_all_off() //关闭所有的LED灯
{
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, 1);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_All, 1);
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, 0);
}
void led_all_on() //打开所有的LED灯
{
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, 1);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_All, 0);
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, 0);
}
void led_on(int n) //只打开某一个LED灯(n取值为 1 ~ 8)
{
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, 1);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_All, 1);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_7 << n, 0);
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, 0);
}
void led_status(unsigned char c) //打开一部分LED灯(传入的8位数据分别控制8个灯)
{
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, 1);
GPIOC -> ODR = (c << 8);
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, 0);
}