找回密码
 立即注册

QQ登录

只需一步,快速开始

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

利用单片机移位操作

[复制链接]
跳转到指定楼层
楼主
ID:233145 发表于 2017-9-14 17:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
求问怎么用51单片机移位进行led流水灯操作,急速求解
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:219796 发表于 2017-9-14 19:24 来自手机 | 只看该作者
P0=0x01;P0<<=1;灯由第一个亮换到第二个亮,流水灯你在循环就行了

评分

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

查看全部评分

回复

使用道具 举报

板凳
ID:233145 发表于 2017-9-14 21:39 | 只看该作者

但是我想让他左右来回流水灯
回复

使用道具 举报

地板
ID:233219 发表于 2017-9-14 23:31 | 只看该作者
bit flag=1;//转向标志
P0=0X01;//P0初值
if((P0==0X80)&&(flag==1))//判断是不是到最左边了
flag=0;
if((flag==0)&&(P0==0X01))//判断是不是到最右边了
flag=1;
if(flag==0)//方向判断,正在向右移动
P0>>=1;
if(flag==1)//方向判断,正在向左移动
P0<<=1;

思路是这样的,你测试下吧,直接手写的,我也没有测试,急需要分啊,凌晨跑来答问题。。。

评分

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

查看全部评分

回复

使用道具 举报

5#
ID:232538 发表于 2017-9-14 23:34 来自手机 | 只看该作者
移到顶再换个方向移

评分

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

查看全部评分

回复

使用道具 举报

6#
ID:219796 发表于 2017-9-15 03:26 来自手机 | 只看该作者
582130377 发表于 2017-9-14 21:39
但是我想让他左右来回流水灯

到第八个了再右移>>
回复

使用道具 举报

7#
ID:232280 发表于 2017-9-15 08:24 来自手机 | 只看该作者
#include<reg52.h> #include<intrins.h> typedef unsigned int u16; typedef unsigned char u8; void delay(u8 z) {         u8 x,y;         for(x=z;x>0;x--)                 for(y=200;y>0;y--); } void main() {         while(1)         {                 u8 i;                 P2=0xfe;                 for(i=8;i>0;i--)                 {                         P2=_cror_(P2,1);                         delay(200);                         }                 for(i=7;i>0;i--)                 {                         P2=_crol_(P2,1);                         delay(200);                 }         } }  第二种: #include<reg52.h> #include<intrins.h> typedef unsigned int u16; typedef unsigned char u8; u8 code table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; void delay(u8 z) {         u8 x,y;         for(x=z;x>0;x--)                 for(y=200;y>0;y--); } void main() {         while(1)         {                 u8 i;                 for(i=8;i>0;i--)                 {                         P2=table[i-1];                         delay(200);                         }                 for(i=0;i<8;i++)                 {                         P2=table[i];                         delay(200);                 }         } } 第三种: #include<reg52.h> #include<intrins.h> typedef unsigned int u16; typedef unsigned char u8; //u8 code table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; void delay(u8 z) {         u8 x,y;         for(x=z;x>0;x--)                 for(y=200;y>0;y--); } void main() {         while(1)         {                 u8 i,j,k;                 j=0x7f;k=0xfe;                 for(i=8;i>0;i--)                 {                         P2=j;                         j>>=1;                                                 delay(200);                          }                 for(i=0;i<8;i++)                 {                                         P2=k;                         k<<=1;                         delay(200);                 }         } }
回复

使用道具 举报

8#
ID:193818 发表于 2017-9-15 08:43 | 只看该作者
也就是io口高低电瓶的控制。有一个笨办法:你可以将每个状态保存在一个数组里,然后遍历它。这个办法控制简单的还是可以的
回复

使用道具 举报

9#
ID:226263 发表于 2017-9-17 20:57 | 只看该作者
很简单啊,先让他每次移动一位,移动8次,然后判断一下到了8次没,接着反过来,主函数里面不断重复调用函数,就可以不断循环。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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