|
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar shu[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //0~9
uchar wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //位选
uchar i=0;
unsigned char b,c,d,j,k,l,m,n,o,p; //纠正位溢出的变量
unsigned char q,r,s,t,u,v,w,x,y; //消除计数值的零的变量
int z=-1;
void zhi(void)//最大值的归零
{
j=k=l=m=n=o=p=0;
q=r=s=t=u=v=w=x=y=0;
}
void delay(uint t)//小延时
{
uchar a;
for(;t>0;t--)
for(a=0;a<19;a++);
}
void main()
{ EA=1; //按键触发的中断
EX1=1;
IT1=1;
while(1)
{
for(b=0;b<8;b++)
{if(z+1<i)//本想用if消抖,但发现中断无处不在
{i=z+1;}
else
{z=i;}
P1=wei[b];//位选
switch(b)
{
case 0 : if(i<10) //个位加1
{ P0=shu[i];
}
else
{i=0;
q=1;
j++;
}
break;
case 1 : if (q==1) //十位
{if(j<10)
{
P0=shu[j];
}
else
{j=0;
r=1;
k++;
}
}
else
{P0=0x00;}
break;
case 2 : if (r==1) //百位
{ if(k<10)
{
P0=shu[k];
}
else
{k=0;
s=1;
l++;
}
}
else
{P0=0x00;}
break;
case 3 : if (s==1)
{
if(l<10)
{
P0=shu[l];
}
else
{l=0;
t=1;
m++;
}
}
else
{P0=0x00;}
break;
case 4 : if (t==1)
{
if(m<10)
{
P0=shu[m];
}
else
{ m=0;
u=1;
n++;
}
}
else
{P0=0x00;}
break;
case 5 : if (u==1)
{
if(n<10)
{
P0=shu[n];
}
else
{n=0;
v=1;
o++;
}
}
else
{P0=0x00;}
break;
case 6 : if (v==1)
{
if(o<10)
{
P0=shu[o];
}
else
{o=0;
w=1;
p++;
}
}
else
{P0=0x00;}
break;
case 7 : if (w==1)
{
if(p<10)
{
P0=shu[p];
}
else
{
zhi();//归零
}
}
else
{P0=0x00;}
break;
}
delay(30);
P0=0x00;
}
}
}
void into() interrupt 2 // 按键触发的中断
{
i++;
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|