本部分主要实现是按键控制LED,开发板上只有一个复位键显示是不能用的,结合着墨水屏模块才能实现,墨水屏模块上有三个用户按键可以使用,咱们根据编码定义为A、B、C,通过检测者三个按键的输出,编程实现按键控制LED灯的亮灭(按下一次LED亮,再按一次LED灭) 。
我们看一下墨水屏模块的硬件原理部分:
按键按下的事后对应的引脚为低电平,SWA对应GP12,SWB对应GP13,SWC对应GP14.
有一点比较好的就是不管是开发板板还是模块对于引脚都明显标注出来了,这样我们就可以快速进行配对了,我们创建按键对应的宏定义:
#define INKY_KEYA_PIN 12 #define INKY_KEYB_PIN 13 #define INKY_KEYC_PIN 14
按键采集程序增加了延时防抖以及抬起等待,避免循环判断:
char get_key(char key_pin){ if(gpio_get(key_pin) == 0){ MY_DEV_Delay_ms(10); if(gpio_get(key_pin) == 0){ while(gpio_get(key_pin) == 0); return 1; } else return 0; } else{ return 0; } }
主程序中但凡检测到按键动作(ABC均可)就翻转LED:
if(get_key(INKY_KEYA_PIN) == 1 || get_key(INKY_KEYB_PIN) == 1 || get_key(INKY_KEYC_PIN) == 1) LED_Toggle();效果如下: