亚洲春色中文字幕久久久-三上亚,91精品国产亚一区二区三区,久久久九色综合亚洲成色777,涩涩视频下载,国产午夜亚洲精品午夜鲁丝片,国产精品A一区二区三区腾讯导航,影音先锋色情AV在线看片,蜜臀国产在线视频,极品少妇高潮啪啪无码吴梦梦 ,精品人妻无码一区二区三区手机版
標(biāo)題:
STM32 GPIO按鍵檢測(cè)技術(shù)(按鍵復(fù)用源碼)
[打印本頁(yè)]
作者:
MrHuan991
時(shí)間:
2019-2-16 03:04
標(biāo)題:
STM32 GPIO按鍵檢測(cè)技術(shù)(按鍵復(fù)用源碼)
自己剛剛學(xué)STM32一個(gè)禮拜,學(xué)完了GPIO,嘗試自己寫(xiě)了按鍵的檢測(cè),最簡(jiǎn)單的單擊,
能準(zhǔn)確的識(shí)別每一次,再到雙擊(其實(shí)多擊邏輯一樣),長(zhǎng)按等復(fù)用模式。
這里提一下按鍵復(fù)用的思想:其實(shí)在做產(chǎn)品的時(shí)候,有復(fù)用思想可以節(jié)約按鍵,降低后期產(chǎn)品的PCB體積大小
具體的STM32實(shí)現(xiàn)的功能我簡(jiǎn)述下,剛剛?cè)腴T(mén)的萌新可以看下,寫(xiě)的一般。
(1)環(huán)境復(fù)用:這個(gè)簡(jiǎn)單,就是不同環(huán)境設(shè)置不同標(biāo)志量即可
(2)組合復(fù)用:這里就是通過(guò)按兩次實(shí)現(xiàn)一個(gè)組合的效果,當(dāng)然你寫(xiě)復(fù)雜了有許多組合的效果,我這個(gè)小程序主要是在220ms內(nèi)連續(xù)
按下兩次,PC13口連接的LED會(huì)閃爍2.5s,間隔是50ms。
(3)時(shí)間復(fù)用:就是長(zhǎng)按,通過(guò)按鍵時(shí)間的長(zhǎng)短實(shí)現(xiàn)不同功能。(長(zhǎng)按復(fù)位,其中STM32的復(fù)位必須先關(guān)閉中斷,再調(diào)用NVIC中的復(fù)位函數(shù)
因?yàn)閺?fù)位前有個(gè)延時(shí),會(huì)影響復(fù)位的效果)
注:如果能用TIM(定時(shí)器)檢測(cè)按鍵,實(shí)現(xiàn)按鍵效果,更加perfect
萌新們一定要學(xué)會(huì)自己建立STM32工程喲
0.png
(35.07 KB, 下載次數(shù): 49)
下載附件
2019-2-16 03:32 上傳
這是我的通過(guò)按鍵來(lái)實(shí)現(xiàn)不同功能的燈亮的實(shí)驗(yàn)。
1.主要用到GPIO輸入與輸出的技術(shù)。
2.按鍵的復(fù)用功能
(1).環(huán)境復(fù)用:這個(gè)簡(jiǎn)單,不同標(biāo)志下實(shí)現(xiàn)不同功能,這里就不做功能實(shí)現(xiàn)了。
(2).組合復(fù)用:連續(xù)兩次按鍵(220ms連續(xù)按兩次),實(shí)現(xiàn)Led亮滅2.5s,亮滅間隔為50ms。
(3).時(shí)間切換:單次按鍵實(shí)現(xiàn)的Led的亮滅,長(zhǎng)按實(shí)現(xiàn)STM32MicroController系統(tǒng)的復(fù)位。
單片機(jī)源程序如下:
#include <STM32F10X.H>
#include <misc.h>
#define PC14 GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_14) //獨(dú)C14按鍵的值
#define PC15_On GPIO_SetBits(GPIOC,GPIO_Pin_15) //Set是置1
#define PC15_Off GPIO_ResetBits(GPIOC,GPIO_Pin_15) //Reset置0
#define PC13_Off GPIO_SetBits(GPIOC,GPIO_Pin_13) //Set是置1
#define PC13_On GPIO_ResetBits(GPIOC,GPIO_Pin_13) //Reset置0
u16 Led_Count=0,Button_Flag=0,time=0;
void RCC_Configuration(void); //復(fù)位與時(shí)鐘寄存器初始化函數(shù)
void Delay_ms(u16 n); //延時(shí)函數(shù)ms
void GPIO_Configuration(void); //通用IO口初始化函數(shù)
void System_Reset(void); //系統(tǒng)復(fù)位函數(shù)
void Led_Show(void); //Led亮滅顯示函數(shù)
u16 Key_Mode(u16 time); //時(shí)間復(fù)用模式
void Group_Button(void); //組合復(fù)用模式(雙擊,多擊鼠標(biāo)的檢測(cè)函數(shù))
int main(void)
{
RCC_Configuration();
GPIO_Configuration();
while(1)
{
switch(Key_Mode(100))
{
case 0:break;
case 1:Led_Show();break;
case 2:System_Reset();break;
default:break;
}
Group_Button();
}
}
void RCC_Configuration(void)
{
SystemInit();
}
void Delay_ms(u16 n)
{
u16 i;
while(n--)
{
i=12000;
while(i--);
}
}
void GPIO_Configuration(void)
{
//配置按鍵輸出的工作模式,同組的同類(lèi)型一次配置,同組不同類(lèi)型分次配置
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOC,&GPIO_InitStructure);
//配置按鍵輸入的工作模式
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_14;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOC,&GPIO_InitStructure);
PC15_Off;PC13_Off;
}
void System_Reset(void) //系統(tǒng)軟件復(fù)位函數(shù)
{
PC13_On;
Delay_ms(500);
__set_FAULTMASK(1); //首先先要關(guān)閉中斷
NVIC_SystemReset(); //在進(jìn)行軟復(fù)位
}
u16 Key_Mode(u16 time) //獨(dú)立按鍵函數(shù)
{
u16 i=0;
if(PC14 == 0)
{
Delay_ms(10);
if(PC14 == 0)
{
while(!PC14)
{
Delay_ms(10);i++;
}
Button_Flag++;
}
}
if(i == 0)
return 0;
else
{
if(i < time)
return 1;
else
return 2;
}
}
void Led_Show(void)
{
Led_Count++;
if(Led_Count == 1)
PC15_On;
else
{
PC15_Off;Led_Count=0;
}
}
void Group_Button(void) //雙擊鼠標(biāo)和多擊鼠標(biāo)的模塊寫(xiě)出來(lái)了,后期用定時(shí)器系統(tǒng)能干其他的事情
{ //其實(shí)單片機(jī)是單線程,所謂的中斷無(wú)非是效率更高,其實(shí)主程序仍不能干其他事情
u16 i=0;
if(Button_Flag == 1)
{
PC13_On;Delay_ms(1);time++;
}
else
{
Button_Flag = 0;PC13_Off;
if(time < 220 && time > 5)
{
time = 0;
for(i=0;i<50;i++)
{
if(i%2 == 0)
{PC13_On;Delay_ms(50);}
else
{PC13_Off;Delay_ms(50);}
}
}
else time = 0;
}
}
復(fù)制代碼
所有資料51hei提供下載:
DetectKey.7z
(191.26 KB, 下載次數(shù): 26)
2019-2-16 03:33 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1