谁能帮我解释以着这个51单片机的c语言程序,说的详细些,谢谢!

#include <AT89X51.H>
unsigned char i;
unsigned char temp;
unsigned char a,b;

void delay(void)
{
unsigned char m,n,s;
for(m=20;m>0;m--)
for(n=2000;n>0;n--)
for(s=248;s>0;s--);
}
void main(void)
{
while(1)
{
temp=0xfe;
P1=temp;
delay();
for(i=1;i<8;i++)
{
a=temp<<i;
b=temp>>(8-i);
P1=a|b;
delay();
}
for(i=1;i<8;i++)
{
a=temp>>i;
b=temp<<(8-i);
P1=a|b;
delay();
}
}
}

估摸着是点亮流水灯的代码吧,首先delay();是延时这能明白吧!
while(1)
{
temp=0xfe;
P1=temp; //先让P1口值为0xfe,估计是先点亮一个LED灯
delay();
for(i=1;i<8;i++)
{
a=temp<<i; //temp左移i位
b=temp>>(8-i); //temp右移8-i位
P1=a|b; //P1赋值,实际上就是让P1=(temp循环左移i位),看下面解释
delay(); //延时
}
for(i=1;i<8;i++)
{
a=temp>>i; //temp右移i位
b=temp<<(8-i); //temp左移8-i位
P1=a|b; //P1赋值,实际上就是让P1=(temp循环右移i位),看下面解释
delay(); //延时
}
}

temp是8bit数据,假设其8位值分别是:x7,x6,x5,x4,x3,x2,x1,x0
假设:a = temp<<1,则a的8位值为:x6,x5,x4,x3,x2,x1,x0,0
b = temp>>(8-1),则吧的8位值为:0,0,0,0,0,0,0,x7

则P1 = a|b就是:x6,x5,x4,x3,x2,x1,x0,x7。是不是成循环左移1位了。追问

void delay(void)是什么意思

mns分别是什么意思
void main(void)是什么意思
temp是什么意思。能随便改成其他的吗
a和b又代表什么,a|b又是什么意思

追答

那我就爱莫能助了,你去学C语言吧!C程序设计!了解什么是编程、代码、程序、函数,了解这些之后再来学这个吧!

追问

你也不会吗

追答

这些学起来就已经是一门课程了!我不会教!

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-11-06
你好!
这个一个流水灯!
delay(); 是延时函数
a=temp>>i; 是位移本回答被网友采纳
相似回答