×
嵌入式 > 技术百科 > 详情

STM8S103 独立按键检测

发布时间:2020-06-03 发布时间:
|

硬件环境采用STM8SF103,电压为3.3V。

电路需要注意的是STM8SF103这系列的IO作为输入口时只能是上拉输入和悬浮输入,虽然是弱上拉,在VCC为3.3V电压时,仍然能够被拉升至3.0V左右。

所以按键检测电路IO口一端需要接地,而不是外接上拉。悬浮方式下IO仍然会有0.89V左右电压,读取对应的IO寄存器IDR,仍然处于逻辑高电平状态。

软件代码相对很简单,只需要将IO口设置成上拉输入即可。采用轮询代码如下:


  1. //初始化只需要设置IO口模式即可。  

  2.     GPIO_Init(KEY2_PORT,KEY2_PIN,GPIO_MODE_IN_PU_NO_IT); //上拉输入,不产生中断  

  3.   

  4. //按键检测部分  

  5.   

  6. /* 

  7. #define KEY1               0 

  8. #define KEY1_PORT (GPIOD) 

  9. #define KEY1_PIN (GPIO_PIN_4) 

  10. #define KEY2 1 

  11. #define KEY2_PORT (GPIOC) 

  12. #define KEY2_PIN (GPIO_PIN_1) 

  13. */  

  14. u8 CheckKey(u8 key)  

  15. {    

  16.     if(key==KEY1)  

  17.     {  

  18.         if(KEY1_PORT->IDR&KEY1_PIN) //检测到有按键了,IO口电压会被拉低  

  19.         {  

  20.             delay_5ms();  

  21.             if(KEY1_PORT->IDR&KEY1_PIN) //仍然存在低电平  

  22.             {  

  23.                 while(!(KEY1_PORT->IDR&KEY1_PIN)); //等待放开  

  24.                 return KEY1;               

  25.             }                      

  26.         }           

  27.         return 0;       

  28.     }else if(key==KEY2)    

  29.     {  

  30.         if(!(KEY2_PORT->IDR&KEY2_PIN)) //检测到有按键了  

  31.         {  

  32.             delay_5ms();  

  33.             if(!(KEY2_PORT->IDR&KEY2_PIN)) //仍然存在低电平  

  34.             {  

  35.                 while(KEY2_PORT->IDR&KEY2_PIN); //等待放开   

  36.                 return KEY2;  

  37.             }  

  38.         }  

  39.         return 0;  

  40.     }  

  41.     return 0;  

  42. }   



总结:

硬件电路将按键IO口的一端接地。

软件配置不能使用悬浮输入方式,这种方式电压可能会不稳定。


 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
ADI 高精度低功耗精密放大器