本篇文章主要讲解LED点亮及74HC138译码器,74HC573锁存器,74HC02或非门的使用。
注意:使用的是 国信长天CT107D开发板 即 蓝桥杯竞赛专用的开发板。
要在此开发板点亮LED灯需掌握74HC138译码器和74HC573锁存器还有74HC02的使用。
74HC138译码器:
该芯片可用3个输入引脚,实现8个输出引脚,而且八个输出引脚中只有一个低电平。
该处主要讲如何输出 Y4
可以看到它们分别对应 :
P2^7 -> C
P2^6 -> B
P2^5 -> A
当A、B、C都为低电平时,Y0是输出低电平的。
那么当 C->高电平
B ->低电平
A->低电平 即: Y4输出低电平
P2^7=1; C
P2^6=0; B
P2^5=0; A
74HC573锁存器:(这里用来控制LED灯)
需要让Y4C=1高电平
OE- | LE | D 数据输入端 | Q 数据输出端 |
L | H | H | H |
L | H | L | L |
L | L | X | 不变 |
H | X | X | 高阻 |
1D~8D为数据输入端 |
1Q~8Q为数据输出端 |
锁存器能把输出的数据保存住,不会受到输入变化的影响。
573锁存器有20个引脚,D1~D8是数据输入端,Q1~Q8是数据输出端,LE为锁存控制端。
当LE为高电平时,Q1~Q8输出和D1~D8输入是一样的;LE为低电平时,Q1~Q8输出不受D1~D8输入的变化影响。
74HC02或非门:
芯片原理图:
内部逻辑图:这里主要看 Y4
内部图片:
标准的逻辑门:
WR引脚和译码器的Y4引脚作为74HC02的输入。
如果译码器的Y4输出低电平,经过74HC02或非门,那么74HC02的输出Y4C将为高电平,而该引脚接到74HC573锁存器的LE引脚,这时候锁存器打开,即单片机可以控制LED灯。若译码器的Y4为高电平的,则74HC573处于锁存状态,单片机就不能控制LED灯。
下面来看怎么控制LED灯:
这里画了一个草图:
1. 因为573锁存器直接控制LED(共阳),点亮需要让P0口输出低电平,P0=0x00。
2. 需要让573锁存器的LE为高电平,即Y4C为高电平。
3. 若要使Y4C为高电平,因为Y4C由Y4和WR控制,WR为低电平,但是74HC02是或非门,把0变为1,则需要让Y4为低电平。
4. 若要使Y4为低电平,Y4由74HC138控制。即让
P2^7=1; P2^6=0; P2^5=0;
C B A
接下来写代码吧。
注意:蜂鸣器初始化为了上电不乱叫。蜂鸣器和继电器不必先理
#include "reg52.h"
sbit HC138_A = P2^5;
sbit HC138_B = P2^6;
sbit HC138_C = P2^7;
sbit BEEP = P0^6; //蜂鸣器,可不理
sbit RELAY = P0^4; //继电器,可不理
void Delay(unsigned int t)
{
while(t--);
while(t--);
}
void LEDRunning()
{
HC138_C = 1;
HC138_B = 0;
HC138_A = 0; //Y4输出低电平,Y4C高电平->5473的LE
P0 = 0x00; //573锁存器直接LED灯,P0口低电平亮
Delay(60000);
Delay(60000);
P0 = 0xff; //LED灭
Delay(60000);
Delay(60000);
}
//初始化蜂鸣器,防止上电叫
void InitBepp()
{
HC138_C = 1;
HC138_B = 0;
HC138_A = 1; //Y5输出低电平,Y5C高电平->573LE
BEEP = 0; //P0^6=0,经ULN2003非门,OUT6=1
}
//初始化继电器
void InitRelay()
{
HC138_C = 1;
HC138_B = 0;
HC138_A = 1; //Y5输出低电平,Y5C高电平->573LE
RELAY = 0; //P0^4=0,经ULN2003非门,OUT4=1
}
void main()
{
InitBepp(); //蜂鸣器初始化
InitRelay(); //继电器初始化
while(1)
{
LEDRunning();
}
}
有问题可以评论区一起探讨。喜欢可以点赞收藏哦。