欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 單片機按鍵計數程序求助 [打印本頁]

作者: tlzyytc    時間: 2021-1-16 23:29
標題: 單片機按鍵計數程序求助
在網上找了一個按鍵計數程序,顯示操作都正常,只是有時會按一次加2次,請高手幫忙加上按爭鍵防抖。
#include<reg52.h>
#define u8 unsigned char
#define u16 unsigned int

sbit sw1=P3^4;
sbit sw2=P3^5;
sbit sw3=P3^6;

sbit e0=P2^0;
sbit e1=P2^1;
sbit e2=P2^2;
sbit e3=P2^3;
u8 ds[4]={0,0,0,0};
u16 num=0;
u8 code table[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,0X00};
u8 ajsm()
{
        static u16 ms;
        if(sw3==0)
        {
                if(++ms==1)
                {
                        return 1;
                }
        }
        else
        {
                ms=0;
        }
        return 0;
}

void xs()
{
        static u8 a;
        a++;
        if(a>3)a=0;
        e0=1;
        e1=1;
        e2=1;
        e3=1;
        P0=table[ds[a]];
        switch(a)
        {
                case 0:
                {
                        e0=0;
                        e1=1;
                        e2=1;
                        e3=1;
                }
                break;
                case 1:
                {
                        e0=1;
                        e1=0;
                        e2=1;
                        e3=1;        
                }
                break;
                case 2:
                {
                        e0=1;
                        e1=1;
                        e2=0;
                        e3=1;        
                }
                break;
                case 3:
                {
                        e0=1;
                        e1=1;
                        e2=1;
                        e3=0;        
                }
                break;
        }
}

void main()
{
        TMOD=0x66;
        TH0=0xff;
        TL0=0xff;
        TH1=0xff;
        TL1=0xff;
        TR1=1;
        TR0=1;
        ET0=1;
        ET1=1;
        EA=1;
        while(1)
        {
                ds[0]=num/1000%10;
                ds[1]=num/100%10;
                ds[2]=num/10%10;
                ds[3]=num%10;
                xs();
                if(ajsm())
                {
                        num=0;
                }
        }
}

void time0()interrupt 1
{

        if(num<9999)num++;


}

void time1()interrupt 3
{
        if(num>0)num--;
}


作者: 人人學會單片機    時間: 2021-1-17 11:49
void ROTARY_Key_Scan_Drive()
{
        static bit flag1=0;
        static bit flag2=1;
        static bit key_down=0;
        static u8 count1=0;
        static u16 count2=0;
        if(key_down==1)
        {
                count2++;
                if(count2>10000)
                {
                        count2=0;
                        flag1=1;
                        if(flag2)
                        {
                                flag2=0;
                                Rotary_Read_Data_Key=ROTARY_KEY_L;
                        }
                }
                if(ROTARY_MUTE==1)
                {
                        key_down=0;
                        flag2=1;
                        count2=0;
                        if(flag1)
                        {
                                flag1=0;
                        }
                        else
                        {
                                Rotary_Read_Data_Key=ROTARY_KEY_S;       
                        }
                }
        }
        else
        {
                if(ROTARY_MUTE==0)
                {
                        count1++;
                        if(count1>100)
                        {
                                count1=0;
                                if(ROTARY_MUTE==0)
                                {
                                        key_down=1;
                                }
                        }
                }
                else
                {
                        count1=0;
                }
        }
}
作者: tlzyytc    時間: 2021-1-17 12:39
人人學會單片機 發表于 2021-1-17 11:49
void ROTARY_Key_Scan_Drive()
{
        static bit flag1=0;

我看不懂,不知加到那一塊

作者: 人人學會單片機    時間: 2021-1-17 13:36
tlzyytc 發表于 2021-1-17 12:39
我看不懂,不知加到那一塊

我發給你的是獨立按鍵的 長短按掃描程序   ROTARY_MUTE是按鍵IO口 ,Rotary_Read_Data_Key是長短按輸出值 ,ROTARY_KEY_L 和S 你自己宏定義就行  
作者: xianfajushi    時間: 2021-1-17 14:37
加一句 while(sw3==0);在 return 0;前試看




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1