一段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呢?
#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真的可以啦!以后会注意程序的严谨啦
多谢大家,看了大家的讨论,明白很多!多谢!
嘿嘿~
学习了,都是高手啊