![](https://img-blog.csdnimg.cn/img_convert/fbcaa6af4526a4aa1b730bbfa8d4c70b.png)
LED原理图(研读573锁存器与138译码器)
![](https://img-blog.csdnimg.cn/img_convert/bf39e3db1ea4283632b4542ba8dbe11c.png)
![](https://img-blog.csdnimg.cn/img_convert/3ee99afb283ba631eb8d75fb99ab9f8a.png)
573锁存器:8路3态输出的非反转透明锁存器。LE端为高时锁存对于数据是透明的(LE为1时,D端对Q端起作用),反之LE端为低时,数据锁存。
138译码器真值表
![](https://img-blog.csdnimg.cn/img_convert/49ebca09202eb2109cef174919512bbe.png)
得出以下结论:
![](https://img-blog.csdnimg.cn/img_convert/bc0d79b4b3addf8a98dc437d0334df29.png)
所以要想D端对Q端起作用,让灯亮起来在LE为1的条件下,D端为0。要想LE为1,则Y4C为1,由74HC02或非门知,Y4为0,又74HC138知,P25为1,P26为0,P27为0。
#include "reg52.h"
sbit HC138_A=P2^5;
sbit HC138_B=P2^6;
sbit HC138_C=P2^7;
void Delay(unsigned int t)
{
while(t--);
while(t--);
}
void LEDrunning()
{
unsigned char i;
HC138_C=1;
HC138_A=0;
HC138_B=0;
P0=0x00;
Delay(60000);
Delay(60000);
P0=0xff;
Delay(60000);
Delay(60000);
}
void main()
{
while(1)
{
LEDrunning();
}
}
要想让灯逐个亮起来,需要在LEDrunning函数中利用for语句对P0的8位进行左移。代码如下
for(i=1;i<=8;i++)
{
P0=0xff<<i;
Delay(60000);
Delay(60000);
}