#include<reg51.h>
#include <intrins.h>
void xianshi(void);
unsigned int i;
int a;
int b;
int c;
long s;
unsigned char code shuzi[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
unsigned char disbuff[4]={0,0,0,0,};
sbit fa=P1^0;
sbit shou=P1^1;
unsigned int time=0;
//声明
void main(void)
{
while(1) {
i=0;
c=1;
EA=1;
ET0=1;
ET1=1;
TMOD=0x11;
TH0=0xF8;
TL0=0x30;
TH1=0;
TL0=0;
fa=1;
TR0=1;
TR1=0;
while(c);
TR0=0;
TR1=1;
loop1: if((shou==1)||(i>3))
{
TR1=0;
time=TH1*256+TL1+200;
TH1=0;
TL1=0;
s=(long)(time*0.17);
disbuff[0]=shuzi[s%10];
disbuff[1]=shuzi[(s/10)%10];
disbuff[2]=shuzi[(s/100)%10];
disbuff[3]=shuzi[(s/1000)%10];
xianshi();
}
else
{i=i++;
goto loop1;
}
} }
//主程序
void dingshi1(void) interrupt 1
{
fa=0;
c=0;
TH0=0xF8;
TL0=0x30;
}
//中断服务程序
void dingshi2(void) interrupt 3
{
_nop_();
}
void xianshi(void)
{
for(a=0;a<4;a++)
{
switch(a) //位选,选择点亮的数码管,
{
case(0):
LSA=0;LSB=0;LSC=0; break;//显示第0位
case(1):
LSA=1;LSB=0;LSC=0; break;//显示第1位
case(2):
LSA=0;LSB=1;LSC=0; break;//显示第2位
case(3):
LSA=1;LSB=1;LSC=0; break;//显示第3位
}
P0=disbuff[a];//发送段码
b=15; //扫描间隔时间设定
while(b--);
P0=0x00;//消隐
}
}
//显示子程序
我承认我做不出来。这个程序不对但又不知道哪里不对。放到片子里面数字乱跳。跪了·
不管在什么距离,显示的数字老是在109和34之间闪烁。