一个循环函数的困惑

2019-07-15 23:25发布

  while(1)
  {
  if(t==10)     //定时器
          {
        t=0;
        temp++;
        if(temp==9999)
          temp=0;
    }
   display(temp)        ;  //显示任意4位数
  }
这个程序中display函数写在if循环外面,能够正常执行,
但是如果下载if里面,就会出错,它将显示个位从1-9,
然后高位一直闪烁。不能像写在外面那样定住,非常疑惑,
因为,其他程序根本没有变化,但是这一句变化却会有这样的改变,不知道为什么。
希望有人解惑,谢谢。

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
11条回答
eyexceed
2019-07-16 08:31
下面是完整的程序
//显示任意4位数,1-9999动态显示,定时器0设置0.5s一走,
//延时程序设置让其一直显示
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit duan=P2^6;
sbit wei=P2^7;
uchar code tableduan[]=
{
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0xff ,0x6f
};
uchar code tablewei[]=
{
0xfe,0xfd,0xfb,0xf7,
0xef,0xdf,0xbf,0x7f
};
void yanshi(uint);
void display(uint);
  uchar qian,bai,shi,ge;
  uint t=0,temp;
void main()
{

  TMOD=1;
  TH0=15536/256;
  TL0=15536%256;
  EA=1;
  ET0=1;
  TR0=1;
  while(1)
  {
  if(t==1)
          {
        t=0;
        temp++;
        if(temp==9999)
          temp=0;
    }
  display(temp)        ;  //显示任意4位数
  }
}
void yanshi(uint z)
{
   uint a,b;
  for (a=z;a>0;a--)
      for(b=120;b>0;b--);
}
void display(uint z)                 //任意4位
{
  uint tms;
  tms=5;
  qian=z/1000;
  bai=z%1000/100;
  shi=z%1000%100/10;
  ge=z%10;
  wei=1;
  P0=tablewei[0];
  wei=0;
  duan=1;
  P0=tableduan[qian];
  duan=0;
  yanshi(tms);

    wei=1;
  P0=tablewei[1];
  wei=0;
  duan=1;
  P0=tableduan[bai];
  duan=0;
  yanshi(tms);

    wei=1;
  P0=tablewei[2];
  wei=0;
  duan=1;
  P0=tableduan[shi];
  duan=0;
   yanshi(tms);

    wei=1;
  P0=tablewei[3];
  wei=0;
  duan=1;
  P0=tableduan[ge];
  duan=0;
   yanshi(tms);
}
void time0() interrupt 1
{
   
  TH0=15536/256;
  TL0=15536%256;
  t++;
}

一周热门 更多>