我們首先打開 key.c文件,關鍵代碼如下:
#include "key.h"
#include "delay.h"
//按鍵初始化函數(shù)
void KEY_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOE,
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4;
//KEY0 KEY1 KEY2對應引腳
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//普通輸入模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100M
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
GPIO_Init(GPIOE, &GPIO_InitStructure);//初始化GPIOE2,3,4
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;//WK_UP 對應引腳PA0
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN ;//下拉
GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化 GPIOA0
}
//按鍵處理函數(shù)
//返回按鍵值
//mode:0,不支持連續(xù)按;1,支持連續(xù)按;
//0,沒有任何按鍵按下
//1,KEY0按下 2,KEY1按下3,KEY2按下 4,WKUP 按下 WK_UP
//注意此函數(shù)有響應優(yōu)先級,KEY0>KEY1>KEY2>WK_UP!!
u8 KEY_Scan(u8 mode)
{
static u8 key_up=1;//按鍵按松開標志
if(mode)key_up=1; //支持連按
if(key_up&&(KEY0==0||KEY1==0||KEY2==0||WK_UP==1))
{
delay_ms(10);//去抖動
key_up=0;
if(KEY0==0)return 1;
else if(KEY1==0)return 2;
else if(KEY2==0)return 3;
else if(WK_UP==1)return 4;
}else if(KEY0==1&&KEY1==1&&KEY2==1&&WK_UP==0)key_up=1;
return 0;// 無按鍵按下
}
這段代碼包含2個函數(shù),void KEY_Init(void)和u8 KEY_Scan(u8 mode),KEY_Init是用來初始化按鍵輸入的IO 口的。實現(xiàn) PA0、PE2~4 的輸入設置,這里和第六章的輸出配置差不多,只是這里用來設置成的是輸入而第六章是輸出。
KEY_Scan函數(shù),則是用來掃描這4個 IO 口是否有按鍵按下。KEY_Scan函數(shù),支持兩種掃描方式,通過mode參數(shù)來設置。
當mode為0的時候,KEY_Scan函數(shù)將不支持連續(xù)按,掃描某個按鍵,該按鍵按下之后必須要松開,才能第二次觸發(fā),否則不會再響應這個按鍵,這樣的好處就是可以防止按一次多次觸發(fā),而壞處就是在需要長按的時候比較不合適。
當 mode為 1的時候,KEY_Scan函數(shù)將支持連續(xù)按,如果某個按鍵一直按下,則會一直返回這個按鍵的鍵值,這樣可以方便的實現(xiàn)長按檢測。
有了 mode 這個參數(shù),大家就可以根據(jù)自己的需要,選擇不同的方式。這里要提醒大家,因為該函數(shù)里面有static變量,所以該函數(shù)不是一個可重入函數(shù),在有OS 的情況下,這個大家要留意下。 同時還有一點要注意的就是,該函數(shù)的按鍵掃描是有優(yōu)先級的,最優(yōu)先的是KEY0,第二優(yōu)先的是KEY1,接著 KEY2,最后是KEY3(KEY3 對應KEY_UP 按鍵) 。該函數(shù)有返回值,如果有按鍵按下,則返回非 0值,如果沒有或者按鍵不正確,則返回0。
上一篇:STM32f4按鍵輸入實驗代碼(02)
下一篇:STM32f4---TFTLCD顯示實驗代碼(06)
推薦閱讀
史海拾趣
1954年,富士通研發(fā)出了日本第一臺中繼式自動計算機FACOM100,這一里程碑式的成就標志著富士通正式涉足信息產(chǎn)業(yè)。FACOM100的推出不僅在日本國內(nèi)引起了轟動,也讓富士通在國際上贏得了聲譽。此后,富士通在計算機領域持續(xù)投入研發(fā),不斷推出新技術、新產(chǎn)品,逐漸成長為全球領先的計算機制造商之一。這一轉變不僅推動了富士通自身的快速發(fā)展,也為全球計算機技術的進步做出了重要貢獻。
在電子行業(yè)的激烈競爭中,Densitron公司始終堅持技術創(chuàng)新作為發(fā)展的核心動力。早期,公司投入大量研發(fā)資源,成功開發(fā)出一種新型的銦錫氧化物(ITO)材料,這種材料在觸摸屏領域具有出色的性能,使得公司的產(chǎn)品在市場上脫穎而出。隨著技術的不斷升級,Densitron公司又相繼推出了一系列創(chuàng)新產(chǎn)品,不僅滿足了客戶日益增長的需求,也推動了整個行業(yè)的進步。
在電子行業(yè)的初期,GSR Technology Ltd專注于研發(fā)高性能的傳感器技術,特別是針對工業(yè)自動化領域的GSR(Ground Surveillance Radar,地面監(jiān)視雷達)技術。通過多年的技術積累和研發(fā)創(chuàng)新,公司成功開發(fā)出具有高精度、長距離監(jiān)測能力的GSR系統(tǒng),填補了市場空白。這一技術突破吸引了眾多工業(yè)客戶的關注,公司迅速獲得市場準入,并與多家知名企業(yè)建立了長期合作關系。
在發(fā)展過程中,鈺創(chuàng)科技非常注重與產(chǎn)業(yè)鏈上下游企業(yè)的合作與共贏。公司積極與國內(nèi)外知名企業(yè)開展合作,共同研發(fā)新技術、新產(chǎn)品,推動整個產(chǎn)業(yè)鏈的升級和發(fā)展。同時,鈺創(chuàng)科技也積極參與行業(yè)交流和合作活動,與同行分享經(jīng)驗和技術成果,促進整個行業(yè)的共同進步。
Hongfa宏發(fā)公司,全稱廈門宏發(fā)電聲股份有限公司,由郭滿金先生于1984年創(chuàng)立。公司初創(chuàng)時,僅有簡陋的廠房和設備,投資不過360萬元,員工僅數(shù)十人。但宏發(fā)從一開始就明確了產(chǎn)品定位與市場定位,專注于繼電器研發(fā)及制造領域。1987年,宏發(fā)成功以中國廠家商標及型號取得UL認證,進一步奠定了其在國際市場上的基礎。通過不斷的技術積累和市場開拓,宏發(fā)逐漸在國內(nèi)繼電器行業(yè)中嶄露頭角。
為了推動公司的進一步發(fā)展,宏發(fā)公司于2008年進行了股份制改造,并成立了“廈門宏發(fā)電聲股份有限公司”。2012年,公司成功上市,通過資本市場獲得了更多的資金支持和發(fā)展動力。上市后,宏發(fā)繼續(xù)加大在技術研發(fā)、市場拓展和產(chǎn)能提升等方面的投入,不斷鞏固和擴大其在繼電器行業(yè)的領先地位。同時,公司還積極履行社會責任,為行業(yè)發(fā)展和地方經(jīng)濟做出了積極貢獻。
我看見群里沒有多少朋友發(fā)有關NIOSS2方面的資料,我來發(fā)點有關NIOSS的資料。我也是剛開始學這個的,希望能夠與大家多多交流!… 查看全部問答∨ |
|
我剛接觸msp430單片機,最近要用ADC12的單通道多次轉換模式,請教大家轉換的次數(shù)怎么設置?比如說我要轉換10次,然后求平均值。先謝謝各位了。… 查看全部問答∨ |
#include <includes.h> #define TASK_STK_SIZE 128 //定義任務堆棧的大小 OS_STK TaskOneStack[TASK_STK_SIZE]; //為任務TaskOne建立一個堆棧OS_STK TaskTwoStack[TASK_STK_SIZE]; //為任務TaskTwo建立一個堆棧OS_ST ...… 查看全部問答∨ |
最近遇到一個非常不解的問題,一個尋常的for循環(huán),卻無緣無故的陷入了死循環(huán)。試過很多種寫法還是沒調(diào)試出來,貼出來讓大家討論一下。 … 查看全部問答∨ |
|
我從ucos官網(wǎng)上下載了ucos-ii在IAR下的5d3x移植好的版本,但是我無論是在在線仿真還是實際的使用過程都村子問題。我在線仿真的時候,程序會在初始化的停留在prefetch interrupt,也就是中斷向量表的第四條;但是我如果在cstartup.s中將MMU初始化相 ...… 查看全部問答∨ |
四年前貌似30多買的吧,最近發(fā)現(xiàn)外皮裂了,雖說用了這么久也可以了, 不過窮的還是拆開重新焊接一下繼續(xù)用吧 可惡的三角螺絲,不過還是很輕松的拆了,誰讓平時愛拆呢,工具還是有的,雖然沒你們那么多 質(zhì)量還行吧,1800W的水壺一直用 ...… 查看全部問答∨ |
設計資源 培訓 開發(fā)板 精華推薦
- 英飛凌微控制器:以全新實惠套件和強大開發(fā)環(huán)境為開發(fā)者提供支持
- iTOP-i.MX6開發(fā)板設備數(shù)驅動Menuconfig的用法
- 迅為IMX6ULL開發(fā)板Qt for Android搭建開發(fā)環(huán)境
- 迅為i.MX8M mini開發(fā)板Windots QT系統(tǒng)開發(fā)環(huán)境搭建
- 迅為IMX8MM開發(fā)板Yocto系統(tǒng)使用Gstarwmra(一)
- 迅為IMX8M mini開發(fā)板Linix系統(tǒng)修改默認屏幕
- iTOP-4412開發(fā)板支持4G以上文件系統(tǒng)擴展
- 迅為IMX8MM開發(fā)板Yocto系統(tǒng)設置開機自啟動
- 迅為IMX6Q開發(fā)板 Buildroot文件系統(tǒng)mqtt測試
- Arm 技術加持,地平線以 HSD 及征程 6P 推動汽車智能化變革
- 華為自動駕駛技術解讀
- 加速電動化轉型,邦迪汽車系統(tǒng)攜多款創(chuàng)新產(chǎn)品首秀2025上海車展
- 數(shù)據(jù)中心面臨電力約束挑戰(zhàn),推動GenAI終端發(fā)展
- 博泰車聯(lián)網(wǎng)與高通深化合作,基于驍龍座艙平臺至尊版打造新一代智能座艙解決方案
- 凌華智能與Elma強強聯(lián)手為軌道交通及關鍵任務應用提供高可靠加固系統(tǒng)解決方案
- 何為接近開關?如何調(diào)試接近開關
- 具身智能浪潮反思:中國制造業(yè)需要什么樣的協(xié)作機器人?
- 影響接近開關工作距離的因素有哪些?使用接近開關有哪些注意事項
- 如何安裝接近開關?接近開關如何正確接線?
- TI 高精度實驗室信號鏈精品課大作戰(zhàn)——你學習我送禮!
- 有獎直播|TI Sitara™ 產(chǎn)品在智能電網(wǎng)中的應用
- 參與e絡盟與 TE 傳感器的問卷活動,贏50元亞馬遜購物券!
- Nexperia ESD 應用手冊|讀 ESD 干貨答題贏好禮
- 西門子精彩視頻限時免費|利用電子產(chǎn)品生命周期管理 (PLM) 更快地交付更多產(chǎn)品
- 有獎直播|解鎖汽車電子黑科技 開創(chuàng)未來駕乘新境界
- 【Molex莫仕工業(yè)通訊與安全解決方案】
- 【ST板卡來了(下)】 品讀STM32實戰(zhàn)經(jīng)驗,汲取FAE經(jīng)驗闖關去抽獎