国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

按鍵輸入實(shí)驗(yàn)--GPIO做輸入-學(xué)習(xí)筆記

這篇具有很好參考價(jià)值的文章主要介紹了按鍵輸入實(shí)驗(yàn)--GPIO做輸入-學(xué)習(xí)筆記。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

按鍵輸入實(shí)驗(yàn)

1.首先,按鍵實(shí)驗(yàn)是GPIO口的另一應(yīng)用,上一次的跑馬燈實(shí)驗(yàn)是將GPIO口作為輸出,此次按鍵實(shí)驗(yàn)是將GPIO口作為輸入。
2.GPIO作為輸入時(shí)和輸入的不同:

(1)首先,上拉電阻是為了保證在沒(méi)有信號(hào)輸入的時(shí)候,IO口保持高電平,若按鍵為低電平有效,則沒(méi)有信號(hào)的時(shí)候,IO應(yīng)呈現(xiàn)高電平,所以,此處應(yīng)設(shè)置為上拉輸入。

同理,下拉電阻是為了保證在沒(méi)有信號(hào)輸入的時(shí)候,IO口保持低電平,若按鍵為高電平有效,則沒(méi)有信號(hào)的時(shí)候,IO應(yīng)呈現(xiàn)低電平。

然后再配置一下IO口引腳,初始化PA0即可。作為輸入時(shí),不需要配置速度。

(2)GPIO口各項(xiàng)功能配置完畢之后就是編寫按鍵函數(shù)。庫(kù)函數(shù)操作為:GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0);若是很簡(jiǎn)單要實(shí)現(xiàn)按鍵控制LED燈的功能,只需如下的代碼:

gpio_readinputdatabit,單片機(jī),學(xué)習(xí),stm32

?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-702440.html

這里led燈的轉(zhuǎn)換是通過(guò)位帶操作的,具體操作是在LED.h里寫如下代碼:#define LED0 PAout(0)即可

考慮道按鍵防抖,寫了如下的按鍵掃描函數(shù):

gpio_readinputdatabit,單片機(jī),學(xué)習(xí),stm32

?

一.STM32 IO 口簡(jiǎn)介

STM32 的 IO 口 做輸入使用的時(shí)候,是通過(guò)調(diào)用函數(shù) GPIO_ReadInputDataBit()來(lái)讀取 IO 口的狀態(tài)的。 這一節(jié),我們將通過(guò) MiniSTM32 開(kāi)發(fā)板上載有的 3 個(gè)按鈕(KEY0/KEY1/WK_UP),來(lái)控 制板上的 2 個(gè) LED,其中 KEY0 控制 DS0,按一次亮,再按一次,就滅。KEY1 控制 DS1,效 果同 KEY0。WK_UP 按鍵則同時(shí)控制 DS0 和 DS1,按一次,他們的狀態(tài)就翻轉(zhuǎn)一次。

二.硬件設(shè)計(jì)

本實(shí)驗(yàn)用到的硬件資源有: 1) 指示燈 DS0、DS1 2) 3 個(gè)按鍵:KEY0、KEY1 和 KEY_UP。 DS0、DS1 和 STM32 的連接在上一節(jié)跑馬燈已經(jīng)介紹了,在 MiniSTM32 開(kāi)發(fā)板上的按鍵 KEY0連接在 PC5 上、KEY1 連接在 PA15 上、WK_UP 連接在 PA0 上。如下圖所示:

gpio_readinputdatabit,單片機(jī),學(xué)習(xí),stm32

?

三.軟件設(shè)計(jì)

??????? 打開(kāi)我們的按鍵實(shí)驗(yàn)工程可以看到,我們引入了key.c文件以及頭文件key.h。下面我們首先打開(kāi)key.c文件,代碼如下:

??? #include "key.h"
??? #include "delay.h"
??? //按鍵初始化函數(shù) ?
??? //PA15和 PC5 設(shè)置成輸入
??? void KEY_Init(void)
??? { ?
??????? GPIO_InitTypeDefGPIO_InitStructure;
??????? RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC, ENABLE);//使能 PORTA,PORTC時(shí)鐘
??????? GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); //關(guān)閉 jtag,使能 SWD,可以用 SWD模式調(diào)試
??????? GPIO_InitStructure.GPIO_Pin? = GPIO_Pin_15;//PA15 ?
??????? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //設(shè)置成上拉輸入 ?
??????? GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化 GPIOA15?? ?
??????? GPIO_InitStructure.GPIO_Pin? = GPIO_Pin_5;//PC5 ?
??????? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //設(shè)置成上拉輸入? ?
??????? GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化
??????? GPIOC5?? ?
??????? GPIO_InitStructure.GPIO_Pin? = GPIO_Pin_0;//PA0 ?
??????? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //PA0設(shè)置成輸入,默認(rèn)下拉??? ?
??????? GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化 GPIOA.0 ?
??? }
??? //按鍵處理函數(shù)
??? //返回按鍵值
??? //mode:0,不支持連續(xù)按;1,支持連續(xù)按;
??? //返回值:
??? //0,沒(méi)有任何按鍵按下
??? //KEY0_PRES,KEY0按下
??? //KEY1_PRES,KEY1按下
??? //WKUP_PRES,WK_UP按下 ?
??? //注意此函數(shù)有響應(yīng)優(yōu)先級(jí),KEY0>KEY1>WK_UP!!
??? u8 KEY_Scan(u8 mode)
??? {??? static u8 key_up=1;//按鍵按松開(kāi)標(biāo)志 ?
???????? if(mode)key_up=1;? //支持連按???? ?
???????? if(key_up&&(KEY0==0||KEY1==0||WK_UP==1))
???????? {? ?
?????????? delay_ms(10);//去抖動(dòng)?? ?
?????????? key_up=0;? ?
?????????? if(KEY0==0)return KEY0_PRES;? ?
?????????? else if(KEY1==0)return KEY1_PRES;? ?
?????????? else if(WK_UP==1)return WKUP_PRES;? ?
???????? }else if(KEY0==1&&KEY1==1&&WK_UP==0)key_up=1;??????? ?
???????? return 0;// 無(wú)按鍵按下
??? }
??? ?
??? ????????????????

這段代碼包含2個(gè)函數(shù),void KEY_Init(void)和u8 KEY_Scan(u8 mode),KEY_Init是用來(lái)初始化按鍵輸入的IO口的。實(shí)現(xiàn)PA0、PA15和PC5的輸入設(shè)置。接下來(lái)我們看看頭文件key.h里面的代碼。

?

??? #ifndef __KEY_H
??? #define __KEY_H? ?
??? #include "sys.h"
??? #define KEY0? GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_5)//讀取按鍵 0
??? #define KEY1? GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_15)//讀取按鍵 1
??? #define WK_UP? GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)//讀取按鍵 2?? ?
??? #define KEY0_PRES 1? //KEY0? ?
??? #define KEY1_PRES 2? //KEY1 ?
??? #define WKUP_PRES 3? //WK_UP

#endif這段代碼里面最關(guān)鍵就是3個(gè)宏定義: ?

??? #define KEY0??? GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_5)//讀取按鍵 0
??? #define KEY1??? GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_15)//讀取按鍵 1
??? #define WK_UP?? GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)//讀取按鍵 2

?

main.c里面編寫的主函數(shù)代碼如下:

??? #include "led.h"
??? #include "delay.h"
??? #include "sys.h"
??? #include "key.h"
??? //按鍵輸入實(shí)驗(yàn)???? ?
??? int main(void) ?
??? {?? u8 t;??? ?
??????? delay_init();?????? //延時(shí)函數(shù)初始化??? ?
??????? LED_Init();????? //初始化與 LED連接的硬件接口
??????? KEY_Init();?????????? //初始化與按鍵連接的硬件接口
??????? LED0=0;???? //點(diǎn)亮 LED ?
??????? while(1) ?
??????? {? ?
????????? t=KEY_Scan(0);? //得到鍵值? ?
????????? switch(t)? ?
????????? {??????? ?
??????????? case KEY0_PRES:??? ?
??????????? LED0=!LED0;??? ?
??????????? break;?? ?
??????????? case KEY1_PRES:??? ?
??????????? LED1=!LED1;??? ?
??????????? break;?? ?
??????????? case WKUP_PRES:?????? ?
??????????? LED0=!LED0;?? ?
??????????? LED1=!LED1;??? ?
??????????? break;?? ?
??????????? default:??? ?
??????????? delay_ms(10);?? ?
??????????? }? ?
??????? }?? ?
??? }

最后編程運(yùn)行程序出現(xiàn)下圖表示沒(méi)有錯(cuò)誤:

gpio_readinputdatabit,單片機(jī),學(xué)習(xí),stm32

?

到了這里,關(guān)于按鍵輸入實(shí)驗(yàn)--GPIO做輸入-學(xué)習(xí)筆記的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包