本意是让8个发光管来回流动,但不知道哪里出错,请大家帮帮忙。。。

时间:2021-07-13 21:24:10

//8个发光管来回流动,每个管亮1000ms
#include<reg52.h>
#include <intrins.h>
void delays(int m)
{
int x,y;
for(x=m;x>0;x--)
for(y=110;y>0;y--);
}
void main()
{
char temp;
int i;
P1=0xfe; //先点亮第一个灯
while(1)
{
for(i=0;i<8;i++)
{
delays(1000); //亮一秒
temp=_crol_(temp,1); //左移一位,直到移到最高位亮
P1=temp;   
}
//此时P1=0111 1111
for(i=0;i<8;i++)
{
delays(1000);
temp=_cror_(temp,1); // 右移一位
P1=temp;
}
}
}

本意是想让8个发光管来回流动,但实际运行,第一个灯亮一秒,然后其余的灯都亮了,不知道哪里出错了,请大家赐教,不甚感激。

6 个解决方案

#1


temp没有初始化,数据是什么都不知道就移位,有什么用呢。

#2


移位的是temp,不是0xfe

#3


            temp=_crol_(temp,1); //左移一位,直到移到最高位亮
            P1=temp;   

这里 _crol_这个函数们没有给出来啊,不知道是否有问题
其实你可以做一个数组还查表这样也很简单

#4


不好意思,呵呵_crol_这个函数没有用过之前,呵呵  所以不知道是库函数,见笑了。

确实是temp 没有在左移的之前初始化

#5


自己跟踪看看出了什么问题

#6


P1=0xfe; //先点亮第一个灯
这个应当是temp=0xfe吧,你那个temp识别不了

#1


temp没有初始化,数据是什么都不知道就移位,有什么用呢。

#2


移位的是temp,不是0xfe

#3


            temp=_crol_(temp,1); //左移一位,直到移到最高位亮
            P1=temp;   

这里 _crol_这个函数们没有给出来啊,不知道是否有问题
其实你可以做一个数组还查表这样也很简单

#4


不好意思,呵呵_crol_这个函数没有用过之前,呵呵  所以不知道是库函数,见笑了。

确实是temp 没有在左移的之前初始化

#5


自己跟踪看看出了什么问题

#6


P1=0xfe; //先点亮第一个灯
这个应当是temp=0xfe吧,你那个temp识别不了