欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
單片機按鍵單擊雙擊長按程序
[打印本頁]
作者:
李尋歡123
時間:
2022-12-20 12:36
標題:
單片機按鍵單擊雙擊長按程序
如何實現一個按鍵多種功能,這里介紹了按鍵單擊,雙擊,長按,源代碼,親測有效,模塊獨立,包括.c和.h文件
my_key.c
/**
* @file my_key.c
* @author xxb
* @version V1.0
* @date 07/29/
* @brief This file provides all the KEY firmware functions.
*/
#define KEY_GLOBAL
#include "..\inc\my_key.h"
#include "..\inc\my_led.h"
/****************************************************************************
【功能說明】按鍵掃描程序
****************************************************************************/
U8 Key_Scan(void)
{
U8 key_val=NO_KEY;
//這里添加讀口線的代碼
// if(!_pa0)
// {
// key_val=MyKEY_NAME1;
// }
// else if(!_pa2)
// {
// key_val=MyKEY_NAME2;
// }
return (key_val);
}
/****************************************************************************
【功能說明】獲取鍵值
****************************************************************************/
U8 Get_KeyValue(void)
{
U8 new_val;
U8 ret=NO_KEY;
static U8 press_time=0;
new_val=Key_Scan(); //掃描按鍵
switch (key_state)
{
case 0:
if(new_val<NO_KEY) //如果有鍵按下,轉到狀態1。
{
old_val=new_val;
press_time=0;
key_state=1;
}
break;
case 1:
if (old_val==new_val) //確實有鍵按下(消抖)
{
key_state=2;
}
else key_state=0;
break;
case 2:
if (old_val==new_val) //繼續按著開始計時
{
if(++press_time>=100) //100x10=1000MS
{
ret=new_val+10; //在短按鍵值基礎上加10就是長按
key_state=3;
}
}
else //松開了返回短按
{
ret=new_val; //返回短按
key_state=3;
}
break;
case 3:
if (new_val==NO_KEY) //如果松開鍵
{
key_state=4; //轉到狀態4 (消抖)
}
break;
case 4:
if (new_val==NO_KEY) //如果確實松開
{
key_state=0; //轉到狀態0
}
else key_state=3;
break;
}
return (ret);
}
/**
* @brief KEY Process program (10MS調一次,最短不能低于5MS,最長不大于32MS)
* @param None
* @retval None
*/
void Key_Process(void)
{
U8 key_val=Get_KeyValue();
switch(key_val)
{
case MyKEY_NAME1:
//短按鍵1處理
break;
case MyKEY_NAME2:
//短按鍵2處理
break;
case MyKEY_NAME1_LONG:
//長按鍵1處理
break;
}
}
復制代碼
my_key.h
/**
* @file my_key.h
* @author xxb
* @version V1.0
* @date 07/29/2017
* @brief This file contains all the functions prototypes for the KEY firmware
*/
#ifndef __MY_KEY_H__
#define __MY_KEY_H__
#include "..\inc\cpu.h"
#ifdef KEY_GLOBAL
#define KEY_EXT
#else
#define KEY_EXT extern
#endif
#define NO_KEY 0xFF
#define MyKEY_NAME1 1
#define MyKEY_NAME2 2
#define MyKEY_NAME1_LONG MyKEY_NAME1+10
KEY_EXT U8 key_state;
KEY_EXT U8 old_val;
void Key_Process(void);
#endif
復制代碼
作者:
joe069
時間:
2023-2-24 16:09
51有你更精彩,收藏了
作者:
jovew
時間:
2023-2-24 19:38
..\inc\my_led.h" 這個文件沒有,可以發一下嗎?
程序有錯誤!
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1