51单片机入门流水灯

简介: 51单片机入门流水灯

前言

上次已经实现了LED的点亮了,这篇文章将带大家实现流水灯。


一、延时函数

要想实现流水灯首先就得知道什么是延时函数,延时函数的作用就是等待。比如延时一毫秒就是让程序在这里等待一毫秒。延时函数的本质就是执行一些空指令,因为执行指令需要耗费时间,所以执行一定数量的空指令就能达到延时的效果。


延时函数的实现

这里的延时函数就是不断的在执行;表达式来达到延时的效果。

/*延时函数
单位:ms
x:延时的数值
*/
void delayms(unsigned int x)
{
   unsigned char i;
   while(x--)
   {
     for(i=0;i<113;i++);
   }
}

二、流水灯代码

下面就是流水灯的代码了,其实操作起来也是非常简单的。不过这样写一个流水灯看起来实在是太过于复杂了,下面将对代码进行整改。

#include <reg52.h>
/*LED灯端口定义*/
sbit LED0 = P2^0;
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;
/*延时函数
单位:ms
x:延时的数值
*/
void delayms(unsigned int x)
{
   unsigned char i;
   while(x--)
   {
     for(i=0;i<113;i++);
   }
}
void main()
{
  while(1)
  {
    LED0 = 0;
    delayms(1000);
    LED1 = 0;
    delayms(1000);
    LED2 = 0;
    delayms(1000);
    LED3 = 0;
    delayms(1000);
    LED4 = 0;
    delayms(1000);
    LED5 = 0;
    delayms(1000);
    LED6 = 0;
    delayms(1000);
    LED7 = 0;
    delayms(1000);
    LED0 = LED1 = LED2 = LED3 = LED4 = LED5 = LED6 = LED7 = 1;  
  }
}

三、代码改进

上篇文章我们已经讲到了8个LED灯分别接到了P2.0—P2.7上面。所以我们可以直接对P2端口进行操作实现点亮LED灯。

默认状态LED灯都为灭,也就是状态都为1。所以P2.0—P2.7的8个端口状态为

1111 1111。

我们只需要让其中一个位变成0即可让LED灯点亮。

对P2直接进行操作让第一个LED灯点亮就是对P2赋值如下:

1111 1110

换成16进制也就是0xfe

下面的代码就可以点亮第一个LED了

P2 = 0xfe;

所以可以直接对P2进行操作达到流水灯的效果。

#include <reg52.h>
/*延时函数
单位:ms
x:延时的数值
*/
void delayms(unsigned int x)
{
   unsigned char i;
   while(x--)
   {
     for(i=0;i<113;i++);
   }
}
void main()
{
  int i = 0;
  while(1)
  {
    for(i = 0; i < 8; i ++ )
    {
      P2 = ~(1<<i);
      delayms(1000);
    }
  }
}

板子上面有8个LED灯,所以这里设计了一个for循环。利用左移操作和取反操作实现了流水灯的效果。

简单解释一下这个for循环实现流水灯的原理

一开始i=0 P2 = ~(1<<0)相当于是1111 1110

i = 2时P2 = ~(1<<1)相当于是1111 1101

后面的以此类推,这里0移到到了哪里哪个LED就会被点亮了。

对左移和取反操作还不熟悉的同学建议去加强一下C语言的知识。


总结

流水灯的点亮就介绍到这里了,大家主要是掌握sbit位定义和直接操作P2进行流水灯的点亮。


相关文章
|
2月前
|
数据格式
用C51单片机制作LED流水的灯
用C51单片机制作LED流水的灯
46 0
|
10天前
|
存储 自然语言处理 编译器
振南技术干货集:振南当年入门C语言和单片机的那些事儿(3)
振南技术干货集:振南当年入门C语言和单片机的那些事儿(3)
|
1天前
|
编译器 C语言 C++
【51单片机】LED的三个基本项目(LED点亮&LED闪烁&LED流水灯)(3)
【51单片机】LED的三个基本项目(LED点亮&LED闪烁&LED流水灯)(3)
【单片机】延迟程序&延迟子程序的设计(入门)
【单片机】延迟程序&延迟子程序的设计(入门)
|
3天前
|
存储 传感器 数据处理
单片机编程入门与实践
单片机编程入门与实践
15 2
|
10天前
|
算法 C语言 芯片
振南技术干货集:振南当年入门C语言和单片机的那些事儿(1)
振南技术干货集:振南当年入门C语言和单片机的那些事儿(1)
定时器+按键控制LED流水灯模式+定时器时钟——“51单片机”
定时器+按键控制LED流水灯模式+定时器时钟——“51单片机”
|
15天前
|
C语言
点亮一个LED+LED闪烁+LED流水灯——“51单片机”
点亮一个LED+LED闪烁+LED流水灯——“51单片机”
|
2月前
|
C语言
###51单片机学习-----如何通过C语言运用延时函数设计LED流水灯
###51单片机学习-----如何通过C语言运用延时函数设计LED流水灯
73 0
|
10月前
|
芯片
51单片机--点亮LED灯和流水灯
51单片机--点亮LED灯和流水灯
116 0