使用芯片为IAP15F2K61S2,外设原理图与蓝桥杯官方原理图相同
74LS138译码器
三八译码器,三个输入控制八路互斥低电平有效输出。即使用3个IO可以控制8个输出IO口,数出端口为低电平有效。使用138译码器有利于对外设进行扩展。
1、真值表
令E3~1为100时,138译码器使能
将A2看做高位,A0看做低位,有A2~0组成的3位2进制码正好对应0~8。当配置好A2~0时,对应的输出端Y口,将发出低电平,其余Y口将保持高电平。
eg:A2~0为011时,对应的Y3口将输出低电平,其余输出端为高电平。
2、配置
在蓝桥杯15单片机上,使能端E1、E2、E3默认使能,分别为接高、低、低电平。如果为进行使能,输出端口Y0~7全为高电平。
使用时,只需要更改地址输入A2、A1、A0即可对8个IO口进行控制。
74HC573锁存器
8路3态输出的非反转透明锁存器。
1、真值表
使能端OE为低电平时,573锁存器使能。
当LE为低电平时,数据会被锁存;为高电平时,输出端口电平与输入端口电平相同,即透明。
2、配置使能端
138译码器的Y4输出口接一或非门(另一端接低电平,不影响输出)到573锁存器的LE输入端。当Y4=0时,锁存器输出与输入相同,
即配置138译码器输出为Y4=0时,可直接控制P0组IO口控制LED 灯。
流水灯控制
将138译码器配置好后,可以直接控制P0端口进行流水控制,此处不进行赘述。
实例:
代码流水效果:LED全亮全灭3次,LED灯由1到8逐个点亮,再从1到8逐个熄灭,重复进行
注意:该程序流水时,蜂鸣器会响。可通过关闭蜂鸣器外设解决,也可通过程序配置令蜂鸣器不工作。
#include "STC15F2K60S2.h" #define uint unsigned int #define uchar unsigned char sbit HC138_C = P2^5; sbit HC138_B = P2^6; sbit HC138_A = P2^7; uchar i=0; void delay(uint t) { uint x = 0; uchar y = 0; for(x=t;x>0;x--) for(y=114;y>0;y--); } void HC138_Init()//138译码器配置 { HC138_A = 1; HC138_B = 0; HC138_C = 0;//输出为Y4=0,使得锁存器透明,输出与输入相同 } void main() { HC138_Init(); while(1) { for(i=0;i<3;i++)//全亮全灭3次 { P0=0x00; delay(5000); P0=0xff; delay(5000); } for(i=0;i<8;i++)//依次点亮 { P0=0xff<<i; delay(5000); } for(i=0;i<8;i++)//依次熄灭 { P0=~(0xff<<i); delay(5000); } } }
总结:
LED灯被573锁存器控制,而573锁存器是否锁存取决于138译码器输出是否为Y4=0。