使用一個按鍵控制LED的亮滅,按鍵按下時LED亮起,按鍵松開時LED熄滅。通過按鍵控制實驗來介紹下 IO 口作為輸入的使用。本例中用到了GPIOE的PE3管腳。
LED和按鍵的電路圖。
按鍵 K_LEFT、K_DOWN、K_RIGHT 分別連接在 STM32F1 芯片的 PE2、PE3、PE4引腳上。
按鍵另一端是全部接在 GND 上,這個和我們學(xué)習(xí) 51單片機(jī)是一樣的,采用獨立式按鍵接法,按下時輸入到芯片管腳即為低電平。
整個程序?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文章
23388瀏覽量
663607 -
單片機(jī)
+關(guān)注
關(guān)注
6044文章
44628瀏覽量
638990 -
STM32
+關(guān)注
關(guān)注
2273文章
10926瀏覽量
357783 -
IO口
+關(guān)注
關(guān)注
3文章
170瀏覽量
24231 -
按鍵控制
+關(guān)注
關(guān)注
1文章
44瀏覽量
8835
原文標(biāo)題:STM32基礎(chǔ)實例-按鍵控制LED
文章出處:【微信號:單片機(jī)與嵌入式,微信公眾號:單片機(jī)與嵌入式】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
使用STM32按鍵控制LED亮滅
![使用<b class='flag-5'>STM32</b><b class='flag-5'>按鍵控制</b><b class='flag-5'>LED</b><b class='flag-5'>亮</b><b class='flag-5'>滅</b>](https://file1.elecfans.com/web2/M00/B1/CB/wKgaomVm9F2AXd_7AABSJxT-zFU167.jpg)
利用按鍵控制LED的亮滅
利用按鍵控制LED燈的亮滅
如何利用Stduino通過按鍵控制LED燈亮滅
使用51單片機(jī)按鍵控制LED亮滅和單個IO翻轉(zhuǎn)的程序免費(fèi)下載
![使用51單片機(jī)<b class='flag-5'>按鍵控制</b><b class='flag-5'>LED</b><b class='flag-5'>亮</b><b class='flag-5'>滅</b>和單個IO翻轉(zhuǎn)的程序免費(fèi)下載](https://file.elecfans.com/web1/M00/9B/1F/pIYBAF0ivGGAJ5eSAAMr2Yp5G1w065.png)
FPGA入門系列實驗教程之按鍵控制LED亮滅的詳細(xì)資料說明
![FPGA入門系列實驗教程之<b class='flag-5'>按鍵控制</b><b class='flag-5'>LED</b><b class='flag-5'>亮</b><b class='flag-5'>滅</b>的詳細(xì)資料說明](https://file.elecfans.com/web1/M00/95/5D/o4YBAFz_b8mAD5u7AAT_jpHWXlo110.png)
FPGA入門系列實驗教程之如何進(jìn)行按鍵消抖控制LED亮滅
![FPGA入門系列實驗教程之如何進(jìn)行<b class='flag-5'>按鍵</b>消抖<b class='flag-5'>控制</b><b class='flag-5'>LED</b><b class='flag-5'>亮</b><b class='flag-5'>滅</b>](https://file.elecfans.com/web1/M00/95/5D/o4YBAFz_cMKAZD_WAAZazzFu7cw080.png)
按鍵控制LED燈的閃爍亮滅工程文件免費(fèi)下載
![<b class='flag-5'>按鍵控制</b><b class='flag-5'>LED</b>燈的閃爍<b class='flag-5'>亮</b><b class='flag-5'>滅</b>工程文件免費(fèi)下載](https://file.elecfans.com/web1/M00/BD/B2/pIYBAF7PdRiAINX4AAHduEj6fOA242.png)
評論