STM32按鍵控制開(kāi)關(guān)燈
出處:eefocus 發(fā)布于:2018-07-21 13:58:41
1.按鍵操作的原理
1.在stm32f103rc中,存在三個(gè)按鍵(不包括復(fù)位),分別為key0(PC5),key1(PA15),wkup(PA0),按下key0和key1時(shí)對(duì)應(yīng)的io口輸出低電平,按下wkup對(duì)應(yīng)io口輸出高電平
2.所以可以采用庫(kù)函數(shù)讀取io口的電平,從而用不同的情況來(lái)控制燈的開(kāi)閉
GPIO_ReadInputDataBit(GPIOX,GPIO_PIN_a)讀取相應(yīng)接口電平
#define KEY0 GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_5)
#define KEY1 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_15)
#define WK_UP GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)
#define KEY0_PRES 1 //KEY0
#define KEY1_PRES 2 //KEY1
#define WKUP_PRES 3 //wkup
3.實(shí)現(xiàn)按鍵的初始化和掃描功能
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC,ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
//防止串口復(fù)用
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;//上拉
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_15;
GPIO_Init(GPIOA,&GPIO_InitStructure);
//3?ê??ˉPC5
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;
GPIO_Init(GPIOC,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;//PA0
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
4.實(shí)現(xiàn)按鍵掃描
1.建立static變量,從而實(shí)現(xiàn)短按按鈕功能
2.短按按鈕:首先掃描上的電平,如果為關(guān)閉狀態(tài)(說(shuō)明沒(méi)按),然后再進(jìn)行下操作
3.長(zhǎng)按按鈕:重新創(chuàng)建一個(gè)變量,實(shí)現(xiàn)長(zhǎng)按按鈕功能(函數(shù)中途不存在間斷)
4.注意消抖
u8 KEY_Scan(u8 mode)//掃描
{
static u8 key_up=1;
if(mode)key_up=1;
if(key_up&&(KEY0==0||KEY1==0||WK_UP==1))
{
delay_ms(10);
key_up=0;
if(KEY0==0)return KEY0_PRES;
else if(KEY1==0)return KEY1_PRES;
else if(WK_UP==1)return WKUP_PRES;
}
else if
(KEY0==1&&KEY1==1&&WK_UP==0)key_up=1;
return 0;
}
5.主函數(shù)部分
//reset , wk_up(PA0),KEY0(PC5),KEY1(PA15)
#include "delay.h"
#include "sys.h"
#include "key.h"
#include "LED.H"
void LED_init(void);
void key_init();
int main(void)
{
u8 t;
delay_init();
LED_Init();
KEY_Init();
GPIO_SetBits(GPIOA,GPIO_Pin_8);//??óúPA8ê?3???μ???
GPIO_SetBits(GPIOD,GPIO_Pin_2);//??óúPD2ê?3???μ???
while(1)
{
t=KEY_Scan(0);
switch(t)
{
case KEY0_PRES:
GPIO_ResetBits(GPIOA,GPIO_Pin_8);//low
break;
case KEY1_PRES:
GPIO_ResetBits(GPIOD,GPIO_Pin_2);//low
break;
case WKUP_PRES:
GPIO_ResetBits(GPIOA,GPIO_Pin_8);//low
GPIO_ResetBits(GPIOD,GPIO_Pin_2);//low
break;
default:
delay_ms(10);
}
}
}
版權(quán)與免責(zé)聲明
凡本網(wǎng)注明“出處:維庫(kù)電子市場(chǎng)網(wǎng)”的所有作品,版權(quán)均屬于維庫(kù)電子市場(chǎng)網(wǎng),轉(zhuǎn)載請(qǐng)必須注明維庫(kù)電子市場(chǎng)網(wǎng),http://hbjingang.com,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。
本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性,不承擔(dān)此類(lèi)作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個(gè)人從本網(wǎng)轉(zhuǎn)載時(shí),必須保留本網(wǎng)注明的作品出處,并自負(fù)版權(quán)等法律責(zé)任。
如涉及作品內(nèi)容、版權(quán)等問(wèn)題,請(qǐng)?jiān)谧髌钒l(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。
- 主流開(kāi)關(guān)技術(shù)及器件特性與應(yīng)用選型指南2026/1/7 10:10:27
- 空調(diào)空開(kāi)跳閘的原因及解決方法2025/9/10 14:14:31
- 東芝負(fù)載開(kāi)關(guān) IC TCK207G 的實(shí)用功能大揭秘2025/8/25 17:09:47
- 超低電壓·全極感知 力芯微推出霍爾開(kāi)關(guān)芯片 ET3715A302025/8/4 16:38:03
- 揭秘負(fù)載開(kāi)關(guān) IC:簡(jiǎn)化電源管理,穩(wěn)固電子系統(tǒng)2025/7/31 16:28:14
- 編碼器的工作原理及作用1
- 超強(qiáng)整理!PCB設(shè)計(jì)之電流與線寬的關(guān)系2
- 三星(SAMSUNG)貼片電容規(guī)格對(duì)照表3
- 電腦藍(lán)屏代碼大全4
- 國(guó)標(biāo)委發(fā)布《電動(dòng)汽車(chē)安全要求第3部分:人員觸電防護(hù)》第1號(hào)修改單5
- 通俗易懂談上拉電阻與下拉電阻6
- 繼電器的工作原理以及驅(qū)動(dòng)電路7
- 電容單位8
- 跟我學(xué)51單片機(jī)(三):?jiǎn)纹瑱C(jī)串口通信實(shí)例9
- 一種三極管開(kāi)關(guān)電路設(shè)計(jì)10
- 高速PCB阻抗控制核心實(shí)操規(guī)范
- 高速數(shù)字系統(tǒng)(如DDR、SerDes)中的信號(hào)完整性濾波
- MOSFET在UPS電源中的應(yīng)用解析
- 電源管理IC在物聯(lián)網(wǎng)設(shè)備中的應(yīng)用
- SMT連接器焊接缺陷分析
- MOSFET在汽車(chē)電子中的應(yīng)用要求
- 通信設(shè)備電源管理IC應(yīng)用解析
- 通信設(shè)備連接器選型與設(shè)計(jì)
- PCB電磁兼容性(EMC)設(shè)計(jì)核心實(shí)操規(guī)范
- 物聯(lián)網(wǎng)節(jié)點(diǎn)低功耗設(shè)計(jì):信號(hào)鏈中的濾波與功耗管理









