LED模块
- 如果LED不闪烁,一定要先查看GPIOD2是否在cubemx中设置,控制锁存器。
- 闪烁、不受控制:修改lcd.c中的三个函数代码,首尾添加存储GPIOC->ODR并恢复的代码,参考[蓝桥杯]解决LED与LCD显示冲突(LED乱闪) – www.hawkjgogogo.com
- 如果没有精确的定时需求,LED尽量写在LED_PROC()即主循环中。
如果需要精确定时,则写在systick中断或者在中断中放入led标志位来通知主循环控制led。
按键模块
- 尽量理解代码的含义:key_old,key_rising,key_down以及函数中的局部变量key_temp,首先读取每一个GPIO的值,按位排列并| 0xf0,在函数中key_temp = (get_key) ^ 0xff,记得加括号,define预定义是直接展开,宁可多加括号。最后key_rising/falling就是key_temp^key_old获取到变化的位,接着&temp或者&(~temp)获取到变化的位置,通过switch(key_rising)进入对应函数。
- 如果按键需要延时的话可以使用uwTick这个随着systick变化的全局变量,在按键按下的时候记录uwTick的值(全局或者static局部),每一次进入函数的时候都用当时的uwTick减去开始按下的值,当这个值小于长按的界限时,就判断是否存在按键抬起操作。当大于界限时,就不断判断key_temp的值,确定是哪一个按键按下的。
发表回复