STC89C52RC单片机8位流水灯C语言程序180秒循环一次,不知道错在哪里! 10
#include<reg52.h>#defineuintunsignedint#defineucharunsignedcharvoiddelay(uint);ucharc...
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
void delay(uint);
uchar code ledtable[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};
uint x,y;
void main()
{
while(1)
{
for(x=7;x>=0;x--)
{
y=5;
while(y--)
{
P1=ledtable[x];
delay(100);
P1=0xff;
delay(100);
}
}
}
}
void delay(uint t) //默认延时1毫秒
{
uint x,y;
for(x=t;x>0;x--)
{
y=58;
while(y--);
}
}
单片机是STC89C52RC 晶振:11.0592
以上代码实现P1^0到P1^7,循环闪烁,功能已实现但第一次闪烁和第二次闪烁间隔180秒!
问题我找到了,数组溢出了,但还是不明白为什么数组0不能用!
uchar code ledtable[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};
……
……
for(x=7;x>=0;x--)
{
y=5;
while(y--)
{
P1=ledtable[x];
delay(100);
P1=0xff;
delay(100);
}
}
修改后
uchar code ledtable[]={0XFF,0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};
……
……
for(x=9;x>0;x--)
{
y=5;
while(y--)
{
P1=ledtable[x];
delay(10);
P1=0xff;
delay(10);
}
}
问题解决,但不明白数组0为什么会溢出! 展开
#define uint unsigned int
#define uchar unsigned char
void delay(uint);
uchar code ledtable[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};
uint x,y;
void main()
{
while(1)
{
for(x=7;x>=0;x--)
{
y=5;
while(y--)
{
P1=ledtable[x];
delay(100);
P1=0xff;
delay(100);
}
}
}
}
void delay(uint t) //默认延时1毫秒
{
uint x,y;
for(x=t;x>0;x--)
{
y=58;
while(y--);
}
}
单片机是STC89C52RC 晶振:11.0592
以上代码实现P1^0到P1^7,循环闪烁,功能已实现但第一次闪烁和第二次闪烁间隔180秒!
问题我找到了,数组溢出了,但还是不明白为什么数组0不能用!
uchar code ledtable[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};
……
……
for(x=7;x>=0;x--)
{
y=5;
while(y--)
{
P1=ledtable[x];
delay(100);
P1=0xff;
delay(100);
}
}
修改后
uchar code ledtable[]={0XFF,0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};
……
……
for(x=9;x>0;x--)
{
y=5;
while(y--)
{
P1=ledtable[x];
delay(10);
P1=0xff;
delay(10);
}
}
问题解决,但不明白数组0为什么会溢出! 展开
1个回答
展开全部
时间显然是错误的,间隔180秒,那么闪烁延时就应该90秒,你参数100,只有100毫秒。所以时间上需要调整一下,即使你循环5次,200*5,也才1秒。
追问
不好意思问题表达的不清楚,我想要的效果是8个LED一直循环闪,但我测试时第一次亮时间和次数都是对,之后不知道单片机在做什么,距第二次灯亮,第三次,第四次中间都是间隔180秒,也就是上面写的代码单片机用了180秒才执行完成!这是我想不通的地方
追答
应该是变量冲突,x,y即使全局变量,又在延时中设置为局部变量。所以混乱了。
#include
#define uint unsigned int
#define uchar unsigned char
void delay(uint);
uchar code ledtable[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};
uint x,y;
void main()
{
while(1)
{
for(x=7;x>=0;x--)
{
y=5;
while(y--)
{
P1=ledtable[x];
delay(100);
P1=0xff;
delay(100);
}
}
}
}
void delay(uint t) //默认延时1毫秒
{
uint x1,y1;
for(x1=t;x1>0;x1--)
{
y1=58;
while(y1--);
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询