使用一個(gè)按鍵控制LED的亮滅,按鍵按下時(shí)LED亮起,按鍵松開(kāi)時(shí)LED熄滅。通過(guò)按鍵控制實(shí)驗(yàn)來(lái)介紹下 IO 口作為輸入的使用。本例中用到了GPIOE的PE3管腳。
LED和按鍵的電路圖。
按鍵 K_LEFT、K_DOWN、K_RIGHT 分別連接在 STM32F1 芯片的 PE2、PE3、PE4引腳上。
按鍵另一端是全部接在 GND 上,這個(gè)和我們學(xué)習(xí) 51單片機(jī)是一樣的,采用獨(dú)立式按鍵接法,按下時(shí)輸入到芯片管腳即為低電平。
整個(gè)程序?qū)崿F(xiàn)的流程步驟如下:
按鍵檢測(cè)處理
按鍵控制處理
工程文件目錄如下。
IO口初始化程序代碼在key.c文件中。
/*************************************************************** * 函 數(shù) 名 : KEY_Init * 函數(shù)功能 : 按鍵初始化 * 輸 入 : 無(wú) * 輸 出 : 無(wú) *****************************************************************/ 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); }
要知道哪個(gè)按鍵被按下,就需要編寫(xiě)按鍵檢測(cè)函數(shù),具體代碼如下:
/**************************************************************** * 函 數(shù) 名 : KEY_Scan * 函數(shù)功能 : 按鍵掃描檢測(cè) * 輸 入 : 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))//任意一個(gè)按鍵按下 { delay_ms(10);//消除抖動(dòng) 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)//無(wú)按鍵按下 { 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文章
23691瀏覽量
670775 -
單片機(jī)
+關(guān)注
關(guān)注
6062文章
44915瀏覽量
646698 -
STM32
+關(guān)注
關(guān)注
2289文章
11011瀏覽量
362275 -
IO口
+關(guān)注
關(guān)注
3文章
170瀏覽量
24733 -
按鍵控制
+關(guān)注
關(guān)注
1文章
44瀏覽量
8943
原文標(biāo)題:STM32基礎(chǔ)實(shí)例-按鍵控制LED
文章出處:【微信號(hào):?jiǎn)纹瑱C(jī)與嵌入式,微信公眾號(hào):?jiǎn)纹瑱C(jī)與嵌入式】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
使用STM32按鍵控制LED亮滅

利用按鍵控制LED的亮滅
利用按鍵控制LED燈的亮滅
按鍵控制外部中斷實(shí)現(xiàn)LED亮滅的方法
如何利用Stduino通過(guò)按鍵控制LED燈亮滅
使用51單片機(jī)按鍵控制LED亮滅和單個(gè)IO翻轉(zhuǎn)的程序免費(fèi)下載

FPGA入門(mén)系列實(shí)驗(yàn)教程之按鍵控制LED亮滅的詳細(xì)資料說(shuō)明

FPGA入門(mén)系列實(shí)驗(yàn)教程之如何進(jìn)行按鍵消抖控制LED亮滅

按鍵控制LED燈的閃爍亮滅工程文件免費(fèi)下載

評(píng)論