那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

stm32按鍵控制led燈亮滅

工程師鄧生 ? 來源:未知 ? 作者:劉芹 ? 2023-09-02 17:05 ? 次閱讀

stm32按鍵控制led燈亮滅

嵌入式系統中,硬件按鍵常常被用作開關輸入,控制LED燈亮滅。在STM32系列單片機中,有多種方式實現按鍵控制LED燈亮滅,我們將介紹其中一種較為簡單的方法。

一、STM32開發環境搭建

1. 軟件環境搭建

首先,需要在計算機中下載安裝Keil MDK開發環境,以實現對STM32單片機的編寫、編譯、燒錄等操作。同時,還需要下載對應的STM32CubeMX軟件,用于生成代碼、初始化硬件等操作。

2. 硬件環境搭建

將STM32單片機與相應的按鍵和LED燈連接。本實驗使用的STM32是STM32F103C8T6,按鍵使用的是按鈕開關,LED燈使用的是紅色和藍色通用的LED燈。

二、STM32按鍵控制LED燈亮滅實驗步驟

1. 打開STM32CubeMX軟件,點擊File -> New Project,選擇STM32F103C8T6作為目標設備,單擊OK。

2. 在生成的新項目中,選擇Pinout標簽頁,將按鍵和LED燈連接至對應的引腳上。

3. 選擇Configuration標簽頁,配置GPIO引腳的工作模式。按鍵連接的GPIO引腳應配置為輸入模式,LED燈連接的GPIO引腳應配置為輸出模式。

4. 在Project Manager視圖中,選擇Project Manager -> Code Generator標簽頁,選擇Generate peripheral initialisation as a pair of .c/.h files選項,并確保選中了Generate under Root選項。

5. 點擊Generate Code,生成HAL庫文件。

6. 打開Keil MDK開發環境,從文件菜單中選擇New Project,創建新的工程。在選擇設備的窗口中選擇STM32F103C8T6,確定后添加HAL庫文件到工程。

7. 編寫C語言程序,實現按鍵控制LED燈亮滅。程序中需要實現如下功能:

a. 初始化按鍵和LED燈的GPIO引腳。

b. 判斷按鍵當前狀態,如果按鍵處于按下狀態,則將LED燈的GPIO引腳置高,使LED燈亮;否則,將LED燈的GPIO引腳置低,使LED燈滅。

下面是具體的C語言程序示例:

```
#include "stm32f1xx_hal.h"

/* 定義按鍵GPIO引腳 */
#define KEY_PORT GPIOB
#define KEY_PIN GPIO_PIN_0

/* 定義LED燈GPIO引腳 */
#define LED_PORT GPIOB
#define LED_PIN GPIO_PIN_1

/* 定義按鍵狀態標志 */
uint8_t key_flag = 0;

/* 定義HAL庫句柄 */
GPIO_InitTypeDef GPIO_InitStruct;
TIM_HandleTypeDef htim2;

/* 初始化STM32的GPIO引腳 */
void GPIO_Init(void)
{
/* 使能GPIOB時鐘 */
__HAL_RCC_GPIOB_CLK_ENABLE();

/* 初始化按鍵GPIO引腳 */
GPIO_InitStruct.Pin = KEY_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(KEY_PORT, &GPIO_InitStruct);

/* 初始化LED燈GPIO引腳 */
GPIO_InitStruct.Pin = LED_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(LED_PORT, &GPIO_InitStruct);
}

/* 初始化STM32的定時器,以便在檢測按鍵時切換狀態 */
void TIM2_Init(void)
{
/* 使能TIM2時鐘 */
__HAL_RCC_TIM2_CLK_ENABLE();

/* 初始化定時器中斷 */
HAL_NVIC_SetPriority(TIM2_IRQn, 3, 0);
HAL_NVIC_EnableIRQ(TIM2_IRQn);

/* 初始化定時器2 */
htim2.Instance = TIM2;
htim2.Init.Prescaler = 7200-1; /* 分頻系數 */
htim2.Init.Period = 500-1; /* 計數周期 */
htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
HAL_TIM_Base_Init(&htim2);
HAL_TIM_Base_Start_IT(&htim2);
}

/* 檢測按鍵狀態 */
void Key_Scan(void)
{
/* 判斷按鍵是否按下 */
if (HAL_GPIO_ReadPin(KEY_PORT, KEY_PIN) == GPIO_PIN_RESET) {
key_flag = 1;
} else {
key_flag = 0;
}
}

/* 控制LED燈亮滅 */
void LED_Control(void)
{
/* 根據按鍵狀態判斷LED燈的亮滅狀態 */
if (key_flag == 1) {
HAL_GPIO_WritePin(LED_PORT, LED_PIN, GPIO_PIN_SET);
} else {
HAL_GPIO_WritePin(LED_PORT, LED_PIN, GPIO_PIN_RESET);
}
}

/* 定時器調用函數,每500ms檢測一次按鍵狀態 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if (htim == &htim2) {
Key_Scan();
LED_Control();
}
}

int main(void)
{
/* 初始化GPIO引腳 */
HAL_Init();
GPIO_Init();

/* 初始化定時器 */
TIM2_Init();

/* 等待事件發生 */
while (1) {
}

return 0;
}
```

三、STM32按鍵控制LED燈亮滅的運行效果

編寫完成上述程序之后,將程序燒錄到STM32單片機中。當按下按鍵時,LED燈將亮起,否則LED燈將熄滅

四、總結

本實驗簡單介紹了STM32按鍵控制LED燈亮滅的原理和步驟。在實現過程中,需要注意初始化硬件的GPIO引腳的工作模式,以及編寫程序中對按鍵狀態的判斷和LED燈狀態的控制。可以通過添加定時器中斷等方式,實現對按鍵狀態的周期性檢測和LED燈的閃爍效果等功能,并根據具體的應用場景來定制相應的程序功能。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • led燈
    +關注

    關注

    22

    文章

    1592

    瀏覽量

    108407
  • STM32
    +關注

    關注

    2272

    文章

    10923

    瀏覽量

    357553
  • C語言
    +關注

    關注

    180

    文章

    7614

    瀏覽量

    137704
  • 按鍵控制
    +關注

    關注

    1

    文章

    44

    瀏覽量

    8832
  • HAL庫
    +關注

    關注

    1

    文章

    121

    瀏覽量

    6382
收藏 人收藏

    評論

    相關推薦

    車輛監測路燈自動系統 智慧路燈

    車輛監測路燈自動系統 智慧路燈
    的頭像 發表于 11-05 11:42 ?314次閱讀
    車輛監測路燈自動<b class='flag-5'>亮</b><b class='flag-5'>滅</b>系統 智慧路燈

    智慧照明:實現“車來,車走”的高效路燈解決方案

    智慧照明:實現“車來,車走”的高效路燈解決方案
    的頭像 發表于 10-28 11:48 ?508次閱讀
    智慧照明:實現“車來<b class='flag-5'>燈</b><b class='flag-5'>亮</b>,車走<b class='flag-5'>燈</b><b class='flag-5'>滅</b>”的高效路燈解決方案

    自動控制路燈的程序怎么寫

    編寫自動控制路燈的程序涉及多個方面,包括硬件選擇、傳感器應用、控制器編程等。以下是一個簡化的程序編寫流程,以及可能的實現方式: 一、硬件選擇
    的頭像 發表于 09-21 11:25 ?811次閱讀

    【xG24 Matter開發套件試用體驗】通過按鍵控制LED

    點完了,來玩點花樣,通過按鍵來點燈。 硬件 還是看這個圖 按鍵有 BUTTON0(PB02)和BUTTON1(PB03) 軟件 這里基于blink_baremetal 工程進行修改適配。 這里進行GPIO的配置,配置好兩個
    發表于 09-01 17:21

    【xG24 Matter開發套件試用體驗】Button &amp; LED

    有效。 LED: 可以看到,LED0和MCU的PA04連接,LED0為高電平時LED
    發表于 08-28 09:23

    TM4C129XNCZAD GPIO的PM4和PM5引腳分別接了兩個LED,PM5在燈之后寫0就不成功的原因?

    我現在使用了TM4C129XNCZAD這個芯片,GPIO的PM4和PM5引腳分別接了兩個LED,想通過對GPIO的寫0實現,寫1實現
    發表于 08-20 06:05

    【xG24 Matter開發套件試用體驗】7-按鍵點亮LED

    1介紹 之前已經點亮LED,并能通過延時實現LED閃爍,這里實現通過按左鍵控制LED,按下
    發表于 08-03 14:54

    安科瑞 ALP220-400智能型數字式線路保護器裝置

    所示。 表 8 ALP220 顯示狀態說明、按鍵功能 序號 名稱 狀態 狀態或功能說明 1 電源指示 / -裝置有電,
    的頭像 發表于 07-05 12:47 ?303次閱讀
    安科瑞 ALP220-400智能型數字式線路保護器裝置

    基于STM32單片機的智能窗簾控制系統設計

    系統以STM32單片機進行主控,系統內使用血氧傳感器進行血氧檢測,通過電機控制采集血。按鍵控制采血和檢測。
    的頭像 發表于 06-28 14:24 ?3098次閱讀
    基于<b class='flag-5'>STM32</b>單片機的智能窗簾<b class='flag-5'>控制</b>系統設計

    請問怎么用按鍵控制1602中的5*8點陣及加減?

    請問怎么用按鍵控制1602中的5*8點陣及加減
    發表于 05-07 08:04

    STM32F103定時器變慢的原因?怎么解決?

    STM32F103 利用定時器設置按鍵帶長按功能和短按鍵按鍵按鍵是系統關機,短按只是控制
    發表于 04-23 06:52

    在測試STM328S103K3T6的按鍵控制時,有些會自動,為什么?

    在測試STM328S103K3T6的按鍵控制時,有些會自動
    發表于 04-03 07:15

    【紫光同創盤古PGX-MINI-4K教程】——(盤古PGX-MINI-4K開發板/PGC4KD-6ILPG144第一章)控制 LED 實驗例程

    實現對多 LED 控制; 三:實驗要求控制 8 個 LED 以 1s 的周期閃爍(0.5s
    發表于 03-22 11:27

    【紫光同創盤古PGX-Lite 7K教程】——(盤古PGX-Lite 7K開發板/PGC7KD-6IMBG256第一章)?控制 LED 實驗例程

    時鐘給到 PGC7KD; 實驗分析: 控制 LED 需要控制 IO 輸出的高低電平即可(高電平點亮,低電平熄滅), 原理圖如下:
    發表于 03-19 14:49

    LED條的分類

    為一體驅動板(板只有LED光源,就沒有任何電子元器件)。②:精密電子元器件恒流驅動就是板+恒流IC+LED光源為一體。③:CV=恒壓
    的頭像 發表于 02-27 20:13 ?1790次閱讀
    <b class='flag-5'>LED</b><b class='flag-5'>燈</b>條的分類
    百家乐官网投注五揽式| 澳门百家乐官网图形| 个人百家乐策略| 星河百家乐官网现金网| 网上百家乐赌博出| 百家乐官网投注技巧公式| 百家乐桌出租| 百家乐官网有多少网址| 百家乐代理| 多台百家乐官网的玩法技巧和规则| 516棋牌游戏补丁| 金宝博百家乐娱乐城| 百家乐官网体育直播| 威尼斯人娱乐场 澳门赌场| 利高在线娱乐城| 澳门百家乐玩法心得技巧| 乐天百家乐的玩法技巧和规则| 百家乐官网家乐娱乐城| 乌恰县| 百家乐不锈钢| 百家乐官网下载| 勃利县| 百家乐小路规则| 金百家乐官网的玩法技巧和规则 | 百家乐官网讲谈| 平远县| 大发888游戏下载官方下载| 网上百家乐庄家有赌场优势吗| 百家乐官网博乐36bol在线 | 金殿百家乐官网的玩法技巧和规则 | 辽源市| 全讯网社区| 优惠搏百家乐官网的玩法技巧和规则 | 百家乐庄闲概率| 至尊百家乐官网20111110| 威尼斯人娱乐场钓鱼网站 | 太阳百家乐官网游戏| 海威百家乐赌博机| 真人百家乐官网蓝盾| 信誉百家乐官网博彩网| 在线百家乐官网代理|