一段C语言程序有点不明白

2019-07-16 02:28发布

#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit LS138A=P2^2;
sbit LS138B=P2^3;
sbit LS138C=P2^4;
sbit OE=P1^3;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delay(uint z);
uchar i;
void main()              
{
      OE=0;
      for(i=0;i<8;i++)
      {
          P0=table[i];
          switch(0)
          {
            case 0:LS138A=0; LS138B=0; LS138C=0;  break;         
                case 1:LS138A=1; LS138B=0; LS138C=0;  break;                    
                case 2:LS138A=0; LS138B=1; LS138C=0;  break;
                case 3:LS138A=1; LS138B=1; LS138C=0;  break;
                        case 4:LS138A=0; LS138B=0; LS138C=1;  break;
                        case 5:LS138A=1; LS138B=0; LS138C=1;  break;
                        case 6:LS138A=0; LS138B=1; LS138C=1;  break;
                        case 7:LS138A=1; LS138B=1; LS138C=1;  break;
          }
          delay(1000);
          if(i==7)
             {
             i=0;
             }
      }
}

void delay(uint z)
{
    uint x,y;
    for(x=z;x>0;x--)
       for(y=100;y>0;y--);
}
程序如上。这是一个数码管显示程序,其中switch(0)是调试时只让第一位数码管亮,按理说应该是显示的数字应该是0~7,可是为什么实际却是从1~7呢??

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
bluezero
1楼-- · 2019-07-16 21:39
卡卡童鞋001 发表于 2013-2-16 13:13
原因已找到。。此问题到此截止

讲讲怎么回事好让大家学习下。
你这个程序里没有while(1)循环。另外,switch里怎是(0)?既然都定死了,还要switch干啥?
卡卡童鞋001
2楼-- · 2019-07-17 02:58
bluezero 发表于 2013-2-16 15:37
讲讲怎么回事好让大家学习下。
你这个程序里没有while(1)循环。另外,switch里怎是(0)?既然都定死了, ...

我在程序后面写了,写switch(0)是为了调试用的。之所以会出现1~7是因为后面的if(i==7){。。。。}。当=7时将i清零进入for循环会自动加一再执行程序。将if程序段里的i=0改成i=-1就可以全部显示了。。。当然一般都是用while循环的
swn6933
3楼-- · 2019-07-17 03:13
谢谢楼主 同问
xmchendaying
4楼-- · 2019-07-17 03:27
Hoyloun
5楼-- · 2019-07-17 03:31
 精彩回答 2  元偷偷看……
sirius08
6楼-- · 2019-07-17 05:38
看看了

一周热门 更多>