1、程序

1.1 简略粗犷法

#include<reg52.h>void main(){    unsigned int i;    i=40000;    while(1)    {        P2=0XFE;//点亮第1个led         while(i--);        P2=0XFD;//点亮第2个led         while(i--);        P2=0XFB;//点亮第3个led         while(i--);        P2=0XF7;//点亮第4个led         while(i--);        P2=0XEF;//点亮第5个led         while(i--);        P2=0XDF;//点亮第6个led         while(i--);        P2=0XBF;//点亮第7个led         while(i--);        P2=0X7F;//点亮第8个led         while(i--);    }}

1.2 左移法

#include<reg52.h>void main(){    unsigned int i;    i=40000;    while(1)    {            unsigned char X;        P2= ~(0X01<<X); //~取反 原本0000 0001 变成 1111 1110        X++;        if(X>=8)        {            X=0;        }        while(i--);//while延时程序    }}

1.3 使用库函数法

#include<reg52.h>         #include<intrins.h>void main(){    unsigned int X=0;     int i=5000;     P2=0x01;     while(1)        {            while(i--);            P2=_crol_(P2,1);//无符号字符型左移,第一个变量:要被左移的数据;第二个变量:挪动位数        }}

1.4 使用数组法

#include<reg52.h>         #include<intrins.h>void main(){    unsigned char X;    int i=5000;     unsigned char code led[8]={0XFE,0XFD,0XFB,0XF7,0XEF,0XDF,0XBF,0X7F};    while(1)        {            while(i--);            P2=led[X++];            if(X>=8)            {                X=0;            }        }}

2、后果