天天看點

51單片機LED流水燈左右循環移動

#include <reg52.h>  //特殊功能寄存器頭檔案

sbit ADDR0 = P1^0;    //位聲明

sbit ADDR1 = P1^1;

sbit ADDR2 = P1^2;

sbit ADDR3 = P1^3;

sbit ENLED = P1^4;

void delay();

void main()

{

    unsigned char cnt=0,dir=0;

    ENLED = 0;

    ADDR3 = 1;

    ADDR2 = 1;

    ADDR1 = 1;

    ADDR0 = 0;

    while(1)

    {

       if(dir==0)          //dir=0時LED從左往右移動

       {

               P0 = ~(0x80>>cnt);

            if(P0== 0xfe) dir = 1;    

       }

       else                  //dir=1時LED從右往左移動

       {

               P0 = ~(0x01<<cnt);

            if(P0== 0x7f) dir = 0;    

       }

       delay();

       cnt++;              //計數值自加

       if(cnt>7) cnt=0;

    }

}

void delay()           //延時函數

{

    unsigned int i;

    for(i=0;i<20000;i++);

}