蓝桥杯国信长天单片机—LED灯模块(五)

LED等内部连接示意图


整体思路
通过74HC138芯片及74HC02芯片输入高低电平,来控制Y4C为1或0。当Y4C为1时,方可通过P0端口来控制LED灯的亮灭。当Y4C为0时,无法控制LED灯的亮灭。如:令P27为1、P26为0、P25为0,则输出Y4为0,再通过74HC02芯片,将Y4为0输入,则Y4C输出为1。再通过P0为0xfe即Q8-Q1,为1111 1110,控制L1亮。也可令P0为0x00即Q8-Q1,为0000 0000,控制L1~L8同时亮。

LED控制步骤分解:
步骤一:

从CT107D单片机综合训练平台原理图中找到LED模块

根据原理图,我们可以知道,这一组发光二极管的阳极,已经给了一个高电平,所以只要我们在阴极给出一个低电平,就可以让二极管发光。
学过51的朋友都知道,要给出一个低电平,我们只需要令IO口为0,就可以了。即

P0 = 0x00; //点亮所有LED

但是呢,这一块板子,你直接令P0口为0,是无法点亮IO口的。在P0端口与发光二极管之间有一个芯片74HC573(锁存器)。模块详解查阅蓝桥杯国信长天单片机–原理图详解(四)
步骤二:
板子上有4片74HC572芯片,使能其中Y4C端口(设置高电平既可以控制该芯片),利用138译码器进行端口高低电平设置。




138译码器这里的作用是用P25,P26,P27,也就是P2口的高三位来控制位选的。

使能P27-p25 清零,再定位Y4C操作

P2 = P2 & 0x1F | 0x80; //P27-p25 清零,再定位Y4C
P2 &= 0x1F;            //P27-p25 清零

IO 编程点亮LED核心代码如下:

P2 = ((P2&0x1F)|0x80);
P0 = 0x00; //点亮所有LED
P2 = P2 & 0x1F;

案例:
LED闪烁

    #include "reg52.h"  //定义51单片机特殊功能寄存器

    //延时函数
    void delay(void)
    {
        unsigned char i,j,k;
        for(i=0; i<20; i++)
        {
            for(j=0; j<20; j++)
            {
                for(k=0; k<248; k++);
            }
        }
    }
    //主函数
    void main(void)
    {
        while(1)
        {
            P2 = ((P2&0x1f)|0x80);
            P0 = 0xff;  //LED熄灭
            P2 &= 0x1f;
            delay();

            P2 = ((P2&0x1f)|0x80);
            P0 = 0x00;  //LED点亮
            P2 &= 0x1f;
            delay();
        }
    }