求个 51单片机 计数器 程序(增加按键防抖)
下面是一个大侠帮写的 51单片机 计数器 程序(非常感谢大侠)。
初始显示“0000”,按一下 SW1 加一个数,按一下 SW2 减一个数.
按 SW3 清零。
我想增加 按键防抖 功能,谢谢
#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==2)
{
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--;
}
#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()
{
if(sw3==0)
{
while(sw3==0);
return 1
}
else
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
{
while(sw1==0);
if(num<9999)num++;
}
void time1()interrupt 3
{
while(sw2==0);
if(num>0)num--;
}