按鍵實驗stm32神舟王103zet開發(fā)板_第1頁
按鍵實驗stm32神舟王103zet開發(fā)板_第2頁
按鍵實驗stm32神舟王103zet開發(fā)板_第3頁
已閱讀5頁,還剩4頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第11章按鍵實 按鍵實 按鍵檢測的實現(xiàn)原 什么是按鍵抖 消除按鍵抖動的辦 STM32GPIO輸入模式實現(xiàn)方 STM32GPIO輸出模式實現(xiàn)方 怎么選擇GPIO管腳模式實現(xiàn)按鍵功 例程01按鍵控 例程02按鍵控制全功能 第1鍵實按鍵實驗按鍵檢測的實現(xiàn)原理單片機檢測按鍵的原理是:單片機的I/O口既可作為輸出也可作為輸入使用,當檢測按鍵時用的是它的輸入功能,我們把按鍵的一端接地,另一端與單片機的某個I/O口相連,開始時先給該I/O口賦一高電平,然后讓單片機不斷地檢測該O口是否變?yōu)榈碗娖剑敯存I閉合肘,即相當于該I/O口通過按鍵與地相連,變成低電平,程序一旦檢測到I/O口變?yōu)榈碗娖絼t說明按鍵被按下,然后什么是按鍵抖動按鍵是機械器件,按下或者松開時有固定的機械抖動什么是機械抖動?通常的按鍵開關(guān)為機械彈性開關(guān),由于機械觸點的彈性作用,一個按鍵開關(guān)在閉合時不會馬上穩(wěn)定地接通,在斷開時也不會一下子斷開。因而在閉合及斷開的瞬間均伴隨有一連串的抖5ms~10ms按鍵的連接方法和按鍵在被按下時其觸點電壓變化過這個抖動時間雖然很短,不同按鍵抖動不同,但對應(yīng)單片機來說,很輕松就能檢測到,單片機的運行的速度是微秒us級別。用示波器一個小的按鈕開關(guān)在閉合時的抖動現(xiàn)象,得到如下圖的波形觀察波形可以幫助我們對抖動現(xiàn)象有一個直觀的了解。水平 2ms/Div,抖動間隙大約10ms,在達到穩(wěn)定狀態(tài)前一共有6次變化,頻率隨時間升高。消除按鍵抖動的辦法消除抖動分為軟件去抖和硬件去抖兩種辦法,接下來我們詳細分析一下硬件去抖最簡單的就是按鍵兩端并聯(lián)電容,容量根據(jù)實驗而定。當然也有的去抖動軟件去抖使用方便不增加硬件成本,容易調(diào)試,所以現(xiàn)在大都使用軟件去抖。軟件去抖的實現(xiàn)步驟如下:檢測到按鍵按下后進行5~10ms延時,用于跳過這個抖動區(qū)延時后再檢測按鍵狀態(tài),如果沒有按下表明是抖動或者干擾造成,如果仍舊按下,可以認為真正的按下。并進行對應(yīng)的操作 GPIO輸入模式實現(xiàn)方式在初始化GPIO的時候,根據(jù)我們的使用要求,必須把GPIO設(shè)置為相應(yīng)的模式。如LED例程 引腳如果配置為模擬輸入模式是必然會導(dǎo)致錯結(jié)構(gòu)圖的上半部分為輸入模式結(jié)構(gòu)。圖的最右端為I/O腳,左端的器件位于。I/O腳并聯(lián)了兩個用于保護的二極管。本圖從ST提供的參考手冊截取。接下來就遇到了兩個開關(guān)和電阻,與VDD相連的為上拉電阻,與VSS相連的為下拉電阻。再連接到觸發(fā)器就把電壓信號轉(zhuǎn)化為0、1的數(shù)字信號在輸入數(shù)據(jù)寄存器(IDR)。我們可以通過設(shè)置配置寄存器(CRL、CRH),控制這兩個開關(guān),于是就可以得到GPIO的上拉輸入(GPIO_Mode_IPU)和下拉輸入模式(GPIO_Mode_IPD)了。從它的結(jié)構(gòu)我們就可以理解,若GPIO引腳配置為上拉輸入模式,在默認狀態(tài)下(GPIO引腳無輸入),得的GPIO引腳數(shù)據(jù)為1,高電平。而下拉模式則相反,在默認狀態(tài)下其引腳數(shù)據(jù)為0,低而STM32的浮空輸入模式(GPIO_Mode_IN_FLOATING)在既沒有接上拉,也沒有接下拉電阻,經(jīng)由觸發(fā)器輸入。配置成這個模式直接用電壓表測量其引腳電壓為1點幾伏,這是個不確定值。由于其輸入阻抗較大,一般把這種模式用于標準的通訊協(xié)議如I2C、USART的接收端。模擬輸入模式(GPIO_Mode_AIN)則關(guān)閉了觸發(fā)器,不接上、下拉電阻,經(jīng)由另一線路把電壓信號傳送到片上外設(shè)模塊。如傳送至給ADC模塊,由ADC電壓信號。所以使用ADC外設(shè)的時候,必 GPIO輸出模式實現(xiàn)方式結(jié)構(gòu)圖的下半部分為輸出模式結(jié)構(gòu)線路經(jīng)過一個由-MOS和N-MOS管組成的單元電路。而所謂推挽輸出模式,則是根據(jù)其工作方式來命名的。在輸出高電平時,-MOS導(dǎo)通,低電平時,N-MOS管導(dǎo)通。兩個管子輪流導(dǎo)通,一個負責灌電流,一個負責拉電流,使其負載能力和開關(guān)速度都比普通的方式有很大的提高。推挽輸出的供電平為0伏,高電平為33伏。在開漏輸出模式時,如果我們控制輸出為0N-MOS輸出為1(無法直接輸出高電平),則既不輸出高電平,也不輸出低電平,為高阻態(tài)。為正常使用時必須在外部接上一個上拉電阻“線與”特性,即很多個開漏模式引腳連接到一起時,只有當所有引腳都輸出高阻態(tài),才由上拉電阻提供高電平,此高電平的電壓為外部上拉電阻所接的電源的電壓。若其中一個引腳為低電平,那線路就相當于短路接地,使得整條線路都為低電平,0伏。STM32的GPIO輸出模式就分為普通推挽輸出(GPIO_Mode_Out_PP)、普通開漏輸出(GPIO_Mode_Out_OD)及復(fù)用推挽輸出 )、復(fù)用開漏輸出 )普通推挽輸出模式一般應(yīng)用在輸出電平為0和3.3伏的場合。而普通開漏輸出一般應(yīng)用在電平不匹配的場合,如需要輸出5伏的高電平,就需要在外部接一個上拉電阻,電源為5伏,把GPIO設(shè)置為開漏模式,當輸出高阻態(tài)時,由上拉電阻和電源向外輸出5伏的電平。對于相應(yīng)的復(fù)用模式,則是根據(jù)GPIO的復(fù)用功能來選擇的,如GPIO的引腳用作串口的輸出,則使用復(fù)用推挽輸出模式。如果用在IC、SMBUS這些需要線與功能的復(fù)用場合,就使用復(fù)用開漏模式。其它不同的復(fù)用場合的復(fù)用模式引腳配置將在具體的例子中講解。在使用任何一種開漏模式,都需要接上拉電阻怎么選擇GPIO管腳模式實現(xiàn)按鍵功能的GPIO引腳如果配置為模擬輸入模式是必然會導(dǎo)致錯誤的。我們配合GPIO結(jié)構(gòu)圖,來看看GPIO的8種模式及其應(yīng)用場合圖的最右端為I/O引腳,左端的器件位于。I/O引腳并聯(lián)了兩個用于保護的二極管。本圖四種輸入模式結(jié)構(gòu)圖的上半部分為輸入模式結(jié)構(gòu)接下來就遇到了兩個開關(guān)和電阻,與VDD相連的為上拉電阻,與VSS相連的為下拉電阻。再連接到觸發(fā)器就把電壓信號轉(zhuǎn)化為0、1的數(shù)字信號在輸入數(shù)據(jù)寄存器(IDR)。我們可以通過設(shè)置配置寄存器(CRL、CRH),控制這兩個開關(guān),于是就可以得到GPIO的上拉輸入(GPIO_Mode_IPU)和下拉輸入模式(GPIO_Mode_IPD)了。從它的結(jié)構(gòu)我們就可以理解,若GPIO引腳配置為上拉輸入模式,在默認狀態(tài)下(GPIO引腳無輸入),得的GPIO引腳數(shù)據(jù)為1,高電平。而下拉模式則相反,在默認狀態(tài)下其引腳數(shù)據(jù)為0,低而STM32的浮空輸入模式(GPIO_Mode_IN_FLOATING)在既沒有接上拉,也沒有接下拉電阻,經(jīng)由觸發(fā)器輸入。配置成這個模式直接用電壓表測量其引腳電壓為1點幾伏,這是個不確定值。由于其輸入阻抗較大,一般把這種模式用于標準的通訊協(xié)議如I2C、USART的接收端。模擬輸入模式(GPIO_Mode_AIN)則關(guān)閉了觸發(fā)器,不接上、下拉電阻,經(jīng)由另一線路把電壓信號傳送到片上外設(shè)模塊。如傳送至給ADC模塊,由ADC電壓信號。所以使用ADC外設(shè)的時候,必四種輸出模式結(jié)構(gòu)圖的下半部分為輸出模式結(jié)構(gòu)線路經(jīng)過一個由-MOS和N-MOS管組成的單元電路。而所謂推挽輸出模式,則是根據(jù)其工作方式來命名的。在輸出高電平時,-MOS導(dǎo)通,低電平時,N-MOS管導(dǎo)通。兩個管子輪流導(dǎo)通,一個負責灌電流,一個負責拉電流,使其負載能力和開關(guān)速度都比普通的方式有很大的提高。推挽輸出的供電平為0伏,高電平為33伏。1無法直接輸出高電平),則既不輸出高電平,也不輸出低電平,為高阻態(tài)。為正常使用時必漏模式腳都輸出高阻態(tài),才由上拉電阻提供高電平,此高電平的電壓為外部上拉電阻所接的電源的電壓。若其中一個引腳為低電平,那線路就相當于短路接地,使得整條線路都為低電平,0伏。STM32GPIO輸出模式就分為普通推挽出(GPIO_Mode_Out_PP)、普通開漏(GPIO_Mode_Out_OD)及復(fù)用推挽輸出 )、復(fù)用開漏輸出 )普通推挽輸出模式一般應(yīng)用在輸出電平為0和3.3伏的場合。而普通開漏輸出一般應(yīng)用在電平不匹配的場合,如需要輸出5伏的高電平,就需要在外部接一個上拉電阻,電源為5伏,把GPIO設(shè)置為開漏模式,當輸出高阻態(tài)時,由上拉電阻和電源向外輸出5伏的電平。對于相應(yīng)的復(fù)用模式,則是根據(jù)GPIO的復(fù)用功能來選擇的,如GPIO的引腳用作串口的輸出,則使用復(fù)用推挽輸出模式。如果用在IC、SMBUS這些需要線與功能的復(fù)用場合,就使用復(fù)用開漏模式。其它不同的復(fù)用場合的復(fù)用模式引腳配置將在具體的例子中講解。在使用任何一種開漏模式,都需要接上拉電阻按鍵實驗分析了解了GPIO的8種工作模式之后,立即進行一下小測。如果采用以下的電路,我們的按鍵GPIO端口應(yīng)該如何進行配置?有兩個方案可以選擇,一是采用上拉輸入模式,因為按鍵在沒按下的時候,是默認為高電平的,采且上拉模式正好符合這個要求。第二個方案是直接采用浮空輸入模式,因為按照這個硬件電路圖,在外部接了上拉電阻,其實就沒必要再配置成上拉輸入模式了,因為在外部上拉與上拉效果都是一樣的。本實驗中,按鍵都配置為浮空輸入模式。STM32神舟王103ZET開發(fā)板按鍵硬件原理圖STM32神舟王103ZET開發(fā)板總共有4WAKEUP按鍵和TAMPER按鍵及兩個用于自定義功能按鍵,在不使用第二功能的情況下,這四個按鍵都可以作為通用的按鍵,由用戶自定義其功能。這四個按鍵分別與PC3A1PC13和A0四個GPIOGPIO管腳為低電之,當沒有按鍵按下時,對的GPIO管腳為高電平。其中A0(STM32的WKUP引腳)可以作為AKEUP功能,它除了可以用作普通輸入按鍵外,還可以用作STM32的喚醒輸入。PC13可以實現(xiàn)備份區(qū)寄存器的功能。本實驗中所有的按鍵均作為普通IO使用例程012PC3PA1配置成輸入,讓按鍵對其控制,按鍵按下會使得管腳拉低到GND,并且有去按鍵抖動的操作;當檢測到按鍵按下,程序通過控制LED亮滅來表現(xiàn)出按鍵被按下的動作,達到按LED燈的目的。KEY1KEY2LED亮滅,其KEY1DS4燈亮滅,KEY2DS2DS3兩個燈的亮滅。 #include"key.h"#include"ledh"intmain(void){u8 //延時函數(shù)初始 //初始化與LED連接的硬件接 //初始化與按鍵連接的硬件接 { {caseKEY0_OK:caseKEY1_OK:}}} }代碼分析1:引入新的文件:key.c和key.h。我們分析一下key.c文件的內(nèi)容,主要引入了()函數(shù) KEY_Scan()函數(shù),一個負責對按鍵初始化,一個對按鍵掃描代碼分析2:在KEY_Scan()函數(shù)中,通過延時100毫秒來去除按鍵抖動,然后判斷是哪個按鍵按下,按下的按鍵值return回去。u8{{delay_ms(100);//去按鍵抖動,詳細請看STM32神舟開發(fā)板用戶手else}}代碼分析3:掃描到哪個按鍵,用變量K來表示,然后通過switch語句來匹配對應(yīng)按鍵應(yīng)該產(chǎn)生的操作,如果是KEY0_OK按鍵,則對LED亮滅取反;如果是KEY1_OK按鍵被按下,則對LED1和LED2兩個點的按鍵如果始終不停的按下,那么燈會不停的亮滅,所以該全功能版本實現(xiàn)每次按鍵按下,無論按下多長時間,LED燈都只亮滅一次。代碼,并且按下【復(fù)位】鍵,按下按鍵KEY1和KEY2兩個按鍵,可以使得LED亮滅,其中KEY1按鍵控制DS4燈亮滅,KEY2按鍵控制DS2和DS3兩個燈的亮滅。無論按多長時間,LED大部分代碼都與上個例子相同,唯一不同的地方是對KEY_Scan()函數(shù)增加了一個mode變量 u8KEY_Scan(u8mode){ //key_modemode1key_mode1,那么按鍵key_mode={ //key_mode=0表示按鍵還是按下的狀delay_ms(10);//去按鍵抖動,詳細請看STM32神舟開發(fā)板用戶手return //KEY0_OK在宏定義=1,表KEY0按else;//}return0;//} }代碼分析1:if(key_mode&&(KEY0=

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論