打印
[51单片机]

51单片机功能模块学习笔记 — 发光二极管

[复制链接]
748|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
nettui|  楼主 | 2019-4-17 21:35 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
1. 发光二极管简介 发光二极管是半导体二极管的一种,可以把电能转化成光能。常简写为LED(lightemittingdiode)。 发光二极管与普通二极管一样也具有单向导电性。当给发光二极管加上正向电压(大于LED的正向压降)就会发光,当给发光二极管加上负向电压就不会发光。发光二极管的发光 亮度与通过的工作电流成正比,一般情况下,LED的正向工作电流在10mA左右,若电流过大时会损坏LED,因此使用时必须串联限流电阻以控制通过管子的电流。限流电阻R可用下式计算:R=(E-UF)/IF 式中E为电源电压,UF为LED的正向压降,IF为LED的一般工作电流。 普通发光二极管的正向饱和压降为1.4~2.1V,正向工作电流为5~20mA.
2. 开发平台硬件连接原理



由以上的原理图,我们可以看出,八个发光二极管的左端连接到公共的电源。若是想要使得二极管发光,根据其单向导电性,我们应该在其右端的对应端口置“0”。

² 那么如何使得LED的端口置“0”呢?可以将如图所示的LED模块连接到单片机的四个I/O(P0、P1、P2、P3)中的任意一个,通过对于I/O的操作,来控制LED模块的亮灭。小平头技术问答https://www.xiaopingtou.cn/article-69514.html 例如,将上图的LED模块连接到单片机的P1口(基于开发板的各个模块都是独立模块的情况下)。从原理图上看,也就是将LED1~LED8连接到单片机的P1.0~P1.7口。那么,如果我们想要使得LED1点亮,就应该给单片机的P1.0口送“0”;如果我们想要点亮全部的灯,就应该将P1.0~P1.7空全部置“0”。弄懂了原理,下面来写程序^_^
  3.LED模块实验程序
² 程序一:点亮一个LED灯(分别利用位定义和直接对I/O空操作)

/*利用位定义的方法:点亮P1.0口,即LED1灯*/ 
#include <reg52.h>
sbit LED1 = P1^0; //定义LED1
void main() {
while(1)
{ LED1 = 0; //点亮LED1灯 }
}/* 直接对端口进行操作:点亮一个LED灯*/
#include <reg52.h>
void main()
{
while(1)
{ P0 = 0xfe; //1111 1110 }
}



² 程序二:使得一个LED灯闪烁(直接在程序一上修改)

#include <reg52.h> 
sbit LED1 = P1^0; //定义LED1
void delay(unsigned int i)
{ while(--i); }
void main() {
while(1)
{ LED1 = 0; //点亮LED1灯
delay(30000);
LED1 = 1; //熄灭LED1灯
delay(30000); }
}

² 8位LED灯循环左移

/* 利用查表的方法左移 */ 
void LiuShuiDeng()
{ unsigned char i;
for(i = 0;i < 8;i++)
{ LEDPORT = table;
delay_ms(200); }
}


² 8位LED灯循环右移

/* 利用C语言位定义的方法右移 */ 
void LedBlink()
{ unsigned char i,temp;
temp = 0x7f; //0111 1111
delay_ms(200);
for(i = 0;i < 8;i++)
{ temp = (temp>>1) | 0x80;
delay_ms(200);
LEDPORT = temp; }
}

使用特权

评论回复

相关帖子

沙发
请叫我树人| | 2019-4-19 09:02 | 只看该作者
感谢分享啊! 真是不错啊!

使用特权

评论回复
板凳
nettui|  楼主 | 2019-4-19 11:29 | 只看该作者
大家相互学习,共同进步

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

9

帖子

1

粉丝