標籤:
先:
所以4個KEY的GPIO定義如下:
1 #define GPF_KEY_4 8 2 #define GPF_KEY_4_INPUT 0x00 3 #define GPF_KEY_4_OUTPUT 0x01 4 5 #define GPF_KEY_3 6 6 #define GPF_KEY_3_INPUT 0x00 7 #define GPF_KEY_3_OUTPUT 0x01 8 9 #define GPF_KEY_2 410 #define GPF_KEY_2_INPUT 0x0011 #define GPF_KEY_2_OUTPUT 0x0112 13 #define GPF_KEY_0 014 #define GPF_KEY_0_INPUT 0x0015 #define GPF_KEY_0_OUTPUT 0x0116 17 18 #define KEY_PULL_DOWN 0x019 #define KEY_PULL_UP 0x120 21 22 #define GPFUP_KEY_0 023 #define GPFUP_KEY_0_DISABLE 0x0024 #define GPFUP_KEY_0_PULL_DOWN_ENABLE 0x0125 #define GPFUP_KEY_0_PULL_UP_ENABLE 0x1026 27 #define GPFUP_KEY_2 228 #define GPFUP_KEY_2_DISABLE 0x0029 #define GPFUP_KEY_2_PULL_DOWN_ENABLE 0x0130 #define GPFUP_KEY_2_PULL_UP_ENABLE 0x1031 32 #define GPFUP_KEY_3 333 #define GPFUP_KEY_3_DISABLE 0x0034 #define GPFUP_KEY_3_PULL_DOWN_ENABLE 0x0135 #define GPFUP_KEY_3_PULL_UP_ENABLE 0x1036 37 #define GPFUP_KEY_4 438 #define GPFUP_KEY_4_DISABLE 0x0039 #define GPFUP_KEY_4_PULL_DOWN_ENABLE 0x0140 #define GPFUP_KEY_4_PULL_UP_ENABLE 0x1041 42 /*43 GPFDAT 儲存當前按鍵的狀態44 */45 #define GPFDAT_KEY_0 046 #define GPFDAT_KEY_2 247 #define GPFDAT_KEY_3 348 #define GPFDAT_KEY_4 4
寄存器的定義如下:
1 #define GPFCON (*(volatile unsigned *)0x56000050) 2 #define GPFDAT (*(volatile unsigned *)0x56000054) 3 #define GPFUP (*(volatile unsigned *)0x56000058)
主程式中,需要先將GPF0,GPF2,GPF3,GPF4設定為輸入:
1 GPFCON = (GPF_KEY_0_INPUT << GPF_KEY_0) | (GPF_KEY_2_INPUT << GPF_KEY_2) 2 |(GPF_KEY_3_INPUT << GPF_KEY_3) | (GPF_KEY_4_INPUT << GPF_KEY_4) ;
同時按鍵功能使能:
1 GPFUP = ((GPFUP_KEY_0_PULL_DOWN_ENABLE | GPFUP_KEY_0_PULL_UP_ENABLE) << GPFUP_KEY_0) 2 | ((GPFUP_KEY_2_PULL_DOWN_ENABLE | GPFUP_KEY_2_PULL_UP_ENABLE) << GPFUP_KEY_2) 3 | ((GPFUP_KEY_3_PULL_DOWN_ENABLE | GPFUP_KEY_3_PULL_UP_ENABLE) << GPFUP_KEY_3) 4 | ((GPFUP_KEY_4_PULL_DOWN_ENABLE | GPFUP_KEY_4_PULL_UP_ENABLE) << GPFUP_KEY_4) ;
隨後就可以在一個迴圈中實現按鍵功能。
按鍵的狀態儲存在寄存器GPFDTA中,根據手冊得知,如果GPF_KEY_3被按下,則GPFDTA的第3位儲存對應的狀態:pull_down 也就是 0
1 while (1) 2 { 3 if ( KEY_PULL_DOWN == ((GPFDAT >> GPFDAT_KEY_0 ) & 0x01) ) 4 { 5 led_0_on(); 6 } 7 else if ( KEY_PULL_DOWN == ((GPFDAT >> GPFDAT_KEY_2 ) & 0x01) ) 8 { 9 led_1_on();10 }11 else if ( KEY_PULL_DOWN == ((GPFDAT >> GPFDAT_KEY_3 ) & 0x01) )12 {13 led_2_on();14 } 15 else if ( KEY_PULL_DOWN == ((GPFDAT >> GPFDAT_KEY_4 ) & 0x01) )16 {17 led_3_on();18 }19 else20 {} 21 }
至此可以實現按鍵點亮對應的LED燈。
源碼: http://files.cnblogs.com/files/dgm3000/KEY.zip
【FL2416學習筆記】按鍵開發