51单片机--点亮LED灯和流水灯

简介: 51单片机--点亮LED灯和流水灯

前言

大家好,这里是诡异森林。我使用的是普中科技的A2的51开发板,适合新手入门。用到的应用是Keil5和Stc-isp,第一个软件主要用来写代码的,第二个是将代码程序输送到单片机上,当然上面还提供一些经常使用的函数模块。

LED模块的原理


上图是LED模块的原理图,LED是基于数字信号控制LED灯的亮灭。在这里,是一行由8个LED灯组成的模块。电流会向LED发送高电平信号,使LED处于熄灭状态,我们可以通过改变信号的状态来决定它的亮灭。

首先电路从正极(VCC)出发,然后通过一个1k欧的电阻(限流作用),然后流入发光二极管的正极,负极流出,最后到电路中的P2口。

这个P2口是与芯片链接的。

如上图,P2是寄存器,CPU可通过程序来直接控制寄存器;寄存器通过驱动器控制电压,当驱动器为1时,为高电平(5V),为0时低电平(0V),所以程序可以通过二进制1/0来控制电路的高低电平,进而控制LED的亮灭。

点亮一个LED灯

在电路中,能识别的信号就是正负极,我们用1/0的二进制数字信号来进行表示,在写程序中,习惯用16进制来进行表示。

当电路接通后,电路中的LED默认为高电平(1),我们需要把它改为低电平(0),LED灯才会被点亮,所以我们可以这么写:

#include <REGX52.H>
//这是一个51单片机的头文件
int main()
{
    P2=0xFE;//P2已被包含在文件中,表示寄存器,可控制LED
    //二进制为 1111 1110
}

效果:

LED灯的闪烁

我们可以通过程序让它不断形成高低电平,那么LED灯将会闪烁。所以可以用while循环,但这里要注意的是,由于led引脚的电平持续在0、1之间变化,变化频率非常快,在MHz量级,导致的结果就是百直接看不到灯闪烁。所以我们还需要一个延迟函数减缓它的闪烁频率。

#include <REGX52.H>
#include <INTRINS.H>//包括nop函数
void Delay500ms()   //@11.0592MHz
{
  unsigned char i, j, k;
  _nop_();//单周期指令,可由晶振频率来延迟时间
  i = 4;
  j = 129;
  k = 119;
  do
  {
    do
    {
      while (--k);
    } while (--j);
  } while (--i);
}
int main()
{
  while(1)
  {
    P2=0xFE;
    //亮 1111 1110
    Delay500ms();
    //延迟500毫秒
    P2=0xFF;
    //灭 1111 1111
    Delay500ms();
  }
}

LED流水灯

当我们明白这些原理之后,就可以通过控制每一个LED灯来跑流水灯了。

代码:

#include <REGX52.H>
void Delay1ms(unsigned int x)   //@11.0592MHz
{
  unsigned char i, j;
  while(x--)//可通过循环来延迟时间频率
  {
    i = 2;
    j = 199;
    do
    {
      while (--j);
    } while (--i);
  }
}
int main()
{
  int i;
  char hex[8]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};
  //写一个数组表示不同灯亮起
  while(1)
  {
    for( i=0;i<8;i++)
    {
      P2=hex[i];
      Delay1ms(500-50*i);
      //时间频率越来越快
    }
  }
}


相关文章
|
2月前
|
数据格式
用C51单片机制作LED流水的灯
用C51单片机制作LED流水的灯
46 0
定时器+按键控制LED流水灯模式+定时器时钟——“51单片机”
定时器+按键控制LED流水灯模式+定时器时钟——“51单片机”
|
13天前
|
C语言
独立按键控制LED亮灭、独立按键控制LED状态、独立按键控制LED显示二进制、独立按键控制LED移位——“51单片机”
独立按键控制LED亮灭、独立按键控制LED状态、独立按键控制LED显示二进制、独立按键控制LED移位——“51单片机”
|
13天前
|
C语言
点亮一个LED+LED闪烁+LED流水灯——“51单片机”
点亮一个LED+LED闪烁+LED流水灯——“51单片机”
|
2月前
51单片机实现led灯亮度变化!
51单片机实现led灯亮度变化!
12 0
|
2月前
|
传感器 物联网 C语言
单片机在智能家居中的应用:以LED灯控制为例
单片机在智能家居中的应用:以LED灯控制为例
56 0
单片机在智能家居中的应用:以LED灯控制为例
|
2月前
|
C语言
###51单片机学习-----如何通过C语言运用延时函数设计LED流水灯
###51单片机学习-----如何通过C语言运用延时函数设计LED流水灯
73 0
|
5月前
|
物联网
STC51单片机-实验开发装置仿真-物联网应用系统设计
STC51单片机-实验开发装置仿真-物联网应用系统设计
55 0
|
5月前
|
物联网
STC51单片机-控制LED闪亮的仿真-物联网应用系统设计
STC51单片机-控制LED闪亮的仿真-物联网应用系统设计
44 0
|
5月前
|
物联网 人机交互 开发工具
STC51单片机-阵列LED显示-物联网应用系统设计项目开发
STC51单片机-阵列LED显示-物联网应用系统设计项目开发
80 0