第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>