硬件環(huán)境采用STM8SF103,電壓為3.3V。
電路需要注意的是STM8SF103這系列的IO作為輸入口時只能是上拉輸入和懸浮輸入,雖然是弱上拉,在VCC為3.3V電壓時,仍然能夠被拉升至3.0V左右。
所以按鍵檢測電路IO口一端需要接地,而不是外接上拉。懸浮方式下IO仍然會有0.89V左右電壓,讀取對應(yīng)的IO寄存器IDR,仍然處于邏輯高電平狀態(tài)。
軟件代碼相對很簡單,只需要將IO口設(shè)置成上拉輸入即可。采用輪詢代碼如下:
//初始化只需要設(shè)置IO口模式即可。
GPIO_Init(KEY2_PORT,KEY2_PIN,GPIO_MODE_IN_PU_NO_IT);//上拉輸入,不產(chǎn)生中斷
//按鍵檢測部分
/*
#defineKEY10
#defineKEY1_PORT(GPIOD)
#defineKEY1_PIN(GPIO_PIN_4)
#defineKEY21
#defineKEY2_PORT(GPIOC)
#defineKEY2_PIN(GPIO_PIN_1)
*/
u8CheckKey(u8key)
{
if(key==KEY1)
{
if(KEY1_PORT->IDR&KEY1_PIN)//檢測到有按鍵了,IO口電壓會被拉低
{
delay_5ms();
if(KEY1_PORT->IDR&KEY1_PIN)//仍然存在低電平
{
while(!(KEY1_PORT->IDR&KEY1_PIN));//等待放開
returnKEY1;
}
}
return0;
}elseif(key==KEY2)
{
if(!(KEY2_PORT->IDR&KEY2_PIN))//檢測到有按鍵了
{
delay_5ms();
if(!(KEY2_PORT->IDR&KEY2_PIN))//仍然存在低電平
{
while(KEY2_PORT->IDR&KEY2_PIN);//等待放開
returnKEY2;
}
}
return0;
}
return0;
}
總結(jié):
硬件電路將按鍵IO口的一端接地。
軟件配置不能使用懸浮輸入方式,這種方式電壓可能會不穩(wěn)定。