前言
学习资料参考
【【小蜜蜂笔记】蓝桥杯大赛-单片机设计与开发基础技能与进阶强化教程】https://www.bilibili.com/video/BV1Bt41187hw?p=2&vd_source=c7e5b42e6c1438daf4523dc34387738c
本节训练重点
- 74HC138 三八译码器
- 74HC573 锁存器
- 74HC02 或非门
- LED跑马灯
LED的基本控制
1.原理图
LED灯与锁存器相连,而锁存器的选中情况受到或非门的影响,而或非门又受到138译码器的控制。
或非门:
138译码器:
138译码器
三八译码器通过三路输入(A0,A1,A2)控制八路输出(Y0-Y6)。
管脚图如下:
真值表如下:
输出为低电平有效,且不同的输入情况只能控制一个管脚进行有效输出。
A2(C) | A1(B) | A0(A) | 有效管脚 |
---|---|---|---|
0 | 0 | 0 | Y0 |
0 | 0 | 1 | Y1 |
0 | 1 | 0 | Y2 |
0 | 1 | 1 | Y3 |
1 | 0 | 0 | Y4 |
1 | 0 | 1 | Y5 |
1 | 1 | 0 | Y6 |
1 | 1 | 1 | Y7 |
74HC573锁存器
当锁存器LE为高电平时,输入输出同步;当锁存器LE为低电平时,数据被锁存,即输入的值不会影响到输出的值。
2. 编程思路
先控制138译码器输出Y4为低电平,再控制锁存器的输出LED进行控制。
Y4有效代码可以参考下方:
/*头文件声明*/
#include <REGX52.H>
/*变量声明区域*/
sbit HC138_A0_A = P2^5;
sbit HC138_A1_B = P2^6;
sbit HC138_A2_C = P2^7;
void LEDRun()
{
/*选中锁存器*/
HC138_A0_A=0;
HC138_A1_B=0;
HC138_A2_C=1;
}
项目实现:LED跑马灯
/*头文件声明*/
#include <REGX52.H>
/*变量声明区域*/
sbit HC138_A0_A = P2^5;
sbit HC138_A1_B = P2^6;
sbit HC138_A2_C = P2^7;
/*延时函数*/
void Delay(unsigned int xms)
{
while(xms--);
while(xms--);
}
/*LED点亮函数*/
void LEDRun()
{
/*变量声明*/
unsigned char i;
/*选中锁存器*/
HC138_A0_A=0;
HC138_A1_B=0;
HC138_A2_C=1;
/*闪烁三下*/
for(i=0;i<3;i++)
{
P0=0x00;
Delay(1000);
P0=0xff;
Delay(1000);
}
/*逐个点亮*/
for(i=0;i<8;i++)
{
P0=0xff>>i;
Delay(1000);
}
/*逐个熄灭*/
for(i=0;i<8;i++)
{
P0=~(0xff>>i);
Delay(1000);
}
}
/*主函数*/
void main()
{
while(1)
{
LEDRun();
}
}