上一节我们介绍了矩阵键盘的具体原理,这次我们来将实际操作。
首先,在MSP432中,对于按键的输入就是检测端口的高低电平来判断矩阵键盘的按键情况。
首先我们打开CCS中的gpiointerrupt工程,打开syscfg文件,增加几个输入和输出GPIO口,如下:
其中CONFIG_GPIO_ABCD是属于检测我们矩阵键盘中ABCD的键值。CONFIG_GPIO_GREENBLUERED是属于控制我们开发板上的三色LED灯。
然后我们打开gpiointerrupt.c这个文件,开始我们核心函数的编写。
我们实验的内容是:通过矩阵键盘检测不同的键值ABCD亮不同颜色的灯。
像往常一样,我们要引入GPIO的头文件。
/* Driver Header files */
#include
我们首先编写四个回调函数,分别对应于我们MSP432检测到按键端口电平变化,MSP432该执行什么函数,如亮红绿蓝灯,或者关闭所有灯。
void gpioButtonFxn0(uint_least8_t index)
{
/* Clear the GPIO interrupt and toggle an LED */
GPIO_toggle(CONFIG_GPIO_LED_0);
}
void gpioButtonFxnA(uint_least8_t index)
{
/* Clear the GPIO interrupt and toggle an LED */
GPIO_toggle(CONFIG_GPIO_RED);
}
void gpioButtonFxnB(uint_least8_t index)
{
/* Clear the GPIO interrupt and toggle an LED */
GPIO_toggle(CONFIG_GPIO_GREEN);
}
void gpioButtonFxnC(uint_least8_t index)
{
/* Clear the GPIO interrupt and toggle an LED */
GPIO_toggle(CONFIG_GPIO_BLUE);
}
void gpioButtonFxnD(uint_least8_t index)
{
/* 关闭所有LED灯 */
GPIO_write(CONFIG_GPIO_RED, CONFIG_GPIO_LED_OFF);
GPIO_write(CONFIG_GPIO_GREEN, CONFIG_GPIO_LED_OFF);
GPIO_write(CONFIG_GPIO_BLUE, CONFIG_GPIO_LED_OFF);
}
复制代码
在具体使用GPIO函数前,我们要先初始化GPIO:
/* Call driver init functions */
GPIO_init();
然后初始化具体端口:
/* Configure the LED and button pins */
GPIO_setConfig(CONFIG_GPIO_LED_0, GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW);
GPIO_setConfig(CONFIG_GPIO_LED_0, GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW);
GPIO_setConfig(CONFIG_GPIO_BUTTON_0, GPIO_CFG_IN_PU | GPIO_CFG_IN_INT_FALLING);
GPIO_setConfig(CONFIG_GPIO_A, GPIO_CFG_IN_PU | GPIO_CFG_IN_INT_FALLING);
GPIO_setConfig(CONFIG_GPIO_B, GPIO_CFG_IN_PU | GPIO_CFG_IN_INT_FALLING);
GPIO_setConfig(CONFIG_GPIO_C, GPIO_CFG_IN_PU | GPIO_CFG_IN_INT_FALLING);
GPIO_setConfig(CONFIG_GPIO_D, GPIO_CFG_IN_PU | GPIO_CFG_IN_INT_FALLING);
/* Turn off user LED */
GPIO_write(CONFIG_GPIO_LED_0, CONFIG_GPIO_LED_OFF);
GPIO_write(CONFIG_GPIO_GREEN, CONFIG_GPIO_LED_OFF);
GPIO_write(CONFIG_GPIO_BLUE, CONFIG_GPIO_LED_OFF);
然后将我们的四个作为输入的GPIO口与和我们的回调函数关联起来,当我们的GPIO口检测到下降沿的时候就开始执行回调函数。
/* install Button callback */
GPIO_setCallback(CONFIG_GPIO_BUTTON_0, gpioButtonFxn0);
GPIO_setCallback(CONFIG_GPIO_A, gpioButtonFxnA);
GPIO_setCallback(CONFIG_GPIO_B, gpioButtonFxnB);
GPIO_setCallback(CONFIG_GPIO_C, gpioButtonFxnC);
GPIO_setCallback(CONFIG_GPIO_D, gpioButtonFxnD);
同时我们还要开启中断:
/* Enable interrupts */
GPIO_enableInt(CONFIG_GPIO_BUTTON_0);
GPIO_enableInt(CONFIG_GPIO_A);
GPIO_enableInt(CONFIG_GPIO_B);
GPIO_enableInt(CONFIG_GPIO_C);
GPIO_enableInt(CONFIG_GPIO_D);
至此我们的程序就完全完成了,我们来看一下运行结果。