概述
在开始之前,我们首先需要对两个芯片——74HC138和74HC573进行学习。我们都知道单片机可用的IO口是有限的,但是需要控制多个器件,如LED、数码管、独立按键、矩阵键盘以及蜂鸣器继电器等,要想实现对这多个模块的控制,就需要对IO口进行扩展。单片机蓝桥杯的板就是通过74HC138和74HC573两个芯片实现的。
刚开始学习时,可以观看小蜜蜂老师的讲解视频,我觉得讲的还是很细致的
【小蜜蜂笔记】蓝桥杯大赛-单片机设计与开发基础技能与进阶强化教程_哔哩哔哩_bilibili
74HC138译码器
三八译码器,三个输入控制八路互斥的低有效输出。
引脚图:
功能表:
C(P2.7) B (P2.6) A(P2.5)
1 0 0 Y4为低(有效)
1 0 1 Y5为低(有效)
1 1 0 Y6为低(有效)
1 1 1 Y7为低(有效)
此74hc138译码器片选四个74hc573,所以只使用Y4、Y5、Y6、Y7即可。再通过74hc02(或非门),为138译码输出提供反相。即当Y4为0时,输出Y4C为1,便于后续74hc573锁存器的控制
74HC573锁存器
功能表
电路连接图:
通过控制P2.7、P2.6、P2.5三个引脚的电平,便可以控制输出哪一位有效,进而去控制不同模块。例如,分别给P2.7、P2.6、P2.5引脚1、0、0,便可以控制Y4为有效,此时Y4为低电平。经过74hc00反相后变为高电平,此时输出的Y4C为高电平。在电路图中Y4C又连接着LED所对应的74HC573锁存器, 由上图可知,当Y4C为高电平时,输出Q1~Q7与输入D1~D7相同,此时P0口直接控制LED,为0点亮,为1熄灭。当Y4C为低电平时,数值被锁存起来,输出的Q1~Q7不变,即不再随着输入而变化。
代码实现:
//*******************引脚为0时,对应LED亮
#include"reg51.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 Init74HC138(unsigned char n)
{
switch(n)
{
case 4://Y4有效,P0直接控制LED
HC138_A=0;
HC138_B=0;
HC138_C=1;
break;
//**当Y5、Y6、Y7有效时,控制其他器件,这些我们下一章继续学习
// case 5://Y5有效,P0控制蜂鸣器、继电器
// HC138_A=1;
// HC138_B=0;
// HC138_C=1;
// break;
// case 6://Y6有效,P0控制数码管位选
// HC138_A=0;
// HC138_B=1;
// HC138_C=1;
// break;
// case 7://Y7有效,P0控制数码管段选
// HC138_A=1;
// HC138_B=1;
// HC138_C=1;
// break;
}
}
//******简单的流水灯子程序******
void LEDRuning()
{
unsigned char i;
//全灭
P0=0xff;
Delay(90000);
//全亮
P0=0x00;
Delay(90000);
//依次一个个点亮
P0=0x01;
for(i=0;i<8;i++)
{
P0 <<= 1;
P0=~P0;
Delay(9000000);
P0=~P0;
}
}
//*************主函数************
void main()
{
Init74HC138(4);
while(1)
{
LEDRuning();
}
}
最后
以上就是清脆小伙为你收集整理的单片机蓝桥杯——LED的全部内容,希望文章能够帮你解决单片机蓝桥杯——LED所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复