使用一個按鍵控制LED的亮滅,按鍵按下時LED亮起,按鍵松開時LED熄滅。通過按鍵控制實驗來介紹下 IO 口作為輸入的使用。本例中用到了GPIOE的PE3管腳。
LED和按鍵的電路圖。
按鍵 K_LEFT、K_DOWN、K_RIGHT 分別連接在 STM32F1 芯片的 PE2、PE3、PE4引腳上。
按鍵另一端是全部接在 GND 上,這個和我們學(xué)習(xí) 51單片機是一樣的,采用獨立式按鍵接法,按下時輸入到芯片管腳即為低電平。
整個程序?qū)崿F(xiàn)的流程步驟如下:
按鍵檢測處理
按鍵控制處理
工程文件目錄如下。
IO口初始化程序代碼在key.c文件中。
/*************************************************************** * 函 數(shù) 名 : KEY_Init * 函數(shù)功能 : 按鍵初始化 * 輸 入 : 無 * 輸 出 : 無 *****************************************************************/ void KEY_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; //定義結(jié)構(gòu)體變量 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOE,ENABLE); GPIO_InitStructure.GPIO_Pin=KEY_UP_Pin;//選擇你要設(shè)置的IO口 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;//下拉輸入 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//設(shè)置傳輸速率 GPIO_Init(KEY_UP_Port,&GPIO_InitStructure);/*初始化GPIO*/ GPIO_InitStructure.GPIO_Pin=KEY_DOWN_Pin|KEY_LEFT_Pin|KEY_RIGHT_Pin; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;//上拉輸入 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(KEY_Port,&GPIO_InitStructure); }
要知道哪個按鍵被按下,就需要編寫按鍵檢測函數(shù),具體代碼如下:
/**************************************************************** * 函 數(shù) 名 : KEY_Scan * 函數(shù)功能 : 按鍵掃描檢測 * 輸 入 : mode=0:單次按下按鍵 mode=1:連續(xù)按下按鍵 * 輸 出 : 0:未有按鍵按下 KEY_UP:K_UP 鍵按下 KEY_DOWN:K_DOWN 鍵按下 KEY_LEFT:K_LEFT 鍵按下 KEY_RIGHT:K_RIGHT 鍵按下 *****************************************************************/ u8 KEY_Scan(u8 mode) { static u8 key=1; if(key==1&&(K_UP==1||K_DOWN==0||K_LEFT==0||K_RIGHT==0))//任意一個按鍵按下 { delay_ms(10);//消除抖動 key=0; if(K_UP==1) { return KEY_UP; } else if(K_DOWN==0) { return KEY_DOWN; } else if(K_LEFT==0) { return KEY_LEFT; } else { return KEY_RIGHT; } } elseif(K_UP==0&&K_DOWN==1&&K_LEFT==1&&K_RIGHT==1)//無按鍵按下 { key=1; } if(mode==1)//連續(xù)按鍵按下 { key=1; } return 0; }
主函數(shù),代碼如下:
#include "system.h" #include "SysTick.h" #include "led.h" #include"key.h" int main() { u8 key; SysTick_Init(72); LED_Init(); KEY_Init(); while(1) { key=KEY_Scan(1); //á?D?é¨?è°′?ü if(key) { led2=0; delay_ms(5);//每隔5ms滅一次 if(KEY_Scan(1)!=key) { led2=!led2; delay_ms(5); } } } }
-
led
+關(guān)注
關(guān)注
242文章
23298瀏覽量
661402 -
單片機
+關(guān)注
關(guān)注
6037文章
44568瀏覽量
636118 -
STM32
+關(guān)注
關(guān)注
2270文章
10904瀏覽量
356445 -
IO口
+關(guān)注
關(guān)注
3文章
170瀏覽量
24077 -
按鍵控制
+關(guān)注
關(guān)注
1文章
44瀏覽量
8813
原文標(biāo)題:STM32基礎(chǔ)實例-按鍵控制LED
文章出處:【微信號:單片機與嵌入式,微信公眾號:單片機與嵌入式】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論