单片机C语言流水灯移位指令

流水灯的设计内容:
设计一组彩灯,4个以上,可以轮流显示。
(1)四个灯首先依次从左到右点亮,间隔时间为1秒,共计四秒时间;
(2)四个灯从右到左依次熄灭,间隔时间1秒。共计4秒时间;
用单片机C语言实现,我只要移位指令就好了。急,谢了!!

//没有编译过,大概思路就这样
#define P_LED P1; //定义到你自己的端口

void main(void)
{
unsigned char circledata=0x01,i=0;
while(1)
{
for(i=0;i<4;i++) //显示范围 P_LED.0:P_LED3
{
P_LED=circledata<<i;
Delay_ms(1000);//根据自己的晶振写延时1S的函数
}
circledata=0xfe;
for(i=3;i>=0;i--) //显示范围 P_LED.3:P_LED.0
{
P_LED=circledata<<i;
Delay_ms(1000);//根据自己的晶振写延时1S的函数
}
}
return;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2016-11-27
移位指令为temp=temp<<1左移一位 temp=temp>>1右移一位
但是哥们,你这个用移位反而复杂了,四个灯的直接写就好了嘛
无非是0111间隔1秒0011间隔一秒0001间隔一秒0000
反过来就是熄灭咯本回答被提问者和网友采纳
第2个回答  2011-01-11
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
void delay(uint z) //延时函数
{
uint x,y;
for(z=x;x>0;x--)
for(y=110;y>0;y--);
}
void main()
{
uchar temp,i;
temp=0xfe;
while(1)
{ for(i=0;i<4;i++)
{
P1=temp;
delay(1000);
temp<<=1;

}
for(i=3;i>=0;i--)
{
P1=temp;
delay(1000);
temp>>=1;

}

}
}
第3个回答  推荐于2017-09-02
实现的代码如下:

[plain] view plaincopyprint?
#include<reg52 h="">
sbit LED0 = P1^0;
sbit LED1 = P1^1;
sbit LED2 = P1^2;
sbit LED3 = P1^3;
sbit LED4 = P1^4;
sbit LED5 = P1^5;
sbit LED6 = P1^6;
sbit LED7 = P1^7;
void delayms(unsigned int xms) //参考郭天祥书上的延时函数
{
unsigned int i,j;
for(i=xms;i>0;i--)
for(j=120;j>0;j--);//使用12MHZ晶振
}
void main()
{
while(1)
{
LED0 = 0;
delayms(100);
LED0 = 1;

LED1 = 0;
delayms(100):
LDE1 = 1;

LED2 = 0;
delayms(100):
LDE2 = 1;

LED3 = 0;
delayms(100):
LDE3 = 1;

LED4 = 0;
delayms(100):
LDE4 = 1;

LED5 = 0;
delayms(100):
LDE5 = 1;

LED6 = 0;
delayms(100):
LDE6 = 1;

LED7 = 0;
delayms(100):
LDE7 = 1;
}

}</reg52>
相似回答