51单片机程序找不到错误,但是led不受控制。

Dynamii 2020-09-14 09:01:09
本人菜鸟,各位大神帮忙找一下问题,我自己找了两天没有发现问题点。

题目:8个发光管间隔200ms由上至下,再由下至上,再重复一次,然后全部熄灭再以300ms间隔全部闪烁5次。重复此过程。

问题,我的代码只会点亮第一个led,然后就一直亮着不动。

单片机是89C51,晶振频率11.0592MHz

代码如下,编译无报错。

[/code]#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar aa;
void delay(uint a);

void main()
{
uchar i,j,k;
while(1)
{
for(i=0;i<3;i++)
{
aa=0xfe;
for(j=0;j<7;j++)
{
P1=aa;
delay(200);
aa=_crol_(aa,1);
}

aa=0x7f;
for(k=0;k<8;k++)
{
P1=aa;
delay(200);
aa=_cror_(aa,1);
}

}

P1=0xff;
for(j=0;j<10;j++)
{

P1=~P1;
delay(300);
}
}

}


void delay(uint a)
{
uint x,y;
for(x=a;a>0;x--)
for(y=110;y>0;y--);


}
...全文
18291 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
tangguowang1991 2020-09-29
  • 打赏
  • 举报
回复
同意三楼看法,通过串口打印,是最简单直白的查找问题的方法。还有就是你的参数标识符应该设置名称去分辨,而不是用字母这种看不明白是什么意思的标识符来表示。
forget345 2020-09-14
  • 打赏
  • 举报
回复
楼上说的对,for(x=a;a>0;x--) ,改为 for(x=a;x>0;x--),条件判断错了
weixin_43964245 2020-09-14
  • 打赏
  • 举报
回复
for(x=a;a>0;x--)
Dynamii 2020-09-14
  • 打赏
  • 举报
回复
把delay改了以后就可以。 改之前的delay void delay(uint a) { uint x,y; for(x=a;a>0;x--) for(y=110;y>0;y--); 改之后 void delay(uint z) { uint x,y; for(x=0;x<z;x++) for(y=0;y<110;y++); } 我感觉这两个是一样的,为什么之前的程序不对呢?
哈哈哈哈2018 2020-09-14
  • 打赏
  • 举报
回复
同意一楼所说。同时提醒一点,对于这种问题可以用添加打印的方式去解,有了打印应该很容易就能查找出问题。

27,510

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧