一个循环函数的困惑

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条回答
alywin-小朱
1楼-- · 2019-07-16 02:40
不要只贴出有问题的部分,应该将你所想要设计的程序思路写出来,做什么(实现什么功能)、用什么做(硬件电路简述)、怎么做(程序大概思路)、遇到什么问题、程序,就这么一点信息,相帮你都帮不到
eyexceed
2楼-- · 2019-07-16 02:59
alywin-小朱 发表于 2013-7-29 11:04
不要只贴出有问题的部分,应该将你所想要设计的程序思路写出来,做什么(实现什么功能)、用什么做(硬件电 ...

好吧 下面贴程序,我只是想知道把显示函数写在判断定时器函数里面和外面有什么区别,我知道正确的为什么正确,却不知道错误的为什么错误
eyexceed
3楼-- · 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++;
}
alywin-小朱
4楼-- · 2019-07-16 11:27
eyexceed 发表于 2013-7-29 11:09
好吧 下面贴程序,我只是想知道把显示函数写在判断定时器函数里面和外面有什么区别,我知道正确的为什么 ...

因为单纯从你这个循环来看是没有问题的,所以必须从整体的程序来分析,才能判断的出来
eyexceed
5楼-- · 2019-07-16 16:18
 精彩回答 2  元偷偷看……
alywin-小朱
6楼-- · 2019-07-16 20:13
eyexceed 发表于 2013-7-29 11:14
嗯好的 程序贴出来了,请帮我看看

加QQ764672150,我告诉你原因,在论坛上讲不清楚

一周热门 更多>