微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 一段C语言程序有点不明白

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

时间:10-02 整理:3721RD 点击:
#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呢?

路过

快来人啊

原因已找到。此问题到此截止

啥问题呢?

讲讲怎么回事好让大家学习下。
你这个程序里没有while(1)循环。另外,switch里怎是(0)?既然都定死了,还要switch干啥?

我在程序后面写了,写switch(0)是为了调试用的。之所以会出现1~7是因为后面的if(i==7){。}。当=7时将i清零进入for循环会自动加一再执行程序。将if程序段里的i=0改成i=-1就可以全部显示了。当然一般都是用while循环的

谢谢小编 同问

9楼正解,正是因为for语句中的i++使得执行if语句i=0后又马上变成i=1了.

看看了

这个问题是I++的问题

真的没有问题了么?确定没有问题了么?你的i值能取负一么?你的i是unsigned char不是char.

写程序要严谨。

谢谢你的建议。不过我将i改成-1真的可以啦!以后会注意程序的严谨啦

多谢大家,看了大家的讨论,明白很多!多谢!

嘿嘿~

学习了,都是高手啊

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top