STM32物联网项目学习笔记——触摸按键(4个)

1.程序功能

        1)触摸按键1单击与长按,控制LED1; 

        2)触摸按键2单击与长按,控制LED2;

        3)触摸按键3单击与长按,控制LED3;

        4)触摸按键4单击与长按,控制LED4;

2.硬件电路图
        KEY1,KEY2,KEY3,KEY4是4个按键,C15、C16、C20、C21电容起到调节触摸灵敏度和滤波的作用。TP0,TP1,TP2,TP3是输入口,TPQ0,TPQ1,TPQ2,TPQ3是输出口,分别连接到单片机的PE0,PE1,PE2,PE3口。初始化:AHLB=1,LPMB=1,SM=0,MOT0=0。

3.触摸芯片TTP224

 本项目按键触发模式为直接模式,开漏输出,低电平有效;

SM=0:单键模式;

LPMB=1:快速模式;

4.CubeMX 初始化配置

 触发模式选择外部中断下降沿触发。

 NVIC里配置中断,优先级可随意。

5.代码部分

 1)外部中断回调函数(CallBack.c)

/*** @brief  EXTI line detection callbacks.* @param  GPIO_Pin: Specifies the pins connected EXTI line* @retval None*/
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{switch(GPIO_Pin){case KEY1_Pin: KEY1.KEY_Flag = TRUE;	break;case KEY2_Pin: KEY2.KEY_Flag = TRUE;	break;case KEY3_Pin: KEY3.KEY_Flag = TRUE;	break;case KEY4_Pin: KEY4.KEY_Flag = TRUE;	break;default:printf("´íÎó - ÍⲿÖжϻص÷º¯ÊýÖУ¬´¥Ãþ°´¼ü¼üÖµ´íÎó£¡\r\n\r\n");}
}

 2)按键检测函数(Key.c)

/** @name   KEY1_Detect* @brief  ´¥Ãþ°´¼ü1¼ì²â* @param  None* @retval None      
*/
static void KEY1_Detect() 
{uint8_t i = 0;if(KEY1.KEY_Flag == TRUE){KEY1.Click = FALSE;KEY1.Press = TRUE;//´¥Ãþ°´¼ü³¤°´¼ì²âfor(i=0;i<200;i++){HAL_Delay(10);//Èç¹û2sÄÚ£¬°´¼ü״̬³öÏÖ¸ßµçÆ½£¬´Ëʱ°´¼üΪµ¥»÷£¬Ìø³öÑ­»·if(HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin) == GPIO_PIN_SET){KEY1.Click = TRUE;KEY1.Press = FALSE;break; //Ìø³öforÑ­»·}}if(KEY1.Click == TRUE){printf("¼ì²âµ½´¥Ãþ°´¼ü1µ¥»÷\r\n");//°´¼ü1µ¥»÷¶¯×÷LED.LED_Flip(LED1);}if(KEY1.Press == TRUE){printf("¼ì²âµ½´¥Ãþ°´¼ü1³¤°´\r\n");//°´¼ü1³¤°´¶¯×÷LED.LED_Flip(LED1);HAL_Delay(200);LED.LED_Flip(LED1);}//Çå³ý°´¼ü״̬KEY1.KEY_Flag = FALSE;KEY1.Click = FALSE;KEY1.Press = FALSE;}
}/** @name   KEY2_Detect* @brief  ´¥Ãþ°´¼ü1¼ì²â* @param  None* @retval None      
*/
static void KEY2_Detect() 
{uint8_t i = 0;if(KEY2.KEY_Flag == TRUE){KEY2.Click = FALSE;KEY2.Press = TRUE;//´¥Ãþ°´¼ü³¤°´¼ì²âfor(i=0;i<200;i++){HAL_Delay(10);//Èç¹û2sÄÚ£¬°´¼ü״̬³öÏÖ¸ßµçÆ½£¬´Ëʱ°´¼üΪµ¥»÷£¬Ìø³öÑ­»·if(HAL_GPIO_ReadPin(KEY2_GPIO_Port,KEY2_Pin) == GPIO_PIN_SET){KEY2.Click = TRUE;KEY2.Press = FALSE;break; //Ìø³öforÑ­»·}}if(KEY2.Click == TRUE){printf("¼ì²âµ½´¥Ãþ°´¼ü2µ¥»÷\r\n");//°´¼ü2µ¥»÷¶¯×÷LED.LED_Flip(LED2);}if(KEY2.Press == TRUE){printf("¼ì²âµ½´¥Ãþ°´¼ü2³¤°´\r\n");//°´¼ü2³¤°´¶¯×÷LED.LED_Flip(LED2);HAL_Delay(200);LED.LED_Flip(LED2);}//Çå³ý°´¼ü״̬KEY2.KEY_Flag = FALSE;KEY2.Click = FALSE;KEY2.Press = FALSE;}
}/** @name   KEY3_Detect* @brief  ´¥Ãþ°´¼ü1¼ì²â* @param  None* @retval None      
*/
static void KEY3_Detect() 
{uint8_t i = 0;if(KEY3.KEY_Flag == TRUE){KEY3.Click = FALSE;KEY3.Press = TRUE;//´¥Ãþ°´¼ü³¤°´¼ì²âfor(i=0;i<200;i++){HAL_Delay(10);//Èç¹û2sÄÚ£¬°´¼ü״̬³öÏÖ¸ßµçÆ½£¬´Ëʱ°´¼üΪµ¥»÷£¬Ìø³öÑ­»·if(HAL_GPIO_ReadPin(KEY3_GPIO_Port,KEY3_Pin) == GPIO_PIN_SET){KEY3.Click = TRUE;KEY3.Press = FALSE;break; //Ìø³öforÑ­»·}}if(KEY3.Click == TRUE){printf("¼ì²âµ½´¥Ãþ°´¼ü3µ¥»÷\r\n");//°´¼ü3µ¥»÷¶¯×÷LED.LED_Flip(LED3);}if(KEY3.Press == TRUE){printf("¼ì²âµ½´¥Ãþ°´¼ü3³¤°´\r\n");//°´¼ü3³¤°´¶¯×÷LED.LED_Flip(LED3);HAL_Delay(200);LED.LED_Flip(LED3);}//Çå³ý°´¼ü״̬KEY3.KEY_Flag = FALSE;KEY3.Click = FALSE;KEY3.Press = FALSE;}
}/** @name   KEY4_Detect* @brief  ´¥Ãþ°´¼ü1¼ì²â* @param  None* @retval None      
*/
static void KEY4_Detect() 
{uint8_t i = 0;if(KEY4.KEY_Flag == TRUE){KEY4.Click = FALSE;KEY4.Press = TRUE;//´¥Ãþ°´¼ü³¤°´¼ì²âfor(i=0;i<200;i++){HAL_Delay(10);//Èç¹û2sÄÚ£¬°´¼ü״̬³öÏÖ¸ßµçÆ½£¬´Ëʱ°´¼üΪµ¥»÷£¬Ìø³öÑ­»·if(HAL_GPIO_ReadPin(KEY4_GPIO_Port,KEY4_Pin) == GPIO_PIN_SET){KEY4.Click = TRUE;KEY4.Press = FALSE;break; //Ìø³öforÑ­»·}}if(KEY4.Click == TRUE){printf("¼ì²âµ½´¥Ãþ°´¼ü4µ¥»÷\r\n");//°´¼ü4µ¥»÷¶¯×÷Relay.Relay_Flip();}if(KEY4.Press == TRUE){printf("¼ì²âµ½´¥Ãþ°´¼ü4³¤°´\r\n");//°´¼ü4³¤°´¶¯×÷Relay.Relay_Flip();HAL_Delay(200);Relay.Relay_Flip();}//Çå³ý°´¼ü״̬KEY4.KEY_Flag = FALSE;KEY4.Click = FALSE;KEY4.Press = FALSE;}
}

3)MyInit.c

4)System.c

/** @name   Run* @brief  ϵͳÔËÐÐ* @param  None* @retval None      
*/
static void Run()
{KEY1.KEY_Detect();KEY2.KEY_Detect();KEY3.KEY_Detect();KEY4.KEY_Detect();
}

将MyInit.Peripheral_Set()和System.Run()放入main函数里

 6.实验现象

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部