51单片机入门 | 您所在的位置:网站首页 › led定义 › 51单片机入门 |
目录
1. LED1.1.什么是LED?1.2.LED的种类1.3.LED的主要参数1.4.LED的主要特性1.5.LED引脚极性识别方法1.6.电压控制型和闪烁型LED
2.单片机控制LED2.1.点亮一个LED2.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)正向工作电流IF。它是指发光二极管正常发光时的正向电流值。发光二极管工作电流一般为 10~20mA。 (2)正向工作电压UF。它是在给定正向电流下的发光二极管两端正向工作电压。一般是在 IF=20mA 时测量,发光二极管正向工作电压为 1.4~3V 。外界温度升高时,发光二极管正向工作电压会下降。 (3)伏 - 安特性。它是指发光二极管电压 与电流之间的关系。 极限参数: (1)允许功耗 Pm。它是允许加于发光二极管两端正向直流电压与流过它的电流之积的最大值,超过此值时发光二极管发热、损坏。 (2)最大正向直流电流 IFm。它是允许加的最大正向直流电流,超过此值会损坏二极管。 (3)最大反向电压 URm。它是所允许加的最大反向电压,超过此值发光二极管可能被击 穿损坏。 (4)工作环境 topm。它是发光二极管可正常工作的环境温度范围。低于或高于此温度范围,发光二极管将不能正常工作,效率大大降低。 1.4.LED的主要特性 伏 - 安特性 LED与普通二极管的伏 - 安特性相似,只是LED的正向导通电压值较大。 小电流LED的反向击穿电压很小,为 6V 至十几伏,比普通二极管的小。下图所示是LED正向伏 - 安特性曲线。![]() 下图是LED伏 - 安特性曲线, 它含正向和反向特性。LED具有与一般半导体三极管相似的输入伏 - 安特性曲线。 在这个区段内要特别注意,如果不加任何保护,当正向电压增加到一定值后, 那么LED的正向电压减小,而正向电流加大。 如果没有保护电路,会因电流增大而烧坏LED。 (3)OC 段。这是反向死区,发光二极管加反向电压是不发光的(不工作),但有反向电流。这个反向电流通常很小,一般在几微安之内。在 1990~1995 年,反向电流定为 10μA; 在 1996~2000 年,反向电流定为 5μA,目前反向电流一般是在 3μA 以下,但是基本上是 0μA。 (4)CD 段。这是反向击穿区,LED的反向电压一 般不要超过10V,最大不得超过 15V。超过这个电压,就会出现反向击穿,导致发光二极管报废。 在这个区段,LED存在较大的反向击穿电流(为几毫安)。这种击穿不是热击穿,不会损坏,一部分交流插座、 交流电源开关上的交流指示灯就是采用LED,在交流电的负半周期间LED就是工作在这一区段。 正向电阻和反向电阻特性 LED正向和反向电阻均比普通二极管的大得多,了解这一点对检测二极管有重要指导意义。工作电流与发光相对强度关系 下图所示是发光二极管工作电流与发光相对强度关系特性曲线。对于红色LED 而言,正向工作电流增大时发光相对强度也在增大,当工作电流大到一定程度后,曲线趋于平坦(饱和),说明发光相对强度趋于饱和;对于绿色LED而言,工作电流增大,发光相对强度增大,但是没有饱和现象。![]() ![]() ![]() 为了不影响LED的正常发光, 在外壳上不标出型号和极性。所以识别LED正、负引脚主要靠外形特征和万用表的检测来进行。 引脚长短识别方法 下图是用引脚长短区别正、负极性引脚的LED,它的两根引脚一长一短, 长的一根是正极,短的为负极。![]() ![]() ![]() ![]() ![]() 电压控制型LED LED本身属于电流控制型器件,即有电流流过时它会发光,在使用时需串接适当阻值的限流电阻,为了使用的方便将LED和限流电阻制作为一体,使用时可直接并接在电源两端,这样形成了电压控制型LED。下图所示是电压控制型LED实物图和内电路。 电压控制型LED的发光颜色有红、 黄、绿等,工作电压有 5V、9V、12V、18V、 19V、24V 共 6 种规格,常用的是 BTV 系列。 闪烁型LED 闪烁型LED是一种由 CMOS 集成电路和LED组成的特殊发光器件。下图所示是闪烁型LED实物图和内电路,它可用于报警指示及欠压、超压指示等。 写了那么多的LED介绍,我们对LED应该有了一个清楚的认识,现在我们开始对单片机编写程序来控制LED。 2.1.点亮一个LED 2.1.1程序的编写首先我们在Proteus 8 Professional中搭建一个如图所示的电路原理图 然后开始写程序。如果学过c语言的话,应该可以轻松编程,如果没有学过的话也没关系,先照着抄。 #include // 包含特殊功能寄存器定义的头文件 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 sbit LED = P2^3 ; void mian() { while(1) { LED = 0 ; } }方法二: #include 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’…)如图: 如果没有硬件设备的小伙伴可以使用Proteus 8 Professional来对程序进行模拟仿真。 在Proteus 8 Professional中双击需要烧录程序的单片机,点击文件夹的图标,找到编译的 . hex 文件,点击打开即可,如图: 如果有硬件设备的小伙伴,可以使用 STC-ISP ——STC系列单片机下载软件,将程序烧录到开发板中,如图: 上图为仿真软件中的仿真结果。 至此,点亮一个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 unsigned char i, j; _nop_(); i = 2; j = 199; do { while (--j); } while (--i); } 2.2.2.闪烁灯的实现我们已经掌握了延时函数的写法,就可以开始写闪烁灯了。 电路原理图和2.1的一样,代码如下: #include // 包含特殊功能寄存器定义的头文件 sbit LED = P2^3; // 位地址的声明 ,注意:sbit 必须小写 ,P必须大写 void delay_ms(int n) // 延时函数 大概延时 n ms { int i , j ; // 定义两个整型变量 i,j for( i = 0 ; i // {} 是成对出现的,在这里表示程序的起始和结束 while(1) { LED = 1 ; // 分号表示一条语句结束 "1"表示高电平,"0" 表示低电平 delay_ms( 10 ) ; LED = 0 ; delay_ms( 10 ) ; } }上述程序的仿真视频链接 2.3.流水灯顾名思义,流水灯就是要灯向流水一样逐个点亮,逐个熄灭。 我们先在Proteus 8 Professional中建立如下原理图: 或者使用左移的方式来进行编写 void main() { uint i ; //定义无符号的整型变量 unsigned int 的数据范围为 0~65535(2^16 - 1) P1 = 0x00; //0000 0000 初始化P1端口,使之输出低电平 while(1) // 死循环(无限循环下去没有尽头) { for( i = 0 ; i |
CopyRight 2018-2019 实验室设备网 版权所有 |