⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 key.c

📁 内部HFGHGFHGFHGFHGFHGFHGFHGFHG
💻 C
字号:
#include "config.h"

#define  KEY_ON    0
#define  KEY_OFF   1

#define  KEY1 (1<<0)
#define  KEY2 (1<<1)
#define  KEY3 (1<<2)

#define  NOKEY  (~(KEY1|KEY2|KEY3))

uint8 KeyCode;           //按键码,确认按下以后赋值
uint8 KeyStatus;         //按键扫描状态机变量
uint8 KeyDone;           //的确有键按下标志位,1为有键

uint8 KeyDownTime;       //按下计时
uint8 KeyReleaseTime;    //释放计时

void KeyScan(void);
void KeyProcess(void);

void KeyInit(void);



void   KeyInit(void)
{
    KeyCode = 0;
    KeyStatus = 0;
    KeyDone = 0;
    KeyDownTime = 0;
    KeyReleaseTime = 0;
}

void   KeyScan(void)
{
    uint8 temp;
    
    temp = P2;
    temp = (temp & 0x07);

    switch(KeyStatus)
    {
        case 0:                  //等待是否有按键按下,如果有键按下就进入状态1
            if( temp != 7 )
            {
                KeyStatus = 1;
            }
            break;
        case 1:                  //进行延时消抖,进入状态2再次判断
            if( KeyDownTime > 2)
            {
                KeyStatus = 2;
                KeyDownTime = 0;
            }
            break;
        case 2:                  //若检测到确实是按下了,读取键值,进入状态3;否则到状态0等待
            if( temp != (KEY1|KEY2|KEY3) )
            {
                KeyCode = (KEY1|KEY2|KEY3) - temp;
                KeyStatus = 3;
                KeyDone = 1;
            }
            else
            {
                KeyStatus = 0;
            }
            break;
        case 3:                  //若按键释放,进入状态4
            if( temp == 0x07 )
            {
                KeyStatus = 4;
            }    
            break;
        case 4:                  //延时消抖,进入状态5
            if( KeyReleaseTime > 2 )
            {
                KeyStatus = 5;
                KeyReleaseTime = 0;                        
            }       
            break;
        case 5:         //确实是按键释放了,进入状态0再次等待按键的按下;否则继续在状态4等待释放
            if( temp == 0x07 )
            {
                KeyStatus = 0;
                
            }
            else
            {
                KeyStatus = 4;
            }
            break;
        default:
            break;
    }       
}

void   KeyProcess(void)
{
    KeyScan();
    if( KeyDone != 0 )
    {   //判断是否有键按下
        KeyDone = 0;
        switch( KeyCode )
        {    
            case KEY1:  //+键,下翻页功能
                switch( DisValue_Status )
                {
                    case DIS00_HMC: //显示时分秒
                        DisValue_Status = DIS00_YMD;    //+ 切换到年月日
                        break;
                    case DIS00_YMD:
                        DisValue_Status = DIS00_HMC;
                        break;
                    case 2:
                    
                        break;
                    case 3:
                    
                        break;
                    case 4:
                    
                        break;
                    case 5:
                    
                        break;
                    case 6:
                    
                        break;
                    default:
                        break;
                }
                    
                
            
                break;               
            case KEY2:
            
            
                break;               
            case KEY3:
            
            
                break;         
            case (KEY1|KEY2):
                break;
            case (KEY2|KEY3):
                break;
            case (KEY1|KEY3):
                break;
            case (KEY1|KEY2|KEY3):
                break;            
            default:
                break;           
        }
    }
}
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -