标题: 利用单片机移位操作 [打印本页]

作者: 582130377    时间: 2017-9-14 17:04
标题: 利用单片机移位操作
求问怎么用51单片机移位进行led流水灯操作,急速求解

作者: sldx    时间: 2017-9-14 19:24
P0=0x01;P0<<=1;灯由第一个亮换到第二个亮,流水灯你在循环就行了
作者: 582130377    时间: 2017-9-14 21:39
sldx 发表于 2017-9-14 19:24
P0=0x01;P0

但是我想让他左右来回流水灯
作者: moon2000boy    时间: 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;

思路是这样的,你测试下吧,直接手写的,我也没有测试,急需要分啊,凌晨跑来答问题。。。
作者: shuaige    时间: 2017-9-14 23:34
移到顶再换个方向移
作者: sldx    时间: 2017-9-15 03:26
582130377 发表于 2017-9-14 21:39
但是我想让他左右来回流水灯

到第八个了再右移>>
作者: GOD丿小男孩    时间: 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);                 }         } }
作者: 漫步经心    时间: 2017-9-15 08:43
也就是io口高低电瓶的控制。有一个笨办法:你可以将每个状态保存在一个数组里,然后遍历它。这个办法控制简单的还是可以的
作者: 伟大的科长    时间: 2017-9-17 20:57
很简单啊,先让他每次移动一位,移动8次,然后判断一下到了8次没,接着反过来,主函数里面不断重复调用函数,就可以不断循环。




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