keil5,单片机stm32,在不同函数里面传递信息除了全局变量和指针,还有什么

现在在搞单片机stm32的流水灯和闪烁切换,要求按下按键模式不变,松开才变,

img

img


现在遇到问题是要将所有不是main函数的函数封装到另一个头文件里面,但是要随时检测按键信号变化,又不能用指针和全局变量,我是不太懂了。这图是我一开始用全局变量实现了,后面要封装函数不能用了改指针,后面又说不能用指针,然后就不懂了,感谢帮助。

你在主循环里扫描按键就行,然后开启一个1ms的定时器定时,当按键第一次按下用一个防抖时间标致计时,在定时器中断里计时,每次扫描按键如果按下而且时间超过10ms仍旧按键说明按键有效保存键值,主循环扫描按键释放,扫描到释放执行按键处理程序

最后我把其他东西全扔一堆,还是用全局变量,不过全局变量方另外一个c里面了,成了,不过我还是想知道大佬们说的按键扫描函数是什么

其实C工程里有个东西是全局的,只是没留意而已,所有函数都是全局的,好好利用一下吧

int key_scan()
{
if(BUTTON1==1 || BUTTON2==1 || BUTTON3==1 || BUTTON4==1)
{
HAL_Delay(10);
if(BUTTON1==1) return button1;
else if(BUTTON2==1) return button2;
else if(BUTTON3==1) return button3;
else if(BUTTON4==1) return button4;
}
}
这里的BUTTON属宏定义,当然也可以直接写成HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0);读取引脚电平,通过返回的值来判断按键状态。