标题: 求大神分析下代码是如何实现左右流水灯的,小弟新手想不通。谢谢 [打印本页]

作者: w322405    时间: 2017-8-6 14:09
标题: 求大神分析下代码是如何实现左右流水灯的,小弟新手想不通。谢谢
#include<reg51.h>
typedef unsigned char uchar;
typedef unsigned int uint;
uchar i;
uchar temp;
uchar a,b;
void delay(void)
{
       ucharm,n,s;
       for(m=20;m>0;m--)
              for(n=20;n>0;n--)
                     for(s=248;s>0;s--);
}
void main(void)
{
       while(1)
       {
              temp=0xfe;
              P1=temp;
              delay();
              for(i=1;i<8;i++)
              {
                     a=temp<<i;
                     b=temp>>(8-i);
                     P1=a|b;
                     delay();
              }
              for(i=1;i<8;i++)
              {
                     a=temp>>i;


b=temp<<(8-i);
                     P1=a|b;
                     delay();
              }
       }
}

作者: djx0    时间: 2017-8-6 18:14
P1口驱动8个LED.
作者: djx0    时间: 2017-8-6 18:26
简单的移位处理, 用软件仿真看一下P1口的输出值就很清楚了
作者: 肖啊哈    时间: 2017-8-6 21:11
引用intrins,里面有移位的函数直接用,也可以在你的这种方法左右移动每次移动移位,之后在自加一,也可行
作者: zl2168    时间: 2017-8-6 23:09
左右流水灯即左右各4个流水灯活左右各n 个流水灯,依次亮灯或变化。
作者: 我有一只小毛驴    时间: 2017-8-7 10:48
移位指令控制端口的高电平
作者: YFJ1993    时间: 2017-8-7 12:25
原理啊,就是轮流点亮灯,就是这么简单而已,先第一个亮,然后第二个亮,一次轮流
作者: wzzhzsm    时间: 2017-8-7 14:05
用P1口驱动8个LED,第一个for循环是将所有的灯点亮,第一个for循环是依次将其中一个灯灭掉。
作者: lyl00ybz    时间: 2017-8-7 15:10
从程序来看这应该是一个共阳极的流水灯,首先给P1口赋值0xFE,转换成二进制1111  1110,P1.0亮,然后给个延时再一个逻辑左移,将P1.1清零,在逻辑右移7位将P1.0置1,然后依次循环
作者: wkblack    时间: 2017-8-7 22:58
首先0xfe,就是11111110,这个是P1.O口控制的灯亮,后边的for语句就是将这个0依次向左边移位,比如第一个循环就是11111101,这个你可以自己算算。第一个循环结束之后就是01111111,然后第二个循环就是移回去,这个方法比较基础,也不好理解,可以用intrins函数库的位移函数
作者: jzh888    时间: 2017-8-8 08:36
是通过移位来实现的
作者: 1160236886    时间: 2017-8-8 20:52
i=1时;a 1111 1100  b  0000 0011
作者: 1160236886    时间: 2017-8-8 20:53
剩下的依次,就可以了
作者: 沙发上vzz    时间: 2017-8-9 09:56
IO口给个数据然后位移,就是给高电平亮,然后一直往左或者右移
作者: 姚亚芬    时间: 2017-8-9 10:55
运用左移右移控制,循环起来




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1