一、要求
在CT107D单片机(蓝桥杯指定单片机)竞赛实训平台上实现LED的基本控制,首先让8路LED指示灯闪烁3遍然后熄灭,接着依次点亮LED指示灯,最后依次熄灭LED指示灯,不断循环。(重点掌握74HC573锁存器和74HC138译码器对LED的控制)
二、74HC573锁存器和74HC138译码器
1.74HC573锁存器
74HC573八路输出锁存器就是能将输出的数据锁存住,使其不会受到输入变化的影响。74HC573锁存器有20个引脚,D1~D8是数据输入端,Q1~Q8是数据输出端,LE是锁存控制端。当锁存控制端LE为高电平时,输入和输出同步,74HC573没有锁存功能;当锁存控制器LE变为低电平时,符合建立时间和保持时间的数据会被锁存。
2.74HC138译码器
74HC138译码器这个芯片所实现的功能就是使用3个输入引脚实现控制8个输出引脚的输出情况。其中,在输出时,这8个引脚中只有其中某一个引脚输出低电平,其余的保持高电平输出。如下为其真值表:
三、硬件电路分析
CT107D单片机综合训练平台对LED的控制与其他单片机开发平台不太一样。在CT107D单片机综合训练平台上,LED并没有直接和单片机的IO口相连接,而是LED经过了一个74HC573八路输出的透明锁存器与单片机发P0口连接,如图所示。
74HC573八路输出锁存器的输出锁存使能LE的控制信号来自Y4。本系统单片机开发采用的是IO扩展模式,即WR端接地。所以Y4C的输出状态(Y4C输出信号就是LE的使能信号)完全取决于Y4的状态。当Y4是低电平,Y4C输出高电平,此时才能控制LED灯。
而Y4的信号是74HC138的输出信号,控制74HC138输出信号的使能端是CBA,分别连接在单片机的P2.7、P2.6、P2.5口上。 所以,要想控制LED,就要使得Y4是低电平,其主要就是对P2.7~P2.5口输出状态进行设置。
四、程序
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
sbit HC138_A = P2^5;
sbit HC138_B = P2^6;
sbit HC138_C = P2^7;
void delay_ms(uchar xms) //@11.0592MHz
{
uchar i,j;
while(xms)
{
_nop_();
_nop_();
_nop_();
i = 11;
j = 190;
do
{
while (--j);
} while (--i);
xms--;
}
}
void led_control()
{
uchar i;
HC138_A = 0;
HC138_B = 0;
HC138_C = 1;
for(i = 0; i < 3; i++) //连续亮灭三次
{
P0 = 0x00;
delay_ms(1000);
P0 = 0xff;
delay_ms(1000);
}
for(i = 0;i < 8;i++) //逐个点亮
{
P0 = 0xff << i;
delay_ms(1000);
}
for(i = 0;i < 8;i++) //逐个熄灭
{
P0 = ~(0xff << i);
delay_ms(1000);
}
}
void main()
{
while(1)
{
led_control();
}
}