久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

新聞中心

EEPW首頁 > 嵌入式系統 > 設計應用 > 基于stm32的獨立按鍵掃描方式

基于stm32的獨立按鍵掃描方式

作者: 時間:2016-11-19 來源:網絡 收藏
這兩天完成了一個stm32的工程,在解決按鍵時寫出了一個獨立按鍵的掃描函數,應該有前輩已經出來了,的其實質就是普通的掃描方式修改的,優點是將按鍵相關參數封裝為一個結構體,每加一個按鍵都不需要在函數中增加語句,廢話少說,先看掃描函數

本文引用地址:http://cqxgywz.com/article/201611/318319.htm

//*
// Function: 掃描按鍵
// Returns: u8 :按鍵id值
//*
u8 KeyScan()
{
static u8 keyUp=1;//按鍵按松開標志
u8 i,count,upCount=0;
count=sizeof(buttons)/sizeof(Button);
for (i=0;i{
if (keyUp && (GPIO_ReadInputDataBit(buttons[i].ButtonPort,buttons[i].ButtonPin)==0))
{
keyUp = 0;
delay_ms(10);
if (GPIO_ReadInputDataBit(buttons[i].ButtonPort,buttons[i].ButtonPin)==0)
{
return buttons[i].ButtonId;
}
}
else if ((GPIO_ReadInputDataBit(buttons[i].ButtonPort,buttons[i].ButtonPin)==1))
{
upCount++; //記錄有多少個按鍵松開了
}
}
if (upCount == count)//按鍵松開數等于總按鍵數
{
keyUp = 1;
}
return ButtonNone;// 無按鍵按下
}

通俗易懂吧。接下來看結構體原型

typedef struct
{
GPIO_TypeDef* ButtonPort;//按鍵端口
uint16_t ButtonPin;//按鍵引腳
u8ButtonId;//按鍵ID
}Button;

使用方法

Button buttons[]={{GPIOB,GPIO_Pin_5,ButtonFunction},
{GPIOB,GPIO_Pin_6,ButtonUp},
{GPIOB,GPIO_Pin_1,ButtonDown},
{GPIOB,GPIO_Pin_0,4}};

一般的結構體初始化方法,前兩個參數大家都懂,最后一個可以定義一個枚舉,當然也可以自己賦值,注意別重復和定義為0了,因為0一般用來當作沒有按鍵的返回值。如今要加減按鍵就只需在上面的數組中處理。當然別忘了端口的初始化,這個就不說了。

分析一下優缺點,

優點:便于擴展,每加減一個按鍵都不用修改主要的按鍵掃描函數,如果端口初始化函數寫得好的話連端口初始化函數都可以不用管。

缺點:如果按鍵過多,會損失不少時間,主要原因是循環結構



評論


技術專區

關閉