c语言问题(谁给详细解释一下)

来源:百度知道 编辑:UC知道 时间:2024/06/19 15:10:27
/*============================*/
/* PROGRAM EX5_2.C (Z CAR LED)*/
/*============================*/

#pragma code symbols debug oe
#include <reg51.h>

void delay(int i)
{
while(i--);
}

void main(void)
{
data unsigned char led,j;
led=0xfe;

do {
for (j=1; j<=7; j++)
{
P1 = led;
delay(0x4800);
led=( led << 1 ) | 5; }

for (j=1; j<=7; j++) {
P1 = led;
delay(0x4800);
led=( led >> 1) | 0x80; }
} while( 1 );
}
dan pian ji de ...

首先,这个程序是一个51单片机的程序不说。
其次,这个程序没有使用价值。(可能我逻辑每分析对)
下面是代码每一句的意思。
void delay(int i)
{
while(i--);
}
以上是延时函数,没什么好说。

void main(void)
{
data unsigned char led,j; 首先定义俩char变量
led=0xfe;led灯的最低位为0,低电平灯亮

do {
for (j=1; j<=7; j++) 循环8次
{
P1 = led; 将灯的置为写入端口P1,这样LED硬件灯才会发光
delay(0x4800);延时
led=( led << 1 ) | 5; }左移一位并且与0101或运算。这个地方是关健。我算了,除了前几次灯亮的位置改变以外,但是最后就全灭了,因为以后P1口的值为11111111B。

for (j=1; j<=7; j++) { 同上
P1 = led; 同上
delay(0x4800);同上
led=( led >> 1) | 0x80; }这个原理同上,但这个更加离谱,这个从开始就一直是11111111B,它就每变化。你看啊,首先原来led为0xff,右移一位,0xef,再与0x80或运算,结果还为0xff。
} while( 1 );
}

在线讨论:
是单片机LED流水灯吧!

哦,这个呀,,这个嘛,,----不懂。