七、Key中断 这个实验非常简单,本实例利用测评三、的GPIO_LCD直接完成。 打开PINS_LED工程,打开main.c;用打开文件的方式打开工程PINS_isr\Souse\main.c就像下截图那样,下图1。 打开对勾描述的main.c,观察代码,发现有一段描述key中断的函数:
void KEY_IRQHandler(void){ if((PINS_ReadPmInt**(PMC) & (1<<KEY1_PIN)) != 0) { /* Get interrupt flag */ LED_On(LED_RED); PINS_ClrPinInt**Cmd(PMC, KEY1_PIN);kk=101; /* Clear interrupt flag */ }else if((PINS_ReadPmInt**(PMC) & (1<<KEY2_PIN)) != 0){ LED_Off(LED_RED); PINS_ClrPinInt**Cmd(PMC, KEY2_PIN);kk=202; /* Clear interrupt flag */ }else{ PINS_ClrPmInt**Cmd(PMC); /* Clear interrupt flags for all pins in the port */ } } 为了能在LCD中显示按键值,我们将key1定义为101;key2定义为202;奸商棕色有下划线的部分,当然在自定义全局变量里增加一个: int kk=0; 将这段代码拷贝到本工程main.c的所有sysTick函数的后边即可。因为用了中断,主函数中原来的这串代码就不用了,本例用/**/注释掉了。打开对勾的main.c在main函数中多了两行代码: /* set PMC interrupt callback function */ INT_SYS_InstallHandler(PMC_IRQn,&KEY_IRQHandler,(ISR_T*) 0); /* Enable PMC interrupt */ INT_SYS_EnableIRQ(PMC_IRQn); 将他们拷贝到本main.c工程main函数的加载项位置,我加在串口初始化之前,前后有关系吗?除了与系统和系统时钟之外,其他的先后次序关系不大,仅仅跟那个函数先用有关,比如某些函数启动过程需要打印参数以便观察,那么串口初始化就必须放在这函数之前,以此类推。 之后在LCD显示中增加一个外部变量:extern int kk;
增加显示key值的项即可。见照片2。
|