51单片机点亮流水灯的几种方法

180it 2022-03-20 PM 928℃ 0条

51单片机点亮流水灯的几种方法

  1. 直接按位操作一个一个点亮

    #include<reg51.h>//头文件
    sbit LED0=P2^0; //位定义单片机接LED灯的端口
    sbit LED1=P2^1;
    sbit LED2=P2^2;
    sbit LED3=P2^3;
    sbit LED4=P2^4;
    sbit LED5=P2^5;
    sbit LED6=P2^6;
    sbit LED7=P2^7;
    void delay()//延时函数
    {

     unsigned char a,b;
     for(a=0;a<200;a++)
     for(b=0;b<200;b++);

    }
    void main()//主函数
    {

     while(1)
     {
     LED0=0;//第一个灯亮
     delay();//延时
     LED0=1;//第一个灯灭 以下以此类推
     
     LED1=0;
     delay();
     LED1=1;
    
     LED2=0;
     delay();
     LED2=1;
     
     LED3=0;
     delay();
     LED3=1;
     
     LED4=0;
     delay();
     LED4=1;
     
     LED5=0;
     delay();
     LED5=1;
     
     LED6=0;
     delay();
     LED6=1;
     
     LED7=0;
     delay();
     LED7=1; 
     }  

    }

2 利用数组结合for循环点亮流水灯

#include<reg51.h>//头文件
unsigned char table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
                       //将8个LED灯亮放在一个数组中
void delay()//延时函数
{
    unsigned char a,b;
    for(a=0;a<200;a++)
    for(b=0;b<200;b++);
}
void main()//主函数
{
    unsigned char i;
    while(1)
    {
    for(i=0;i<8;i++)
    {
    P2=table[i];//for循环将LED灯显示出来
    delay(); //延时
    }
    }
}

3 利用左移符号<<实现流水灯显示

#include<reg51.h>//头文件
#define uchar unsigned char//宏定义用uchar表示unsigned char
#define uint unsigned int //宏定义用uint表示unsigned int
void delay()//延时函数
{
    unsigned char a,b;
    for(a=0;a<200;a++)
    for(b=0;b<200;b++);
}
void main()//主函数
{
    uchar k,i;
    while(1)
    {
    k=0xfe;//11111110 <<
    for(i=0;i<8;i++)
    {
    P2=k;
    delay();//延时
    k=k<<1;  //11111100    <<左移运算符,左移后最右边补0
    k=k|0x01;//00000001 |按位或,把最低位置变1
    }        //11111101
    }         //11111010
    

     //00000001
         //11111011

}

4 利用循环函数实现流水灯

#include<reg51.h>//头文件
#include<intrins.h>//循环函数所在的库
#define uchar unsigned char//宏定义用uchar表示unsigned char
#define uint unsigned int  //宏定义用uint表示unsigned int
void delay() //延时函数
{
    unsigned char a,b;
    for(a=0;a<200;a++)
    for(b=0;b<200;b++);
}
void main()//主函数
{
    uchar k;
    k=0xfe;
    while(1)
    {
    P2=k;
    delay();
    k=_crol_(k,1);//11111110
    }              //11111101 
     //_crol_(a,b) 循环左移函数,a是代表左移的值,b是代表左移的位数
      //_cror_(a,b) 循环右移函数,a是代表右移的值,b是代表右移的位数
}

注:

该程序51单片机开发板P2口接的是8位跑马灯
该程序51单片机开发板中LED位低电平驱动,即为0是灯亮

支付宝打赏支付宝打赏 微信打赏微信打赏

如果文章或资源对您有帮助,欢迎打赏作者。一路走来,感谢有您!

标签: none

51单片机点亮流水灯的几种方法