STM32按鍵控制開關燈
出處:eefocus 發(fā)布于:2018-07-21 13:58:41
1.按鍵操作的原理
1.在stm32f103rc中,存在三個按鍵(不包括復位),分別為key0(PC5),key1(PA15),wkup(PA0),按下key0和key1時對應的io口輸出低電平,按下wkup對應io口輸出高電平
2.所以可以采用庫函數(shù)讀取io口的電平,從而用不同的情況來控制燈的開閉
GPIO_ReadInputDataBit(GPIOX,GPIO_PIN_a)讀取相應接口電平
#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.實現(xiàn)按鍵的初始化和掃描功能
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC,ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
//防止串口復用
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.實現(xiàn)按鍵掃描
1.建立static變量,從而實現(xiàn)短按按鈕功能
2.短按按鈕:首先掃描上的電平,如果為關閉狀態(tài)(說明沒按),然后再進行下操作
3.長按按鈕:重新創(chuàng)建一個變量,實現(xiàn)長按按鈕功能(函數(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);
}
}
}
上一篇:開關電源EMI各頻點超標解決方案
下一篇:開關電源的關鍵元件·OC光耦合器
版權(quán)與免責聲明
凡本網(wǎng)注明“出處:維庫電子市場網(wǎng)”的所有作品,版權(quán)均屬于維庫電子市場網(wǎng),轉(zhuǎn)載請必須注明維庫電子市場網(wǎng),http://m.58mhw.cn,違反者本網(wǎng)將追究相關法律責任。
本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點或證實其內(nèi)容的真實性,不承擔此類作品侵權(quán)行為的直接責任及連帶責任。其他媒體、網(wǎng)站或個人從本網(wǎng)轉(zhuǎn)載時,必須保留本網(wǎng)注明的作品出處,并自負版權(quán)等法律責任。
如涉及作品內(nèi)容、版權(quán)等問題,請在作品發(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關權(quán)利。
- 主流開關技術(shù)及器件特性與應用選型指南2026/1/7 10:10:27
- 空調(diào)空開跳閘的原因及解決方法2025/9/10 14:14:31
- 東芝負載開關 IC TCK207G 的實用功能大揭秘2025/8/25 17:09:47
- 超低電壓·全極感知 力芯微推出霍爾開關芯片 ET3715A302025/8/4 16:38:03
- 揭秘負載開關 IC:簡化電源管理,穩(wěn)固電子系統(tǒng)2025/7/31 16:28:14









