里面有数码管的显示程序,但是只在单片机烧录的时候显示一下,之后就没有了,求好人帮忙
/***************************************************************///超声波测距模块数码管显示控制程序
//晶振:11。0592
//接线:模块TRIG接 P1.1 ECH0 接P1.0
//数码管:共阳数码管P0接数据口,P2.5 P2.6 P2.7为百十个位接选通数码管
/***************************************************************/
#include<reg52.h> //头文件
#define uint unsigned int //宏定义
#define uchar unsigned char //宏定义
sbit ECHO1=P1^0;
sbit TRIG1=P1^1;
sbit ECHO2=P1^2;
sbit TRIG2=P1^3;
sbit in1=P1^4;
sbit in2=P1^5;
sbit in3=P1^6;
sbit in4=P1^7;
sbit d=P3^2;
//sbit fm=P2^0;
uint time1=0,time2=0;
uchar h,i,j,k;
unsigned long g=0;
uchar smg[] ={0X03,/*0*/0X9F,/*1*/0X25,/*2*/0X0D,/*3*/0X99,/*4*/0X49,/*5*/0X41,/*6*/0X1F,/*7*/0X01,/*8*/0X09,/*9*/};//数码管显示
/*8us延时函数(11.0592M晶振下)*/
void delay(uchar z)
{
uchar s,v;
for(s=0;s<z;s++)
for(v=0;v<1;v++) ; //一个for循环8个机器周期(1*8*1us=8us)
}
/*数值显示函数*/
void display(uchar d,uchar e,uchar f)
{
P2=0xdf;
P0=smg[d]; //显示百位
delay(5);
P0=0xff; //消隐
P2=0xbf;
P0=smg[e]; //显示十位
delay(5);
P0=0xff; //消隐
P2=0x7f;
P0=smg[f]; //显示个位
delay(5);
P0=0xff; //消隐
}
/*距离计算函数*/
void juli()
{
time1=0;
time2=0;
time1=TH0*256+TL0;
time2=TH1*256+TL0;
if(time1>time2)
g=time1*0.017;//计算距离,单位厘米
else
g=time2*0.017;
h=(g%1000)/100;
i=((g%1000)%100)/10;
j=((g%1000)%100)%10;
}
/*电机正转*/
void zz1()
{
in1=0;
in2=1;
in3=0;
in4=1;
}
/*电机反转*/
void fz()
{in1=1;
in2=0;
in3=1;
in4=0;
}
/*电机停止*/
void tz()
{in1=0;
in2=0;
in3=0;
in4=0;
}
/*左转*/
void zz2()
{in1=0;
in2=0;
in3=0;
in4=1;
}
/*右转*/
void yz()
{in1=0;
in2=1;
in3=0;
in4=0;
}
void chaoshengbo()
{
EA=0;
TRIG1=1;
TRIG2=1; //开超声波
delay(2);
TRIG1=0; //关超声波
TRIG2=0;
while(ECHO1==0); //等待Echo1回波引脚变高电平
TH0=0; //定时器0清零
TL0=0; //定时器0清零
TR0=1; //开T0计时器
while(ECHO2==0); //等待Echo回波引脚变高电平
TH1=0; //定时器0清零
TL1=0; //定时器0清零
TR1=1; //开T0计时器
while(ECHO1==1);
TR0=0;
while(ECHO2==1);
TR1=0;
EA=1;
}
/*主程序*/
void main()
{
TMOD=0x11;//T0工作方式1,GATE=0允许软件控制中断
TH0=0;//赋值
TL0=0;
TH1=0;
TL1=0;
ET0=1;
ET1=1;
IT0=0;
IT1=0;//下降沿有效
EA=1;//开总中断
while(1)
{
chaoshengbo();
juli();
for(k=0;k<20;k++)
display(h,i,j);
if(time1>time2)
yz();
if(time1<time2)
zz2();
while(time1==time2)
{
if(g<200&g>=80)
zz1();
if(g<80&g>=50)
tz();
if(g<50)
fz();
}
}
}
g的值是有的,但是就是不显示