蓝桥杯单片机组备赛——LED指示灯的基本控制

教程介绍:博客依据b站小蜜蜂老师的教程进行编写,文中会对老师传授的知识进行总结并加入自己的一些理解。教程链接

文章目录

  • 一、点灯介绍
  • 二、相关数字芯片介绍
    • 2.1 74HC138介绍
    • 2.2 74HC573介绍
    • 2.3 74HC02介绍
  • 三、代码设计思路
  • 四、代码编写
  • 五、小蜜蜂老师的课后作业题目以及答案
    • 5.1题目
    • 5.2 答案

一、点灯介绍

打开开发板原理图我们可以知道LED灯并不是直接接到IO口上的,而是经过了74HC573来实现间接控制。此外74HC573不能直接使用必须使能LE引脚才能使用,使能的工作又需要通过74HC13874HC02来配合完成。所以,在点亮一个LED前,我们需要学习74HC573、74HC138、74HC02。

二、相关数字芯片介绍

2.1 74HC138介绍

74HC138是一个三八译码器,也就是三个输入控制八路互斥的低有效输出。互斥的意思是只能有一个是低电平,不可能存在两个及以上同时输出低电平。
蓝桥杯单片机组备赛——LED指示灯的基本控制_第1张图片
在开发板上G_1和G_2已经帮我们设计好了,不需要我们去操作什么。我们的任务就是知道A B C和8个Yx之间的联系就好

在数字电路中,我们以低电平(L)表示0,高电平(H)表示1,所以当C B A=0 0 0,也就是0(二进制转十进制)的时候,第0号口(Y0=0)就输出低电平;当C B A=0 0 1时,第1号口(Y1=0)就输出低电平。反过来我们想要Y4输出低电平就让C B A=1 0 0,也就是P27=1,P26=0,P25=0。
这里需要一些数电知识,不懂得b站搜索二进制转进制

2.2 74HC573介绍

当给LE引脚高电平时,输入什么就输出什么,当给LE引脚低电平时,输出不随输入变化,保持不变。

2.3 74HC02介绍

74HC02是或非门,也就是当两个输入都为低电平(0)的时候,输出才为高电平,否则一直是低电平。

三、代码设计思路

蓝桥杯单片机组备赛——LED指示灯的基本控制_第2张图片

假设让L1亮起来其他全灭,那么就需要令Q1=0,Q2~Q7=1
也就是D1=0,D2~D7=1,也就是P00=0,P02~P07=1
上面介绍573的时候也说到了输出要和输入一样需要让LE引脚为高电平,也就是Y4C要为低电平。
因为WR引脚接的是GND,所以要让Y4C为低电平,就要138的Y4=0,也就是C B A=1 0 0,也就是P27=1,P26=0,P25=0
总结:要控制LED灯,我们就要控制P00~P07P27、P26、P25这几个引脚

四、代码编写

#include 
#include 
/*
num从4到7,分别对应
4:LED灯
5:蜂鸣器、继电器、电机
6:数码管段选
7:数码管位选
*/
void selectHC573(unsigned char num)  
{
	switch(num)
	{
		case 4:
			P2=(P2 & 0x1f) | 0x80;
			break;
		case 5:
			P2=(P2 & 0x1f) | 0xa0;
			break;
		case 6:
			P2=(P2 & 0x1f) | 0xc0;
			break;
		case 7:
			P2=(P2 & 0x1f) | 0xe0;
			break;
		case 0:
			P2=(P2 & 0x1f) | 0x00;
			break;
	}
}
void system_Init()  // 因为单片机上电时IO口状态不稳定,可能会导致蜂鸣器鸣叫(很吵)
{
	selectHC573(5);
	P0=0x00;
}
void L1()
{
    selectHC573(4);
    P0=0xfe;
}
void main(){
	system_Init();
    L1();
	while(1)
	{
	}
}

五、小蜜蜂老师的课后作业题目以及答案

5.1题目

蓝桥杯单片机组备赛——LED指示灯的基本控制_第3张图片

5.2 答案

#include 
#include  // 利用stc软件生成的软件延时代码中_nop_();需要用到这个头文件。
/*
num从4到7,分别对应
4:LED灯
5:蜂鸣器、继电器、电机
6:数码管段选
7:数码管位选
*/

void Delay1000ms()		//@12.000MHz
{
	unsigned char i, j, k;

	_nop_();
	_nop_();
	i = 14;
	j = 174;
	k = 224;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}




void selectHC573(unsigned char num)  
{
	switch(num)
	{
		case 4:
			P2=(P2 & 0x1f) | 0x80;
			break;
		case 5:
			P2=(P2 & 0x1f) | 0xa0;
			break;
		case 6:
			P2=(P2 & 0x1f) | 0xc0;
			break;
		case 7:
			P2=(P2 & 0x1f) | 0xe0;
			break;
		case 0:
			P2=(P2 & 0x1f) | 0x00;
			break;
	}
}

void all_Led_Blink()
{
	int i;
	selectHC573(4);
	for(i=0;i<3;i++)
	{
		P0=0x00;
		Delay1000ms();
		P0=0xff;
		Delay1000ms();
	}
}

void system_Init() // 因为单片机上电时IO口状态不稳定,可能会导致蜂鸣器鸣叫(很吵)
{
	selectHC573(5);
	P0=0x00;
}

void main(){
	system_Init();
	all_Led_Blink();
	while(1)
	{

	}
}

你可能感兴趣的:(蓝桥杯单片机,蓝桥杯,单片机)