目录

  • 1. LED
    • 1.1.什么是LED?
    • 1.2.LED的种类
    • 1.3.LED的主要参数
    • 1.4.LED的主要特性
    • 1.5.LED引脚极性识别方法
    • 1.6.电压控制型和闪烁型LED
  • 2.单片机控制LED
    • 2.1.点亮一个LED
      • 2.1.1程序的编写
      • 2.1.2程序的编译
      • 2.1.3.程序的烧录
    • 2.2.闪烁灯
      • 2.2.1.延时函数
      • 2.2.2.闪烁灯的实现
    • 2.3.流水灯

1. LED

1.1.什么是LED?

LED(light-emitting diode),即发光二极管,俗称LED小灯,是一种由磷化镓(GaP)等半导体材料制成的、能直接将电能转变成光能的发光显示件。当LED内部有一 定电流通过时,它就会发光,不同LED能发出不同颜色的光,常见的有红色、黄色等,如图:

关于LED外形特征主要说明下列几点。
(1)单色LED的外壳颜色表示了它的发光颜色。LED的外壳是透明的。
(2)单色LED只有两根引脚,这两根引脚有正、负极之分。多色的LED为 3 根引脚。
(3)LED外形很有特色,所以可以方便地识别出LED。

1.2.LED的种类

1.3.LED的主要参数

  1. 电参数
    (1)正向工作电流IF。它是指发光二极管正常发光时的正向电流值。发光二极管工作电流一般为 10~20mA。
    (2)正向工作电压UF。它是在给定正向电流下的发光二极管两端正向工作电压。一般是在 IF=20mA 时测量,发光二极管正向工作电压为 1.4~3V 。外界温度升高时,发光二极管正向工作电压会下降。
    (3)伏 - 安特性。它是指发光二极管电压 与电流之间的关系。

  2. 极限参数
    (1)允许功耗 Pm。它是允许加于发光二极管两端正向直流电压与流过它的电流之积的最大值,超过此值时发光二极管发热、损坏。
    (2)最大正向直流电流 IFm。它是允许加的最大正向直流电流,超过此值会损坏二极管。
    (3)最大反向电压 URm。它是所允许加的最大反向电压,超过此值发光二极管可能被击 穿损坏。
    (4)工作环境 topm。它是发光二极管可正常工作的环境温度范围。低于或高于此温度范围,发光二极管将不能正常工作,效率大大降低。

1.4.LED的主要特性

  1. 伏 - 安特性
    LED与普通二极管的伏 - 安特性相似,只是LED的正向导通电压值较大。 小电流LED的反向击穿电压很小,为 6V 至十几伏,比普通二极管的小。下图所示是LED正向伏 - 安特性曲线。

下图是LED伏 - 安特性曲线, 它含正向和反向特性。LED具有与一般半导体三极管相似的输入伏 - 安特性曲线。

关于伏 - 安特性曲线各区段说明如下。
(1)OA 段。这是正向死区。UA 为开启LED发光的电压。
(2)AB 段。这是工作区。在这一区段, 一般是随着电压增加电流也跟着增加, 发光亮度也跟着增大。

在这个区段内要特别注意,如果不加任何保护,当正向电压增加到一定值后, 那么LED的正向电压减小,而正向电流加大。 如果没有保护电路,会因电流增大而烧坏LED。

(3)OC 段。这是反向死区,发光二极管加反向电压是不发光的(不工作),但有反向电流。这个反向电流通常很小,一般在几微安之内。在 1990~1995 年,反向电流定为 10μA; 在 1996~2000 年,反向电流定为 5μA,目前反向电流一般是在 3μA 以下,但是基本上是 0μA。
(4)CD 段。这是反向击穿区,LED的反向电压一 般不要超过10V,最大不得超过 15V。超过这个电压,就会出现反向击穿,导致发光二极管报废。

在这个区段,LED存在较大的反向击穿电流(为几毫安)。这种击穿不是热击穿,不会损坏,一部分交流插座、 交流电源开关上的交流指示灯就是采用LED,在交流电的负半周期间LED就是工作在这一区段。

  1. 正向电阻和反向电阻特性
    LED正向和反向电阻均比普通二极管的大得多,了解这一点对检测二极管有重要指导意义。
  2. 工作电流与发光相对强度关系
    下图所示是发光二极管工作电流与发光相对强度关系特性曲线。对于红色LED 而言,正向工作电流增大时发光相对强度也在增大,当工作电流大到一定程度后,曲线趋于平坦(饱和),说明发光相对强度趋于饱和;对于绿色LED而言,工作电流增大,发光相对强度增大,但是没有饱和现象。
  3. 发光强度与环境温度关系
    下图所示是发光二极管发光强度与环境温度关系特性曲线。温度愈低,发光强度愈大。 当环境温度升高后,发光强度将明显下降。

    5.最大允许工作电流与环境温度关系
    下图所示是最大允许工作电流与环境温度关系特性曲线。当环境温度大到一定程度后, 最大允许工作电流迅速减小,最终为零,说明在环境温度较高场合下,LED更容易损坏,这也是LED怕烫的原因。

    6.其他特性曲线

1.5.LED引脚极性识别方法

为了不影响LED的正常发光, 在外壳上不标出型号和极性。所以识别LED正、负引脚主要靠外形特征和万用表的检测来进行。

  1. 引脚长短识别方法
    下图是用引脚长短区别正、负极性引脚的LED,它的两根引脚一长一短, 长的一根是正极,短的为负极。
  2. 突键方式识别方法
    下图所示是突键方式表示正极性引脚方法,LED底座上有一个突键,靠 此键最近的一根引脚为正极。
  3. 3 根引脚LED引脚识别方法
    下图所示是一种 3 根引脚LED引脚分布规律和内电路示意图。内设两只不同 颜色发光二极管。K 为共同引脚。
    下图是另一种 3 根引脚的变色LED引脚识别方法示意图,它有一个突键,根据它的这一外形特征可以方便地确定各引脚。
  4. 6 根引脚LED引脚识别方法
    下图所示是 6 根引脚LED引脚分布规律和内电路示意图。它内有两组 3 根引脚的LED。

1.6.电压控制型和闪烁型LED

  1. 电压控制型LED
    LED本身属于电流控制型器件,即有电流流过时它会发光,在使用时需串接适当阻值的限流电阻,为了使用的方便将LED和限流电阻制作为一体,使用时可直接并接在电源两端,这样形成了电压控制型LED。下图所示是电压控制型LED实物图和内电路。 电压控制型LED的发光颜色有红、 黄、绿等,工作电压有 5V、9V、12V、18V、 19V、24V 共 6 种规格,常用的是 BTV 系列。

  2. 闪烁型LED
    闪烁型LED是一种由 CMOS 集成电路和LED组成的特殊发光器件。下图所示是闪烁型LED实物图和内电路,它可用于报警指示及欠压、超压指示等。

    下图是闪烁型LED内电路方框图。闪烁型LED在使用时,无须外接其他元器件,只要在其引脚两端加上适当的直流工作电压(5V)即可闪烁发光,常用的闪烁型发光二极管是 BTS 系列。

2.单片机控制LED

写了那么多的LED介绍,我们对LED应该有了一个清楚的认识,现在我们开始对单片机编写程序来控制LED。

2.1.点亮一个LED

2.1.1程序的编写

首先我们在Proteus 8 Professional中搭建一个如图所示的电路原理图

图中的R1为限流电阻,防止电流过大导致LED损坏。

然后开始写程序。如果学过c语言的话,应该可以轻松编程,如果没有学过的话也没关系,先照着抄。

#include<reg52.h>     // 包含特殊功能寄存器定义的头文件sbit LED = P2^3 ;     // 位地址的声明 ,注意:sbit 必须小写 ,P必须大写void main()            // 任何一个c程序都必须有且仅有一个 main 函数
{                     // {} 是成对出现的,在这里表示程序的起始和结束LED = 0 ;         // 分号表示一条语句结束,"1"表示高电平,"0" 表示低电平
}

先对程序的语法进行分析:
(1)main 是主函数的函数名字,每个c程序都必须有且仅有一个 main 函数。
(2)void 是函数的返回类型,本程序没有返回值,用void 表示。
(3){} 在这里是函数开始和结束的标志,不可省略。
(4)每条c语句以分号(;)结束。
从逻辑上来看,程序这样写就搞定了,但是在实际单片机应用中会存在一个问题。比如程序空间可以容纳1000行代码,但是实际上的程序只用了100行代码,当运行完了100行,在继续运行下去时,第101行的程序不是自己想运行的程序,而是一个未知内容,一旦执行下去程序可能会出错,从而可能导致单片机自动复位,所以通常在程序中加入一个死循环,让程序停留在所希望的这个状态下,不要乱运行,有下列两种方法可以参考:
方法一:

#include<reg52.h>sbit LED = P2^3 ;void mian()
{while(1){LED = 0 ;}
}

方法二:

#include<reg52.h>sbit LED = P2^3 ;void mian()
{LED = 0 ;while(1) ;
}

程序(1)的功能是不断反复的执行"LED = 1"这句语句,程序(2)的功能是在执行完"LED = 1"后停下来等待。

2.1.2程序的编译

程序编写好后,要对程序进行编译,生成.hex文件就可以将程序烧录到单片机里面,在编译之前,需要先勾选一个选项,单击工程(Project)-> 为目标“目标1”设置选项…(Options for Target ‘Target1’…)如图:

或者直接点击如图所示的框内的快捷图标

在弹出的对话框中,单击Output选项页,勾选其中的Create HEX File ,然后单击确定(OK)按钮即可,如图:

设置好之后,单击工程(Project)-> 编译(rebuild all target files) ,或单击下图所示的快捷图标即可
编译完成之后,在Keil下方的输出(Output)窗口会出现相应的提示,如图:
data = 9.0,指的是程序使用了单片机内部256字节RAM资源中的9个字节。
code = 18 的意思是使用了8K代码Flash 资源中的18个字节。
当提示“ 0 Error(s) ,Warning(s) ”表示程序没有错误和警告,就会出现“ creating hex file from “LED”… ”,意思是从当前工程中生成了一个HEX文件,要下载到单片机上的就是这个HEX文件。如果出现有错误和警告的提示的话,就是 Error 和 Warning 不是0,那么就要对程序进行检查,找出了问题,解决好了再进行编译产生 HEX 才可以。
到此,程序就编译成功了,之后就是把程序烧录到单片机里面。

2.1.3.程序的烧录

如果没有硬件设备的小伙伴可以使用Proteus 8 Professional来对程序进行模拟仿真。
在Proteus 8 Professional中双击需要烧录程序的单片机,点击文件夹的图标,找到编译的 . hex 文件,点击打开即可,如图:


然后即可开始仿真。

如果有硬件设备的小伙伴,可以使用 STC-ISP ——STC系列单片机下载软件,将程序烧录到开发板中,如图:
注意:因为STC系列单片机需要冷启动下载(就是先点击下载,然后再给单片机供电),所以先关闭开发板上的电源开关,然后单击下载(Download)按钮,再给开发板上电,就可以把程序烧录到单片机里面了。
上图显示操作成功即表示程序已经烧录到单片机里面了。

上图为仿真软件中的仿真结果。
至此,点亮一个LED的实验就完成了。

2.2.闪烁灯

在2.1.中点亮一个LED就是令“LED = 0”即可,熄灭一个LED的程序也很简单就令“LED = 1”。现在熄灭和点亮都会了,那么如何让LED闪烁呢?也很简单,在点亮后延迟几秒再熄灭,不断重复即可。

2.2.1.延时函数

实现延时通常有两种方法:一种是硬件延时,要用到定时器/计数器,这种方法可以提高CPU的工作效率,也能做到精确延时;另一种是软件延时,这种方法主要采用循环体进行。在此我们主要研究软件延时。

在很多情况下,定时器/计数器经常被用作其他用途,这时候就只能用软件方法延时。下面介绍几种软件延时的方法。
方法一:
短暂延时:可以在C文件中通过使用带_NOP_( )语句的函数实现,定义一系列不同的延时函数,如Delay10us( )、Delay25us( )、Delay40us( )等存放在一个自定义的C文件中,需要时在主程序中直接调用。如延时10 μs的延时函数可编写如下:

void Delay10us()
{_NOP_( ) ;_NOP_( ) ;_NOP_( ) ;_NOP_( ) ;_NOP_( ) ;_NOP_( ) ;
}

Delay10us( )函数中共用了6个_NOP_( )语句,每个语句执行时间为1 μs。主函数调用Delay10us( )时,先执行一个LCALL指令(2 μs),然后执行6个_NOP_( )语句(6 μs),最后执行了一个RET指令(2 μs),所以执行上述函数时共需要10 μs。
方法二:
循环空语句延时:在程序中编写一个空的循环语句,让单片机在空循环中“发呆”。编写大约1ms的代码如下:

void delay_ms(int n)
{int i , j ;for( i = 0 ; i < n ; i ++ ){for( j = 0 ; j < 123 ; j ++) ;}
}

在 n 为1时,该代码大概运行1ms左右。
该延时方法在非精确延时是最常用的方法。
或者两者都使用:

void Delay1ms()      //@11.0592MHz 晶振为11.0592MHz
{unsigned char i, j;_nop_();i = 2;j = 199;do{while (--j);} while (--i);
}

2.2.2.闪烁灯的实现

我们已经掌握了延时函数的写法,就可以开始写闪烁灯了。
电路原理图和2.1的一样,代码如下:

#include<reg52.h>     // 包含特殊功能寄存器定义的头文件sbit LED = P2^3;     // 位地址的声明 ,注意:sbit 必须小写 ,P必须大写void delay_ms(int n)    // 延时函数 大概延时 n ms
{int i , j ;              // 定义两个整型变量 i,jfor( i = 0 ; i < n ; i ++ ){for( j = 0 ; j < 123 ; j ++ ) ;          }
}void main()              // 任何一个c程序都必须有且仅有一个 main 函数
{                     // {} 是成对出现的,在这里表示程序的起始和结束while(1){LED = 1 ;    // 分号表示一条语句结束  "1"表示高电平,"0" 表示低电平delay_ms( 10 ) ;LED = 0 ;delay_ms( 10 ) ;}
}

上述程序的仿真视频链接

2.3.流水灯

顾名思义,流水灯就是要灯向流水一样逐个点亮,逐个熄灭。
我们先在Proteus 8 Professional中建立如下原理图:

图中所示的LED公共端为GND(低电平),所以程序要使P1口输出高电平,才可以点亮LED。
代码如下:

#include<reg52.h>          //此文件中定义了单片机的一些特殊功能寄存器
#define uchar unsigned char   //对数据类型进行声明定义
#define uint unsigned int     //对数据类型进行声明定义void delay(uint n)       // 延时函数,大约延时 n ms
{uchar i,j;     //定义无符号的字符型变量  unsigned char 的数据范围为0~255(2^8 - 1)for(i = 0 ; i < n ; i ++){for(j = 0 ; j < 123 ; j ++);}
}void main()
{P1 = 0x00; //0000 0000     初始化P1端口,使之输出低电平while(1){P1 = 0x01 ;   //0000 0001   即P0^0为高电平,其余为低电平delay(200) ;P1 = 0x02 ;  // 0000 0010   即P0^1为高电平,其余为低电平delay(200) ;P1 = 0x04 ;     // 0000 0100    即P0^2为高电平,其余为低电平delay(200) ;P1 = 0x08 ;  // 0000 1000   即P0^3为高电平,其余为低电平delay(200) ;P1 = 0x10 ;     // 0001 0000    即P0^4为高电平,其余为低电平delay(200) ;P1 = 0x20 ;      //0010 0000    即P0^5为高电平,其余为低电平delay(200) ;P1 = 0x40 ;     // 0100 0000    即P0^5为高电平,其余为低电平delay(200) ;P1 = 0x80 ;  // 1000 0000   即P0^6为高电平,其余为低电平delay(200) ;}
}

或者使用左移的方式来进行编写

void main()
{uint i ;     //定义无符号的整型变量  unsigned int 的数据范围为 0~65535(2^16 - 1)P1 = 0x00; //0000 0000     初始化P1端口,使之输出低电平while(1)  // 死循环(无限循环下去没有尽头){for( i = 0 ; i < 8 ; i ++ ){P1 = ( 0x01 << i ) ;  // i = 1 时向左移动1位;i = 2 时向左移动2位 ... 当 i= 8 时停止循环 for 函数结束 。delay(200) ;}}
}

上述程序的仿真视频链接

这里是引用程序的左移右移是指变量的8位二进制数依次向左移一位,或向右移一位然后在高位或低位补0。比如,取8位数,让0000 0001循环左移一位,就是0000 0010。

51单片机入门——LED灯相关推荐

  1. 51单片机入门————LED灯的控制

    LED的电路图 通过原理图看出,LED灯是接单片机芯片的P20~P27的 一共有8个LED,51单片机也是8字节的 P2=0x01 0xFE----1111 1110 P2=0xFE可以表示把在P2端 ...

  2. 51单片机 PWM LED灯亮度调节+Proteus仿真

    51单片机 PWM LED灯亮度调节+Proteus仿真 Proteus仿真 实例代码 #include "reg51.h" unsigned int cd,dd; unsigne ...

  3. 51单片机之LED灯

    文章目录 前言 一.原理图 二.程序 1.电路分析 2.代码 3.代码(改进) 前言 本文记录的是51单片机点亮LED灯,程序是LED流水灯.有两个方法供大家参考. 开发板:郭天祥51单片机 一.原理 ...

  4. 51单片机控制LED灯

    个人网站:Geek交流圈 控制单个LED灯 基础知识 C-51的数据类型扩充定义sfr:特殊功能寄存器声明sbit:特殊功能位声明bit:位变量声明 例:sfr SCON = 0X98;sbit OV ...

  5. 51单片机入门 - 流水灯 和 呼吸灯

    本文编程环境在 51单片机开发环境搭建 - VS Code 从编写到烧录 有过介绍.使用 VS Code + SDCC + stcgal. 关于软硬件的信息: Windows 10 STC89C52R ...

  6. 基于51单片机的led灯控制小实验

    该小实验是为了更好的理解51单片机的使用,其完成的要求如下: 1.第一个键控制两个灯的翻转; 2.第二个键控制一个灯的翻转; 3.第三个键接在51单片机的外部中断口,每检测到一次,翻转三下; 4.第四 ...

  7. 一、51单片机控制LED 灯

    1.目标分析 通过51单片机控制8个LED灯依次点亮,形成流水灯. 2.原理图分析 2.1. 74HC573芯片 (1) LED控制涉及到74HC573芯片,上图中的U13.想知道该芯片如何工作的,应 ...

  8. 51单片机实验——LED灯(点亮、闪烁、流水)

    文章目录 前言 一.keil创建工程 二.proteus professional搭建仿真电路 三.点亮LED灯 四.闪烁LED灯 五.流水式LED灯 总结 前言 STC89C51RC是采用8051核 ...

  9. 51单片机(LED灯)

    led点亮原理 led的工作是有方向性的,只有正极接到阳极上,负极接到阴极上,led灯中才会有电流通过,否则,led是不会亮的. 电源接到vcc上,要使led发光,就要给p2管脚赋低电平,即 p2 = ...

  10. 51单片机控制LED灯显示模式

    1.在交通灯控制系统的基础上修改硬件电路 2.AT89C51单片机的P1口接8个独立按键,P0口接8个LED灯,led等的上拉电阻改用排阻,设计硬件电路. 3.编写程序,实现基本要求:当P1.0键按下 ...

最新文章

  1. 算法——遗传算法基础
  2. php sql漏洞修复,php sql注入漏洞与修复
  3. html字体整体偏移,html/css:在悬停鼠标时增加字体大小的链接时的位置偏移
  4. 1.cocos2dx内存管理和CCArray,CCMenuItem
  5. 【个人网盘-updog】使用updog建立个人网盘,so easy
  6. php中的__FUNCTION__
  7. 子慕谈设计模式系列(二)——设计模式六大原则
  8. 【PyQt5 知识点示例代码】布局、菜单、信号与槽、对话框、组件
  9. leetcode Largest Rectangle in Histogram 单调栈
  10. Atitit android app 最佳实践2021目录1. Android strudio,,and viruse machine need down another... 11.1. P
  11. 计算机汉字五笔输入法,《计算机汉字输入五笔字型打字速成》.pdf
  12. VC++内存泄漏检测工具VLD使用方法
  13. 深信服虚拟服务器大融合,从虚拟化向云计算转型 深信服选择了超融合
  14. linux代码之atomic
  15. 【烙铁使用规范】—— 延长无铅手工焊接工艺中烙铁头的寿命
  16. 商代王后妇好、玉器及特展相关资料整理
  17. Nginx/PHP安装
  18. 微信支付报出 商户订单号重复 错误问题
  19. 谷歌神经网络框架怎么用,谷歌神经网络框架下载
  20. 紧急求助:Captivate发布后没有声音

热门文章

  1. 【go1.18】error obtaining VCS status: exit status
  2. 网页视频怎么录制?这两个方法操作简单,录制高清!
  3. GLFWError #65542 Happen, WGL: The driver does not appear to support OpenGL的问题处理经历
  4. Pytorch:VGG16
  5. 【LED灯屏控制器】AG10K 烧录程序(2)
  6. android 补间动画停止,Android动画原理分析(一)---补间动画
  7. Android 10.0在电话拨号盘(Dialer app中)通过暗码进入工厂测试模式
  8. uniapp实现拨打电话跳转手机拨号盘
  9. 第九篇:ROS的gazebo三维物理仿真环境联合使用
  10. c语言三角形的周长和面积公式,计算三角形的周长和面积