找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2413|回复: 14
打印 上一主题 下一主题
收起左侧

求大神分析下代码是如何实现左右流水灯的,小弟新手想不通。谢谢

  [复制链接]
跳转到指定楼层
楼主
ID:225054 发表于 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();
              }
       }
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:220770 发表于 2017-8-6 18:14 | 只看该作者
P1口驱动8个LED.
回复

使用道具 举报

板凳
ID:220770 发表于 2017-8-6 18:26 | 只看该作者
简单的移位处理, 用软件仿真看一下P1口的输出值就很清楚了
回复

使用道具 举报

地板
ID:225079 发表于 2017-8-6 21:11 | 只看该作者
引用intrins,里面有移位的函数直接用,也可以在你的这种方法左右移动每次移动移位,之后在自加一,也可行
回复

使用道具 举报

5#
ID:111634 发表于 2017-8-6 23:09 | 只看该作者
左右流水灯即左右各4个流水灯活左右各n 个流水灯,依次亮灯或变化。
回复

使用道具 举报

6#
ID:225403 发表于 2017-8-7 10:48 | 只看该作者
移位指令控制端口的高电平
回复

使用道具 举报

7#
ID:225422 发表于 2017-8-7 12:25 | 只看该作者
原理啊,就是轮流点亮灯,就是这么简单而已,先第一个亮,然后第二个亮,一次轮流
回复

使用道具 举报

8#
ID:224682 发表于 2017-8-7 14:05 | 只看该作者
用P1口驱动8个LED,第一个for循环是将所有的灯点亮,第一个for循环是依次将其中一个灯灭掉。
回复

使用道具 举报

9#
ID:225460 发表于 2017-8-7 15:10 | 只看该作者
从程序来看这应该是一个共阳极的流水灯,首先给P1口赋值0xFE,转换成二进制1111  1110,P1.0亮,然后给个延时再一个逻辑左移,将P1.1清零,在逻辑右移7位将P1.0置1,然后依次循环
回复

使用道具 举报

10#
ID:225626 发表于 2017-8-7 22:58 | 只看该作者
首先0xfe,就是11111110,这个是P1.O口控制的灯亮,后边的for语句就是将这个0依次向左边移位,比如第一个循环就是11111101,这个你可以自己算算。第一个循环结束之后就是01111111,然后第二个循环就是移回去,这个方法比较基础,也不好理解,可以用intrins函数库的位移函数

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

11#
ID:225651 发表于 2017-8-8 08:36 | 只看该作者
是通过移位来实现的
回复

使用道具 举报

12#
ID:225017 发表于 2017-8-8 20:52 | 只看该作者
i=1时;a 1111 1100  b  0000 0011
回复

使用道具 举报

13#
ID:225017 发表于 2017-8-8 20:53 | 只看该作者
剩下的依次,就可以了
回复

使用道具 举报

14#
ID:225971 发表于 2017-8-9 09:56 | 只看该作者
IO口给个数据然后位移,就是给高电平亮,然后一直往左或者右移
回复

使用道具 举报

15#
ID:226008 发表于 2017-8-9 10:55 | 只看该作者
运用左移右移控制,循环起来
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表