新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 【Alientek STM32 實驗2】--按鍵輸入

        【Alientek STM32 實驗2】--按鍵輸入

        作者: 時間:2016-11-25 來源:網絡 收藏

        在禁用了JTAG之后,我們再配置PA0、PA13、PA15為輸入,其設置與3.1的輸出配置差不多,這里不再介紹。

        KEY_Scan函數,則是用來掃描這3個IO口是否有按鍵按下。這個KEY_Scan函數,掃描某個按鍵,該按鍵按下之后必須要松開,才能第二次觸發,否則不會再響應這個按鍵,這樣的好處就是可以防止按一次多次觸發,而壞處就是在需要長按的時候比較不合適。同時還有一點要注意的就是,該函數的按鍵掃描是有優先級的,最優先的是KEY0,第二優先的是KEY1,最后是KEY2。該函數有返回值,如果有按鍵按下,則返回非0值,如果沒有或者按鍵不正確,則返回0。具體怎么實現請參考KEY_Scan的代碼。

        保存key.c代碼,然后我們按同樣的方法,新建一個key.h文件,也保存在KEY文件夾下面。在key.h中輸入如下代碼:

        #ifndef __KEY_H

        #define __KEY_H

        #include "sys.h"

        //Mini STM32開發板

        //按鍵輸入驅動代碼

        //正點原子@ALIENTEK

        //2010/5/27

        #define KEY0 PAin(13)//PA13

        #define KEY1 PAin(15)//PA15

        #define KEY2 PAin(0)//PA0WK_UP

        void KEY_Init(void);//IO初始化

        u8 KEY_Scan(void);//按鍵掃描函數

        #endif

        這段代碼里面最關鍵就是3個宏定義:

        #define KEY0 PAin(13)//PA13

        #define KEY1 PAin(15)//PA15

        #define KEY2 PAin(0)//PA0WK_UP

        這里使用的是位帶操作來實現讀取某個IO口的1個位的。同輸出一樣,我們也有另外一種方法可以實現上面代碼的功能,如下:

        #defineKEY0 (1<<13)//KEY0PA13

        #defineKEY1 (1<<15)//KEY1PA15

        #defineKEY2 (1<<0)//KEY2PA0

        #define KEY0_GET() ((GPIOA->IDR&(KEY0))?1:0)//讀取按鍵0

        #define KEY1_GET() ((GPIOA->IDR&(KEY1))?1:0)//讀取按鍵1

        #define KEY2_GET() ((GPIOA->IDR&(KEY2))?1:0)//讀取按鍵2

        通輸出一樣,我們使用第一種方法,比較簡單,看起來也清晰明了,最重要的是修改起來比較方便,后續實例,我們一般都使用第一種方法來實現輸入口的讀取。而第二種方法則適合在不同編譯器之間移植,因為他不依靠其他代碼。具體選擇哪種,大家可以根據自己的喜好來決定。

        將key.h也保存一下。接著,我們把key.c加入到HARDWARE這個組里面,這一次我們通過雙擊的方式來增加新的.c文件,雙擊HARDWARE,找到key.c,加入到HARDWARE里面,如下圖所示:,編譯工程,得到結果如下圖所示:

        圖3.2.3.4編譯結果

        可以看到沒有錯誤,也沒有警告。從編譯信息可以看出,我們的代碼占用FLASH大小為:1792字節(1524+268),所用的SRAM大小為:520個字節。

        這里我們解釋一下,編譯結果里面的幾個數據的意義:

        Code:表示程序所占用FLASH的大小(FLASH)。

        RO-data:表示程序定義的常量(FLASH)。

        RW-data:表示已初始化的全局變量(SRAM)

        ZI-data:表示未初始化的全局變量(SRAM)

        有了這個就可以知道你當前使用的flash和sram大小了,所以,一定要注意的是程序的大小不是.hex文件的大小。

        接下來,我們還是先進行軟件仿真,驗證一下是否有錯誤的地方,然后才下載到Mini STM32看看實際運行的結果。


        上一頁 1 2 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 云霄县| 抚顺县| 潢川县| 牟定县| 泸水县| 柳河县| 湘阴县| 桂林市| 杭锦后旗| 福贡县| 扶风县| 论坛| 舟山市| 方正县| 饶河县| 南汇区| 绥滨县| 娱乐| 文化| 金昌市| 宜昌市| 伊春市| 那曲县| 凤凰县| 新巴尔虎左旗| 天峻县| 德格县| 绥中县| 康马县| 黄浦区| 沙雅县| 海门市| 仁寿县| 博客| 靖宇县| 淅川县| 天全县| 永仁县| 拉萨市| 洛隆县| 靖边县|