标题:
利用单片机移位操作
[打印本页]
作者:
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