标题: STC89C52单片机四个按键定时器消抖 求思路 [打印本页]

作者: 许许许    时间: 2020-4-26 19:41
标题: STC89C52单片机四个按键定时器消抖 求思路
请问四个按键定时器消抖如何实现,功能大概就是KEY1选择设置,KEY2增加,KEY3减少,KEY4运行。查了资料都是单个按键消抖,请各位大神指导
作者: 许许许    时间: 2020-4-26 21:05
void t0() interrupt 1 //1ms 用于按键去抖动。 { TH0=(65536-1000)/256; TL0=(65536-1000)%256; ms++; if(key==0)key_num++; if(ms==15) //15秒刷新一次 { if(key_num>10) //15秒钟如果低电平持续时间大于10秒就认为按键按下,而不是抖动 key_statue=1; //按键标识位置1 ms=0; key_num=0; } }
作者: 许许许    时间: 2020-4-26 21:06
一个按键原理懂,但是四个按键如何处理啊,初学者,请指导
作者: dzbj    时间: 2020-4-26 22:28
简单的办法就是和1个按键一样 都单独防抖 一般防抖的时间也就15~30ms 不会影响其它按键
作者: 许许许    时间: 2020-4-26 22:47
dzbj 发表于 2020-4-26 22:28
简单的办法就是和1个按键一样 都单独防抖 一般防抖的时间也就15~30ms 不会影响其它按键

就是不想把程序搞得太长复杂,想问问有没有简洁一点的写法
作者: liuyanchuan    时间: 2020-4-26 22:54
可以为定时中断设置一个按键识别码,在某一个键按下后,先设置该键的识别码,之后启动定时器,待定时时间到产生中断后,可以根据不同的按键识别码转向不同的按键处理程序。
作者: xqleft    时间: 2020-4-27 00:30
兄弟  你想一个子程序把所有的按键都带进去哦?
作者: wulin    时间: 2020-4-27 07:07
按键任务在主函数中处理
void t0() interrupt 1 //1ms 用于按键去抖动。
{
        static unsigned char count=0;        //计数变量                       
        static bit key_sign=0;                        //按键自锁标志
        unsigned char temp;                                //临时变量

        TH0=(65536-1000)/256;
        TL0=(65536-1000)%256;

        temp=P1&0x0f;//P1.0~P1.3四个按键
        if(temp!=0x0f)
        {
                if(++count>=15 && key_sign==0) //15毫秒刷新一次
                {
                        key_sign=1;//按键自锁,防止重复响应
                        switch(temp)
                        {
                                case 0x0e: key_statue=1; break;//输出键值
                                case 0x0d: key_statue=2; break;
                                case 0x0b: key_statue=3; break;
                                case 0x07: key_statue=4; break;
                        }
                }
        }
        else
        {
                key_sign=0;
                count=0;
        }
}




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1