打印

关于TM1637松手判断的例程

[复制链接]
1153|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
goodluck09876|  楼主 | 2016-6-30 13:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void KeyRead(void)
{
    static unsigned char ucKeyStatus=KEY_SEARCH_STATUS;
    unsigned char ucKeyValue=0;
    unsigned char i=0;

    /*   获取按键值 */
    ucKeyValue=read_key();
    KEY_READ_temp=ucKeyValue;

    if(KEY==KEY_OK_DUAN)
    {
        KEY_Cnt++;
        if(KEY_Cnt>KEY_COUNT)
        {
            KEY_Cnt=NULL;
            KEY=KEY_OK_CHANG;
        }
    }
    if(KEY==KEY_SET_DUAN)
    {
        KEY_Cnt++;
        if(KEY_Cnt>KEY_COUNT)
        {
            KEY_Cnt=NULL;
            KEY=KEY_SET_CHANG;
        }
    }
    if(KEY==KEY_JIA_DUAN)
    {
        KEY_Cnt++;
        if(KEY_Cnt>KEY_COUNT)
        {
            KEY_Cnt=NULL;
            KEY=KEY_JIA_CHANG;
        }
    }
    if(KEY==KEY_JIAN_DUAN)
    {
        KEY_Cnt++;
        if(KEY_Cnt>KEY_COUNT)
        {
            KEY_Cnt=NULL;
            KEY=KEY_JIAN_CHANG;
        }
    }

    switch(ucKeyStatus)
    {
    /* 按键查询状态 */
    case KEY_SEARCH_STATUS:
    {
        if(ucKeyValue!=0XFF)
        {
            ucKeyStatus=KEY_ACK_STATUS;
        }
    }
    break;

    /* 按键确认状态 */
    case KEY_ACK_STATUS:
    {
        if(ucKeyValue==0XFF) //没有按键按下
        {
            ucKeyStatus=KEY_SEARCH_STATUS;
        }
        else//有按键按下
        {
            if(ucKeyValue ==OK)
            {
                KEY=KEY_OK_DUAN;
            }
            if(ucKeyValue ==SET)
            {
                KEY=KEY_SET_DUAN;
            }
            if(ucKeyValue ==JIA)
            {
                KEY=KEY_JIA_DUAN;
            }
            if(ucKeyValue ==JIAN)
            {
                KEY=KEY_JIAN_DUAN;
            }
        }

        ucKeyStatus=KEY_REALEASE_STATUS;

    }
    break;
    /* 按键释放状态 */
    case KEY_REALEASE_STATUS:
    {
        if(ucKeyValue==0XFF) //没有按键按下
        {
            KEY_Cnt=NULL;
            ucKeyStatus=KEY_SEARCH_STATUS;
            if(KEY ==KEY_OK_DUAN)KEY=KEY_OK_SONG;
            if(KEY ==KEY_SET_DUAN)KEY=KEY_SET_SONG;
            if(KEY ==KEY_JIA_DUAN)KEY=KEY_JIA_SONG;
            if(KEY ==KEY_JIAN_DUAN)KEY=KEY_JIAN_SONG;
        }
    }
    break;

    default:
        break;
    }
}


相关帖子

沙发
goodluck09876|  楼主 | 2016-6-30 13:26 | 只看该作者
//按键处理
void READ_KEY()
{
    //100ms定时器中断1
    if(TIM1_FLAG1==1)
    {
        TIM1_FLAG1=0;
        //读取按键返回值
        KeyRead();
    }
}

使用特权

评论回复
板凳
bairurui0713| | 2016-6-30 14:59 | 只看该作者
TM1637的驱动没有,这是用的什么主芯片呢

使用特权

评论回复
地板
goodluck09876|  楼主 | 2016-6-30 17:27 | 只看该作者
用的是什么主芯片?
这个驱动程序,是用什么的主芯片都可以啊!

使用特权

评论回复
5
goodluck09876|  楼主 | 2016-6-30 17:28 | 只看该作者
比如:DSP 51 PIC AVR STM32 NUVOTON 等等吧……

使用特权

评论回复
6
goodluck09876|  楼主 | 2016-6-30 17:29 | 只看该作者
这个程序,是通用的。
用来检测 按下,长按,短按,松手的方式以及几种状态!
很好用!
而且也非常的稳定!

使用特权

评论回复
7
magicoctoy| | 2016-7-7 15:09 | 只看该作者
goodluck09876 发表于 2016-6-30 17:29
这个程序,是通用的。
用来检测 按下,长按,短按,松手的方式以及几种状态!
很好用!

只有按下和松手两种检测模式,没有长按或者其他模式的。

使用特权

评论回复
8
tomyoct| | 2016-7-8 18:16 | 只看该作者
bairurui0713 发表于 2016-6-30 14:59
TM1637的驱动没有,这是用的什么主芯片呢

这个检测的程序是通用的,和主芯片基本没多大的关系

使用特权

评论回复
9
goodluck09876|  楼主 | 2016-7-30 14:21 | 只看该作者
    unsigned char rekey;
    if((K1==1)&&(K2==1)&&(K3==1)&&(K4==1))
    {
        rekey=255;
    }
    if((K1==0)&&(K2==1)&&(K3==1)&&(K4==1))
    {
        rekey=244;
    }
    if((K1==1)&&(K2==0)&&(K3==1)&&(K4==1))
    {
        rekey=243;
    }
    if((K1==1)&&(K2==1)&&(K3==0)&&(K4==1))
    {
        rekey=245;
    }
    if((K1==1)&&(K2==1)&&(K3==1)&&(K4==0))
    {
        rekey=240;
    }
               
    return rekey;

使用特权

评论回复
10
goodluck09876|  楼主 | 2016-7-30 14:23 | 只看该作者
//按键处理
void READ_KEY(void)
{
    //30ms定时器中断1
    if(TIM1_FLAG1==1)
    {
        TIM1_FLAG1=0;
        KeyRead();
    }
}

使用特权

评论回复
11
goodluck09876|  楼主 | 2016-7-30 14:24 | 只看该作者
按键,检测的周期不能太短,也不能太长!

太短的话反而会适得其反,使数据不全。

使用特权

评论回复
12
goodluck09876|  楼主 | 2016-7-30 14:25 | 只看该作者
void KeyRead(void)
{
    static unsigned char ucKeyStatus=KEY_SEARCH_STATUS;
    ucKeyValue=read_key();

    switch(ucKeyStatus)
    {
    /* 按键查询状态 */
    case KEY_SEARCH_STATUS:
    {
        if(ucKeyValue!=0XFF)
        {
            ucKeyStatus=KEY_ACK_STATUS;
        }
    }
    break;

使用特权

评论回复
13
goodluck09876|  楼主 | 2016-7-30 14:26 | 只看该作者
    /* 按键确认状态 */
    case KEY_ACK_STATUS:
    {
        if(ucKeyValue==0XFF) //没有按键按下
        {
            ucKeyStatus=KEY_SEARCH_STATUS;
        }
        else//有按键按下
        {
            if(ucKeyValue ==OK)
            {
                KEY=KEY_OK_DUAN;
            }
            if(ucKeyValue ==SET)
            {
                KEY=KEY_SET_DUAN;
            }
            if(ucKeyValue ==JIA)
            {
                KEY=KEY_JIA_DUAN;
            }
            if(ucKeyValue ==JIAN)
            {
                KEY=KEY_JIAN_DUAN;
            }
        }

        ucKeyStatus=KEY_REALEASE_STATUS;

    }
    break;

使用特权

评论回复
14
goodluck09876|  楼主 | 2016-7-30 14:27 | 只看该作者
    /* 按键释放状态 */
    case KEY_REALEASE_STATUS:
    {
        if(ucKeyValue==0XFF) //没有按键按下
        {
            KEY_Cnt=NULL;
            ucKeyStatus=KEY_SEARCH_STATUS;
            if(KEY ==KEY_OK_DUAN)KEY=KEY_OK_SONG;
            if(KEY ==KEY_SET_DUAN)KEY=KEY_SET_SONG;
            if(KEY ==KEY_JIA_DUAN)KEY=KEY_JIA_SONG;
            if(KEY ==KEY_JIAN_DUAN)KEY=KEY_JIAN_SONG;
        }
    }
    break;

    default:
        break;
    }

使用特权

评论回复
15
goodluck09876|  楼主 | 2016-7-30 14:28 | 只看该作者
以上程序 便是一个完成的 按键状态机。

欢迎大家 与我一起探讨1

使用特权

评论回复
16
b147038606| | 2016-9-1 16:01 | 只看该作者
正好要用TM1637搞按键,感谢楼主

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

220

主题

5843

帖子

21

粉丝