单片机按键计数程序求助

单片机按键计数程序求助,在网上找了一个按键计数程序,显示操作都正常,只是有时会按一次加2次,请高手帮忙加上按争键防抖。 #include<reg52.h> #defin…

单片机按键计数程序求助,在网上找了一个按键计数程序,显示操作都正常,只是有时会按一次加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–;
}

作者: soufei

为您推荐


Fatal error: Can't use function return value in write context in /www/wwwroot/www.qianrushi.com.cn/wp-content/themes/news/footer.php on line 115