本帖最后由 shenweizuibang 于 2021-4-17 23:57 编辑
第1题:基本的按键操作(如独立按键/4x4矩阵按键等),能完成基本的按键操作。 1.完整硬件的照片
2.引脚连接图等电路图
3.工程源代码(建议直接上传整个工程)
4.如果键盘使用了驱动芯片,则要上传驱动芯片的手册等资料
***********************************************************************************
1.硬件
MSP432P401R LaunchPad + 4x4矩阵按键
4x4矩阵按键
正面
反面
2.硬件连接
矩阵按键第一行R1接开发板P6.6,第二行R2接P6.7,第三行R3接P2.3,第四行R4接P5.1,
第一列C1接P5.6,第二列C2接P2.4,第三列C3接P2.6, 第四列C4接P2.7。
正面
反面
3.程序功能
功能描述:初始状态,LED1,LED2都灭,
按下按键S1,开启LED模式1, LED1红灯常亮,
按下按键S2,开启LED模式2, LED2红灯常亮,
按下按键S3,开启LED模式3, LED2绿灯常亮,
按下按键S4,开启LED模式4, LED2蓝灯常亮,
按下按键S5,开启LED模式5, LED2白灯常亮,
按下按键S6,开启LED模式6, LED1红灯慢速闪烁,
按下按键S7,开启LED模式7, LED2红灯慢速闪烁,
按下按键S8,开启LED模式8, LED2绿灯慢速闪烁,
按下按键S9,开启LED模式9, LED2蓝灯慢速闪烁,
按下按键S10,开启LED模式10, LED2白灯慢速闪烁,
按下按键S11,开启LED模式11, LED1红灯快速闪烁,
按下按键S12,开启LED模式12, LED2红灯快速闪烁,
按下按键S13,开启LED模式13, LED2绿灯快速闪烁,
按下按键S14,开启LED模式14, LED2蓝灯快速闪烁,
按下按键S15,开启LED模式15, LED2白灯快速闪烁,
按下按键S16,开启LED模式16, LED1红灯和LED2白灯快速闪烁。
程序可用框架:中断处理程序,列扫描方式,模式选择。
程序里有详细注释。
LED1红灯亮
LED2红灯亮
LED2绿灯亮
LED2蓝灯亮
LED2白灯亮
4.程序代码
- #include <ti/devices/msp432p4xx/driverlib/driverlib.h>
- #include <stdint.h>
- #include <stdbool.h>
- #define DELAYL 100000 //长延时,LED闪烁频率慢
- #define DELAYS 10000 //短延时,LED闪烁频率快
- uint32_t KeyS=0; //LED模式选择参数,第几个按键按下对应第几个LED模式
- int main(void)
- {
- volatile uint32_t ii; //设置变量ii, 作为延时循环次数,ii越大,闪烁频率越慢
- /* 关闭看门狗 */
- MAP_WDT_A_holdTimer();
- /* 配置LED1,LED2为输出*/
- MAP_GPIO_setAsOutputPin(GPIO_PORT_P1, GPIO_PIN0);
- MAP_GPIO_setAsOutputPin(GPIO_PORT_P2, GPIO_PIN0);
- MAP_GPIO_setAsOutputPin(GPIO_PORT_P2, GPIO_PIN1);
- MAP_GPIO_setAsOutputPin(GPIO_PORT_P2, GPIO_PIN2);
- MAP_GPIO_setAsOutputPin(GPIO_PORT_P5, GPIO_PIN6); //第1列C1
- MAP_GPIO_setAsOutputPin(GPIO_PORT_P2, GPIO_PIN4); //第2列C2
- MAP_GPIO_setAsOutputPin(GPIO_PORT_P2, GPIO_PIN6); //第3列C3
- MAP_GPIO_setAsOutputPin(GPIO_PORT_P2, GPIO_PIN7); //第4列C4
- /* 所有列输出低电平*/
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P5, GPIO_PIN6);
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN4);
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN6);
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN7);
- /* 配置第1行R1--P6.6为上拉电阻输入并使能中断 */
- MAP_GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P6, GPIO_PIN6);
- MAP_GPIO_clearInterruptFlag(GPIO_PORT_P6, GPIO_PIN6);
- MAP_GPIO_enableInterrupt(GPIO_PORT_P6, GPIO_PIN6);
- //MAP_Interrupt_enableInterrupt(INT_PORT6);
- /* 配置第2行R2--P6.7为上拉电阻输入并使能中断 */
- MAP_GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P6, GPIO_PIN7);
- MAP_GPIO_clearInterruptFlag(GPIO_PORT_P6, GPIO_PIN7);
- MAP_GPIO_enableInterrupt(GPIO_PORT_P6, GPIO_PIN7);
- MAP_Interrupt_enableInterrupt(INT_PORT6);
- /* 配置第3行R3--P2.3为上拉电阻输入并使能中断 */
- MAP_GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P2, GPIO_PIN3);
- MAP_GPIO_clearInterruptFlag(GPIO_PORT_P2, GPIO_PIN3);
- MAP_GPIO_enableInterrupt(GPIO_PORT_P2, GPIO_PIN3);
- MAP_Interrupt_enableInterrupt(INT_PORT2);
- /* 配置第4行R4--P5.1为上拉电阻输入并使能中断 */
- MAP_GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P5, GPIO_PIN1);
- MAP_GPIO_clearInterruptFlag(GPIO_PORT_P5, GPIO_PIN1);
- MAP_GPIO_enableInterrupt(GPIO_PORT_P5, GPIO_PIN1);
- MAP_Interrupt_enableInterrupt(INT_PORT5);
- /* Enabling SRAM Bank Retention */
- MAP_SysCtl_enableSRAMBankRetention(SYSCTL_SRAM_BANK1);
-
- /* 使能全局中断 */
- MAP_Interrupt_enableMaster();
- /* 进入LED模式选择循环 */
- while (1)
- {
- /* 模式1, LED1红灯常亮*/
- if(KeyS == 1)
- {
- MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P1, GPIO_PIN0);
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN0);
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN1);
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN2);
- }
- /* 模式2, LED2红灯常亮*/
- else if(KeyS == 2)
- {
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN0);
- MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P2, GPIO_PIN0);
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN1);
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN2);
- }
- /* 模式3, LED2绿灯常亮*/
- else if(KeyS == 3)
- {
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN0);
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN0);
- MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P2, GPIO_PIN1);
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN2);
- }
- /* 模式4, LED2蓝灯常亮*/
- else if(KeyS == 4)
- {
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN0);
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN0);
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN1);
- MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P2, GPIO_PIN2);
- }
- /* 模式5, LED2白灯常亮*/
- else if(KeyS == 5)
- {
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN0);
- MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P2, GPIO_PIN0);
- MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P2, GPIO_PIN1);
- MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P2, GPIO_PIN2);
- }
- /* 模式6, LED1红灯慢速闪烁*/
- else if(KeyS == 6)
- {
- MAP_GPIO_toggleOutputOnPin(GPIO_PORT_P1, GPIO_PIN0);
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN0);
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN1);
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN2);
- for( ii=0 ; ii < DELAYL ; ii++ )
- {
- }
- }
- /* 模式7, LED2红灯慢速闪烁*/
- else if(KeyS == 7)
- {
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN0);
- MAP_GPIO_toggleOutputOnPin(GPIO_PORT_P2, GPIO_PIN0);
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN1);
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN2);
- for( ii=0 ; ii < DELAYL ; ii++ )
- {
- }
- }
- /* 模式8, LED2绿灯慢速闪烁*/
- else if(KeyS == 8)
- {
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN0);
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN0);
- MAP_GPIO_toggleOutputOnPin(GPIO_PORT_P2, GPIO_PIN1);
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN2);
- for( ii=0 ; ii < DELAYL ; ii++ )
- {
- }
- }
- /* 模式9, LED2蓝灯慢速闪烁*/
- else if(KeyS == 9)
- {
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN0);
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN0);
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN1);
- MAP_GPIO_toggleOutputOnPin(GPIO_PORT_P2, GPIO_PIN2);
- for( ii=0 ; ii < DELAYL ; ii++ )
- {
- }
- }
- /* 模式10, LED2白灯慢速闪烁*/
- else if(KeyS == 10)
- {
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN0);
- MAP_GPIO_toggleOutputOnPin(GPIO_PORT_P2, GPIO_PIN0);
- MAP_GPIO_toggleOutputOnPin(GPIO_PORT_P2, GPIO_PIN1);
- MAP_GPIO_toggleOutputOnPin(GPIO_PORT_P2, GPIO_PIN2);
- for( ii=0 ; ii < DELAYL ; ii++ )
- {
- }
- }
- /* 模式11, LED1红灯快速闪烁*/
- else if(KeyS == 11)
- {
- MAP_GPIO_toggleOutputOnPin(GPIO_PORT_P1, GPIO_PIN0);
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN0);
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN1);
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN2);
- for( ii=0 ; ii < DELAYS ; ii++ )
- {
- }
- }
- /* 模式12, LED2红灯快速闪烁*/
- else if(KeyS == 12)
- {
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN0);
- MAP_GPIO_toggleOutputOnPin(GPIO_PORT_P2, GPIO_PIN0);
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN1);
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN2);
- for( ii=0 ; ii < DELAYS ; ii++ )
- {
- }
- }
- /* 模式13, LED2绿灯快速闪烁*/
- else if(KeyS == 13)
- {
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN0);
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN0);
- MAP_GPIO_toggleOutputOnPin(GPIO_PORT_P2, GPIO_PIN1);
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN2);
- for( ii=0 ; ii < DELAYS ; ii++ )
- {
- }
- }
- /* 模式14, LED2蓝灯快速闪烁*/
- else if(KeyS == 14)
- {
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN0);
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN0);
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN1);
- MAP_GPIO_toggleOutputOnPin(GPIO_PORT_P2, GPIO_PIN2);
- for( ii=0 ; ii < DELAYS ; ii++ )
- {
- }
- }
- /* 模式15, LED2白灯快速闪烁*/
- else if(KeyS == 15)
- {
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN0);
- MAP_GPIO_toggleOutputOnPin(GPIO_PORT_P2, GPIO_PIN0);
- MAP_GPIO_toggleOutputOnPin(GPIO_PORT_P2, GPIO_PIN1);
- MAP_GPIO_toggleOutputOnPin(GPIO_PORT_P2, GPIO_PIN2);
- for( ii=0 ; ii < DELAYS ; ii++ )
- {
- }
- }
- /* 模式16, LED1红灯和LED2白灯快速闪烁*/
- else if(KeyS == 16)
- {
- MAP_GPIO_toggleOutputOnPin(GPIO_PORT_P1, GPIO_PIN0);
- MAP_GPIO_toggleOutputOnPin(GPIO_PORT_P2, GPIO_PIN0);
- MAP_GPIO_toggleOutputOnPin(GPIO_PORT_P2, GPIO_PIN1);
- MAP_GPIO_toggleOutputOnPin(GPIO_PORT_P2, GPIO_PIN2);
- for( ii=0 ; ii < DELAYS ; ii++ )
- {
- }
- }
- /* 其他模式, LED1、LED2熄灭*/
- else
- {
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN0);
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN0);
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN1);
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN2);
- }
- }
- }
- /* GPIO中断服务程序 */
- /* 在中断中进行列扫描判断哪个按键按下,中断结束将所有列置为0. */
- /* 第1行和第2行的按键中断服务程序,*/
- void PORT6_IRQHandler(void)
- {
- uint32_t status1; //设置一个状态标志量,寄存中断情况
- status1 = MAP_GPIO_getEnabledInterruptStatus(GPIO_PORT_P6);
- MAP_GPIO_clearInterruptFlag(GPIO_PORT_P6, status1); //清零所有中断标志位
- /*先熄灭所有LED,避免模式干扰*/
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN0);
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN0);
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN1);
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN2);
- /* 判断第一列按键是否按下,按下输入为0 */
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P5, GPIO_PIN6);
- MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P2, GPIO_PIN4);
- MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P2, GPIO_PIN6);
- MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P2, GPIO_PIN7);
- if(!(MAP_GPIO_getInputPinValue(GPIO_PORT_P6, GPIO_PIN6)) ) //S1按下
- {
- KeyS=1;
- }
- else if(!(MAP_GPIO_getInputPinValue(GPIO_PORT_P6, GPIO_PIN7)) ) //S5按下
- {
- KeyS=5;
- }
- /* 判断第二列按键是否按下,按下输入为0 */
- MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P5, GPIO_PIN6);
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN4);
- MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P2, GPIO_PIN6);
- MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P2, GPIO_PIN7);
- if(!(MAP_GPIO_getInputPinValue(GPIO_PORT_P6, GPIO_PIN6)) ) //S2按下
- {
- KeyS=2;
- }
- else if(!(MAP_GPIO_getInputPinValue(GPIO_PORT_P6, GPIO_PIN7)) ) //S6按下
- {
- KeyS=6;
- }
- /* 判断第三列按键是否按下,按下输入为0 */
- MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P5, GPIO_PIN6);
- MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P2, GPIO_PIN4);
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN6);
- MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P2, GPIO_PIN7);
- if(!(MAP_GPIO_getInputPinValue(GPIO_PORT_P6, GPIO_PIN6)) ) //S3按下
- {
- KeyS=3;
- }
- else if(!(MAP_GPIO_getInputPinValue(GPIO_PORT_P6, GPIO_PIN7)) ) //S7按下
- {
- KeyS=7;
- }
- /* 判断第四列按键是否按下,按下输入为0 */
- MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P5, GPIO_PIN6);
- MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P2, GPIO_PIN4);
- MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P2, GPIO_PIN6);
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN7);
- if(!(MAP_GPIO_getInputPinValue(GPIO_PORT_P6, GPIO_PIN6)) ) //S4按下
- {
- KeyS=4;
- }
- else if(!(MAP_GPIO_getInputPinValue(GPIO_PORT_P6, GPIO_PIN7)) ) //S8按下
- {
- KeyS=8;
- }
- /*所有列置0,方便下一次进入中断*/
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P5, GPIO_PIN6);
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN4);
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN6);
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN7);
- }
- /* 第4行的按键中断服务程序,*/
- void PORT5_IRQHandler(void)
- {
- uint32_t status3; //设置一个状态标志量,寄存中断情况
- status3 = MAP_GPIO_getEnabledInterruptStatus(GPIO_PORT_P5);
- MAP_GPIO_clearInterruptFlag(GPIO_PORT_P5, status3); //清零所有中断标志位
- /*先熄灭所有LED,避免模式干扰*/
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN0);
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN0);
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN1);
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN2);
- /* 判断第一列按键是否按下,按下输入为0 */
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P5, GPIO_PIN6);
- MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P2, GPIO_PIN4);
- MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P2, GPIO_PIN6);
- MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P2, GPIO_PIN7);
- if(!(MAP_GPIO_getInputPinValue(GPIO_PORT_P5, GPIO_PIN1) ) ) //S13按下
- {
- KeyS=13;
- }
- /* 判断第二列按键是否按下,按下输入为0 */
- MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P5, GPIO_PIN6);
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN4);
- MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P2, GPIO_PIN6);
- MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P2, GPIO_PIN7);
- if(!(MAP_GPIO_getInputPinValue(GPIO_PORT_P5, GPIO_PIN1)) ) //S14按下
- {
- KeyS=14;
- }
- /* 判断第三列按键是否按下,按下输入为0 */
- MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P5, GPIO_PIN6);
- MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P2, GPIO_PIN4);
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN6);
- MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P2, GPIO_PIN7);
- if(!(MAP_GPIO_getInputPinValue(GPIO_PORT_P5, GPIO_PIN1)) ) //S15按下
- {
- KeyS=15;
- }
- /* 判断第四列按键是否按下,按下输入为0 */
- MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P5, GPIO_PIN6);
- MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P2, GPIO_PIN4);
- MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P2, GPIO_PIN6);
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN7);
- if(!(MAP_GPIO_getInputPinValue(GPIO_PORT_P5, GPIO_PIN1)) ) //S16按下
- {
- KeyS=16;
- }
- /*所有列置0,方便下一次进入中断*/
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P5, GPIO_PIN6);
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN4);
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN6);
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN7);
- }
- /* 第3行的按键中断服务程序,*/
- void PORT2_IRQHandler(void)
- {
- uint32_t status2; //设置一个状态标志量,寄存中断情况
- status2 = MAP_GPIO_getEnabledInterruptStatus(GPIO_PORT_P2);
- MAP_GPIO_clearInterruptFlag(GPIO_PORT_P2, status2); //清零所有中断标志位
- /*先熄灭所有LED,避免模式干扰*/
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN0);
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN0);
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN1);
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN2);
- /* 判断第一列按键是否按下,按下输入为0 */
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P5, GPIO_PIN6);
- MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P2, GPIO_PIN4);
- MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P2, GPIO_PIN6);
- MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P2, GPIO_PIN7);
- if(!(MAP_GPIO_getInputPinValue(GPIO_PORT_P2, GPIO_PIN3)) ) //S9按下
- {
- KeyS=9;
- }
- /* 判断第二列按键是否按下,按下输入为0 */
- MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P5, GPIO_PIN6);
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN4);
- MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P2, GPIO_PIN6);
- MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P2, GPIO_PIN7);
- if(!(MAP_GPIO_getInputPinValue(GPIO_PORT_P2, GPIO_PIN3)) ) //S10按下
- {
- KeyS=10;
- }
- /* 判断第三列按键是否按下,按下输入为0 */
- MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P5, GPIO_PIN6);
- MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P2, GPIO_PIN4);
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN6);
- MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P2, GPIO_PIN7);
- if(!(MAP_GPIO_getInputPinValue(GPIO_PORT_P2, GPIO_PIN3)) ) //S11按下
- {
- KeyS=11;
- }
- /* 判断第四列按键是否按下,按下输入为0 */
- MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P5, GPIO_PIN6);
- MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P2, GPIO_PIN4);
- MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P2, GPIO_PIN6);
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN7);
- if(!(MAP_GPIO_getInputPinValue(GPIO_PORT_P2, GPIO_PIN3)) ) //S12按下
- {
- KeyS=12;
- }
- /*所有列置0,方便下一次进入中断*/
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P5, GPIO_PIN6);
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN4);
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN6);
- MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN7);
- }
复制代码
matrix_button.zip
(136.67 KB, 下载次数: 35)
|