估计是延时出问题了!
时间:10-02
整理:3721RD
点击:
用一位数组编写了个流水灯程序,开始一直出错误,看了一下I/O口的状态,确实有问题:
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
uchar num;
uchar code table[]={
0xff,0xfe,0xfd,0xfb,0xf7,0xef,
0xdf,0xbf,0x7f,0xbf,0xdf,0xef,
0xf7,0xfb,0xfd,0xfe,0xff
};
void delay(uint z)
{
uint i,j;
for(i=z;i>0;i--)
for(j=110;j>0j--);
}
void main()
{
while(1)
{
for(num=0;num<17;num++)
{
P0=table[num];
delay(300);
}
}
}
程序就是这样的,I/O口的状态开始是乱的,我想是延时出问题了,但又搞不清楚具体是什么问题。然后把程序改成这样:
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
uchar code table[]={
0xfe,0xfd,0xfb,0xf7,0xef,
0xdf,0xbf,0x7f,0xbf,0xdf,
0xef,0xf7,0xfb,0xfd,0xfe
};
void delay(uint i)
{
while(i--);
}
void main()
{
uchar i=0;
while(1)
{
for(i=0;i<15;i++)
{
P0=table[i];
delay(30000);
}
}
}
改过以后,运行是没问题了,可就是搞不明白上边哪个问题出哪了!希望有人指点指点!谢谢
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
uchar num;
uchar code table[]={
0xff,0xfe,0xfd,0xfb,0xf7,0xef,
0xdf,0xbf,0x7f,0xbf,0xdf,0xef,
0xf7,0xfb,0xfd,0xfe,0xff
};
void delay(uint z)
{
uint i,j;
for(i=z;i>0;i--)
for(j=110;j>0j--);
}
void main()
{
while(1)
{
for(num=0;num<17;num++)
{
P0=table[num];
delay(300);
}
}
}
程序就是这样的,I/O口的状态开始是乱的,我想是延时出问题了,但又搞不清楚具体是什么问题。然后把程序改成这样:
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
uchar code table[]={
0xfe,0xfd,0xfb,0xf7,0xef,
0xdf,0xbf,0x7f,0xbf,0xdf,
0xef,0xf7,0xfb,0xfd,0xfe
};
void delay(uint i)
{
while(i--);
}
void main()
{
uchar i=0;
while(1)
{
for(i=0;i<15;i++)
{
P0=table[i];
delay(30000);
}
}
}
改过以后,运行是没问题了,可就是搞不明白上边哪个问题出哪了!希望有人指点指点!谢谢
for(j=110;j>0j--);
你确定这个函数通过编译了?
是的,编译没有错误!
不可能没有错误。for(j=110;j>0j--);,,,第二、三个表达式之间缺少一个分号。
那个是在往上写的时候忘了这个,在Keil中肯定不会有这样的问题!关键这都不是要点!