51单片机学习——LED灯

一、LED灯了解

1.LED灯简介

LED(Light Emitting Diode),发光二极管,是一种能够将电能转化为可见光的固态的半导体器件,它可以直接把电转化为光。LED的心脏是一个半导体的晶片,晶片的一端附在一个支架上,一端是负极,另一端连接电源的正极,使整个晶片被环氧树脂封装起来。

发光原理:LED内有一定电流通过时可以将电能转化成为光能。

2.LED的分类

(1)分类原理

LED的最小单元是发光二极管。发光二极管是区分正负极的,正向导通,反向截止。共阴极就是发光二极管的负极连接在一起,共阳极就是发光二极管的正极连接在一起。

(2)区别

耗能不一样。共阳极二极管的公共端接在高电平,需要高电平时时刻刻处在工作状态;而共阴极二极管公共端接低(GND),只需指定二极管工作时给某个二极管高电平即可,有效降低了功耗,对长时间工作LED来言有效降低了屏热。

线路复杂程度不同。一般在实际工程中共阴极二极管比共阳极二极管的线路复杂,共阳极不需要那么多的高电平线路驱动。

二、使用单片机控制LED闪烁(详细代码展示)

1.点亮一个LED灯

//点亮一个LED灯

void LED1()
{
    //定义一个循环变量

    unsigned char j;
    //设置HC138译码器,使得Y4端输出低电平,4用二进制表示为:100
    HC138_C=1;
    HC138_B=0;
    HC138_A=0;
    //点亮第一个灯
    for(j=0;j<3;j++)
    {
        //使P0端口输出低电平

        P0=0xFE;

        //延时函数
        delay(600000);
    }
}

2.八个LED灯同时闪烁

//八个LED灯同时闪烁

void LED2()
{
    //定义一个循环变量

    unsigned char j;
    //设置HC138译码器,使得Y4端输出低电平,4用二进制表示为:100
    HC138_C=1;
    HC138_B=0;
    HC138_A=0;

    //使用for循环,实现同时闪烁三次
    for(j=0;j<3;j++)
    {
        //同时点亮

        P0=0x00;
        delay(60000);
        delay(60000);

        //同时熄灭
        P0=0xff;
        delay(60000);
        delay(60000);
    }

}

3.跑马灯

//跑马灯

void LED3()
{
    unsigned char j=1;
    //设置HC138译码器,使得Y4端输出低电平,4用二进制表示为:100
    HC138_C=1;
    HC138_B=0;
    HC138_A=0;

    //从左边向右逐渐点亮
    for(j=1;j<=8;j++)
    {
        P0=0xff << j;
        delay(60000);
        delay(60000);
    }

   //从左边向右逐渐熄灭
    for(j=1;j<=8;j++)
    {
        P0=~(0xff << j);
        delay(60000);
        delay(60000);
    }
}

4.流水灯

//流水灯
void LED4()
{
    unsigned char j,i;

    //设置HC138译码器,使得Y4端输出低电平,4用二进制表示为:100
    HC138_C=1;
    HC138_B=0;
    HC138_A=0;
    i=0xfe;
    delay(60000);
    delay(60000);

    //从左边向右依次点亮后熄灭
    for(j=1;j<=8;j++)
    {
        P0=0xff << j;
        P0=P0|i;
        i=i<<1;
        i=i+1;
        delay(60000);
        delay(60000);

        //灯传递到最右边后退出循环
        if(P0==0xff)
        {
            break;
        }
    }
}

5.呼吸灯

//呼吸灯专属的延时函数
void LEDdelay(unsigned int t)
{
    while(t--);
}

//呼吸灯
void LED5()
{
    unsigned char j;
    //设置HC138译码器,使得Y4端输出低电平,4用二进制表示为:100
    HC138_C=1;
    HC138_B=0;
    HC138_A=0;
    // 呼吸灯逐渐变亮
    for(j=0;j<600;j++)
    {
        P0=0x00;
        LEDdelay(j);
        P0=0xff;
        LEDdelay(600-j);
    }
    // 呼吸灯逐渐变暗
    for(j=600;j>0;j--)
    {
        P0=0x00;
        LEDdelay(j);
        P0=0xff;
        LEDdelay(600-j);
    }
}

6.主函数

//头文件的引用

#include "reg52.h"

//定义HC138译码器对应连接的端口

sbit HC138_A = P2^5;
sbit HC138_B = P2^6;
sbit HC138_C = P2^7;

//解决蜂鸣器乱响的问题(目前不需要明白具体原理,之后会学到)
void InitSystem()
{
    HC138_C=1;
    HC138_B=0;
    HC138_A=1;
    P0=0x00;
}

//设置一个延时程序
void delay(unsigned int t)
{
    while(t--);
    while(t--);
}

//主函数

void main()
{        
    InitSystem();
    while(1)
    {
        LED1();//可选择

    }
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值