历史上的今天
今天是:2025年12月21日(星期日)
2022年12月21日 | NO.9 矩阵键盘和MSP432实例——控制MSP开发板板载LED
2022-12-21 来源:zhihu
上一节我们介绍了矩阵键盘的具体原理,这次我们来将实际操作。
首先,在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); 至此我们的程序就完全完成了,我们来看一下运行结果。
史海拾趣
|
错误提示:identifier expected,该错误是指向我的.H的头文件的,请问这个是什么意思?该怎么找错在哪里了?在线等,敬请高手指点!先谢谢了!… 查看全部问答> |
|
经过这些天的查找资料,基本上人脸识别的算法都搞清了。。。下面简述一下各种算法: (1) FPGA硬件选型采用Xilinx公司的Vertex芯片。该单元由视频采集模块、异步FIFO模块、视频解码模块、I2C 配置接口模块、图像帧存控制模块、图像低级处理模块、通 ...… 查看全部问答> |
|
CC1101、CC2530都写的最大电压3.9V,工作电压为1.8(2.0)~3.6V。 那么如果电压时3.7V,是否能稳定工作?芯片有没有损坏的危险?还是芯片不会坏,单片机有故障等危险? 因为设计需要使用3.7V电池。实际回路中约3.67V。超过3.6V,故有此提问。请大家 ...… 查看全部问答> |
|
各位好,变量定义如下: char xdata ziku[] = {...} _at_ 0x0020; unsigned xdata int shuzu[] = {...}; unsigned xdata long ack; 求教:下面那两个未指定固定位置的xdata类型变量在编译的时候是否会和上面被指定固定位置的变量重叠呢?谢谢… 查看全部问答> |
|
分析仪基本参数 1、采样率100MHz 2、采样通道16 3、存储容量(待定) 4、存储深度(待定) 5、测量范围0-5V 6、支持协议(有待开发) 核心芯片选择 1、USB接口芯片(CY7C68013A-100AXC)16位FIFO接口。 2、FPGA (EP2C5Q208C8N orEP2C8Q20 ...… 查看全部问答> |
|
随着时代的发展和竞争环境的不断变化,在职场上打拼多年的“老兵们”渐渐开始有所顾虑:“这份工作我要一直做下去吗?是不是该换个环境?”在你的潜意识里,你是不是也不止一次地问过自己,也许是出于生活的压力,也许是出于个人发展的需要,多 ...… 查看全部问答> |
|
本帖最后由 paulhyde 于 2014-9-15 03:09 编辑 如题,最近在做一个用示波器显示8个递减圆的题目,利用示波器的X-Y去显示,编程都编号的,但实际调试的时候发现两个单片机时钟不能同步,请问有什么办法可以使两片单片机使用同一个时钟啊? &nb ...… 查看全部问答> |
|
本帖最后由 abofly 于 2015-11-2 18:48 编辑 由于本人目前只接触过一个嵌入式操作系统μCos,因此本次设计采用了该系统。 新旗舰机的诞生必定导致老款的降价,人们似乎总是在追求最新……,呵呵我也不例外。 操作系统当然想用最新的,直接官 ...… 查看全部问答> |




