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为什么会溢出!
展开
 我来答
zhxiufan
2016-06-08 · 知道合伙人软件行家
zhxiufan
知道合伙人软件行家
采纳数:14923 获赞数:38387
国家科技进步奖

向TA提问 私信TA
展开全部
时间显然是错误的,间隔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--);
}
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式