目录
前言
因为之前发的那篇博客存在一定的问题,所以这篇文章就是针对于前面那篇做出的一些调整(but 不是说完全调整了哈,因为本身能力还是不太行,所以就只把自己能够调整的进行了调整)
一、调整部分说明
本次调整修改了LED灯的显示部分
二、具体调整程序块
1.回调函数(计时)
由于前面两个定时器的使用并没有达到程序要的效果,所以这次我直接没有用定时器计时1s,而是转用了HAL库的函数HAL_Delay();
这里要提到的一个点就是,我在程序中使用的是HAL_Delay(1000);(在后面会给出来的),因为我之前了解到的这个函数延时的单位是1ms,所以直接就1000了。
但是我在查的时候有许多博主说它存在一个1ms延时的情况,所以在平时使用的时候需要注意。
因为这里的参数比较大,所以1ms可以忽略,就直接了。
(以上只是我目前了解到的一些,所以会存在一些认知错误的地方,希望懂的博主告知~~~~~)
2.LED模块函数
单个LED灯的亮灭情况改变:
void Change_One_Led(unsigned char led ,unsigned char value)
{
HAL_GPIO_WritePin(GPIOC,led<<8,value==1?GPIO_PIN_RESET:GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
}
HAL_GPIO_WritePin函数有三个参数,分别是所属的GPIO组,该GPIO组中的哪个引脚,该引脚要设置的高低电平
检测合格时对应LED的亮灭情况:
void Led_Check_Qulify()
{
if(qulify_37==1)
{
Change_One_Led(0x01,1);
HAL_Delay(1000);
Change_One_Led(0x01,0);
qulify_37=0;
}
if(qulify_38==1)
{
Change_One_Led(0x02,1);
HAL_Delay(1000);
Change_One_Led(0x02,0);
qulify_38=0;
}
}
这里就用到了我上面提到的HAL_Delay()函数。调整的地方就是把这个小的功能单独用了一个函数封装起来,一定要记得的就是在运行之后要把检测合格对应的标志初始一下。
显示界面时对应LED的亮灭:
void Change_Menu_Led(uint8_t menu)
{
if(menu%3==0)
{
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_11,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_12,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
}
else if(menu%3==1)
{
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_11,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_12,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
}
else
{
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_11,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_12,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
}
}
这里就实现比较简单基础了(原谅我的小小实现,米有那么“高大”)主要注意的就是每当切换了一个显示界面,要记得把上个显示界面对应的LED灯熄灭。
LED灯与LCD显示冲突:
这个情况是我在运行的时候发现的一个点,当时不太明白,以为是我的程序有问题,但是后面别人提醒了一下,所以才知道是因为这个两个在使用时会有冲突。具体的原因可以去看这篇文章(也是一个很厉害的大佬^^)
调整之后的初始化函数:
void sys_work()
{
Usart_Function();
Get_ADC(37);
Get_ADC(38);
Key_Proc();
Display_Lcd();
HAL_GPIO_WritePin(GPIOC,0xff00,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
Change_Menu_Led(menu);
}
总结
好啦,以上就是我目前的一些调整,希望在记录自己的过程中可以有一点点灵感给你们。
(再唠叨一下,有不对的地方,非常欢迎告知)