51单片机-流水灯代码编写教程

我们将单片机中的LED灯以流水的形式进行闪烁。首先,我们需要定义8个LED灯的引脚。根据单片机的原理图,LED的引脚为P2^0 到P2^7。代码中声明如下:


sbit LED1 = P2^0;
sbit LED2 = P2^1;
sbit LED3 = P2^2;
sbit LED4 = P2^3;
sbit LED5 = P2^4;
sbit LED6 = P2^5;
sbit LED7 = P2^6;
sbit LED8 = P2^7;

接下来,我们编写LED灯流水线的代码。我们定义一个方法`style_1`,然后在这个方法里面编写流水灯的代码。代码如下:

void style_1();

void style_1()
{
   LED1 = 0;
   LED2 = 0;
   Delay();
   LED1 = 1;
   LED2 = 1;
   LED3 = 0;
   LED4 = 0;
   Delay();
   
   LED3 = 1;
   LED4 = 1;
   LED5 = 0;
   LED6 = 0;
   Delay();
   LED5 = 1;
   LED6 = 1;
   LED7 = 0;
   LED8 = 0;
   Delay();
   LED7 = 1;
   LED8 = 1;
   Delay();
}

需要注意的是,为了展示视觉效果,我们在流水灯闪烁的时候添加了一个延时函数`Delay`。

void Delay();

void Delay()        //@11.0592MHz
{
    unsigned char data i, j, k;

    _nop_();
    _nop_();
    i = 5;
    j = 52;
    k = 195;
    do
    {
        do
        {
            while (--k);
        } while (--j);
    } while (--i);
}

最后,我们编写主函数,在主函数中调用`style_1`方法。完整的代码如下:


#include <regx51.h>

void Delay();
void style_1();

//声明1-8个LED灯
sbit LED1 = P2^0;
sbit LED2 = P2^1;
sbit LED3 = P2^2;
sbit LED4 = P2^3;
sbit LED5 = P2^4;
sbit LED6 = P2^5;
sbit LED7 = P2^6;
sbit LED8 = P2^7;

void Delay()        //@11.0592MHz
{
    unsigned char data i, j, k;

    _nop_();
    _nop_();
    i = 5;
    j = 52;
    k = 195;
    do
    {
        do
        {
            while (--k);
        } while (--j);
    } while (--i);
}

void style_1()
{
   LED1 = 0;    //第一个LED亮起
   LED2 = 0;    //第二个LED亮起
   Delay();    //延时,让其有视觉效果
   LED1 = 1;    //第一个LED熄灭
   LED2 = 1;    //第二个LED熄灭
   LED3 = 0;    //第三个LED亮起
   LED4 = 0;    //第四个LED亮起  以此类推
   Delay();
   
   LED3 = 1;
   LED4 = 1;
   LED5 = 0;
   LED6 = 0;
   Delay();
   LED5 = 1;
   LED6 = 1;
   LED7 = 0;
   LED8 = 0;
   Delay();
   LED7 = 1;
   LED8 = 1;
   Delay();
}

void main()
{
     while(1)
     {
         style_1();
     }
}

通过以上的代码,我们成功实现了LED灯的流水线效果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值