【蓝桥杯单片机组模块】1、硬件电路基础知识 与 蜂鸣器模块上手

295 阅读6分钟

导读:《蓝桥杯单片机组》专栏文章是博主2018年参加蓝桥杯的单片机组比赛所做的学习笔记,在当年的比赛中,博主是获得了省赛一等奖,国赛二等奖的成绩。成绩虽谈不上最好,但至少问心无愧。如今2021年回头再看该系列文章,仍然感触颇多。为了能更好地帮助到单片机初学者,今年特地抽出时间对当年的文章逻辑和结构进行重构,以达到初学者快速上手的目的。需要指出的是,由于本人水平有限,如有错误还请读者指出,非常感谢。那么,接下来让我们一起开始愉快的学习吧。

一、硬件电路基础知识

工欲善其事必先利其器,阅读电路原理图是单片机开发的基础,正式开始写程序之前,我们先来补充一下蓝桥单片机组这个原理图的基础知识吧。硬件电路总体来说并不太难,这里仅拿74HC573和ULN2003组成的电路做重点介绍。 在这里插入图片描述

1.1、74HC573 电路

蓝桥的这块板子主要靠74HC573 电路和74HC138撑起外设的门面,74HC138数电常讲(详情看这里),这里不再重复。74HC573可能有点陌生,其实也没啥,记住一点它是个锁存器,存状态的器件就行了。

非得深入了解的话,可以看看这里,了解完之后对付这个比赛也完全够用了。

如果程序中使用完573后,记得及时的禁止使能!在程序中,可以这样写:

注:看到后面会发现这样写不太好,因为容易影响IO的其他位,这里仅仅为了方便入门!

P2 = P2 & 0x1F;

1.2、ULN2003 电路

这个可得好好说说,感觉挺好使的,其内部电路示意图如下所示。

在这里插入图片描述

主要记住几个信息:

  • 特点①、它是个驱动芯片,可以驱动诸如继电器和电机此类感性负载
  • 特点②、输出端可达500mA/50V.

注:感性负载的缘故,输出端具有的二极管学名续流二极管

ULN2003的9脚是COM口,为内部7个续流二极管负极的公共端,各二极管的正极分别接各达林顿管的集电极。

用于感性负载时,该脚接负载电源正极,实现续流作用。如果该脚接地,实际上就是达林顿管的集电极对地接通。所以最好接上VCC!

注:达林顿管是两个三极管接在一起,极性只认前面的三极管

  • 特点③、ULN2003是一个非门电路

若要深入了解ULN2003的具体参数信息,可以看这里,但是还是那句话,上面介绍的足矣应付这个比赛。

1.3、了解IO控制原理 - 以驱动蜂鸣器为例

干说的话,有点不直观,先来看看怎么驱动蜂鸣器吧。板载蜂鸣器为有源蜂鸣器,只要两端有压差就会响!板载电路原理图如下所示:

在这里插入图片描述

通过电路图,不难看出,也就是说我们只需要控制 N_BUZZ 是低电平就OK了,那么再顺藤摸瓜就可以找到N_BUZZ是连接到那个IO引脚。

听起来那岂不是so easy的事么,确实如此...

继续往下走咯~ 在这里插入图片描述

顺藤摸瓜的原理图见上。

再提醒一下 ULN2003 驱动芯片是个非门

故顺藤摸瓜可得:想要OUT7=0,那么只能IN7=1了;IN7对应到锁存器573,不改变状态,再对应到IO口就是P06了,也就是我们让 P0^6=1 , 这时候蜂鸣器就会响了。

确实是这样的,但是别忘了573上面的LE,是需要使能的。也就是Y5C=1 开启使能,再根据上面的思路,顺藤摸瓜就来到了74HC02这个或非在这里插入图片描述

WR是J13上的,当我们是IO编程的时候,J13的2、3脚是相连的。

关于IO编程这个概念,后面会继续深入的。

在这里插入图片描述

J13是个3脚排针,它的3脚连接的是GND。那么2、3脚是相连,也即是说WR是接地的。

74HC02同时还是个非门,想要Y5C=1,那么Y5=0即可,Y5又是38译码器的输出,Y5等于0就是38译码器选中对应的引脚,因为它是低电平输出(数电有讲)。

也即是让C/B/A=1/0/1C/B/A又分别对应P2口的P27/P26/P25,如下图所示。

在这里插入图片描述

那么一切就理清楚了,若想驱动有源蜂鸣器,只需要让P2 = (P2&0x1F|0xA0)即可。

二、实验写代码

代码如下

#include <stc15.h>

sbit Buzz=P0^6;

void main()
{

	P2 = ((P2&0x1F)|0xA0); 
	Buzz = 1;	
	P2 = P2 & 0x1F;
	while(1);
}

烧录到芯片,蜂鸣器确实响了吧,当然可以试试Buzz赋值0。

关于继电器,它和蜂鸣器一样都是Y5C所在寄存器使能控制,只需改变相应的IO口,就可以实现控制继电器,直接上代码。

#include <stc15.h>

sbit Buzz = P0^6;
sbit Relay = P0^4;

void main()
{

	P2 = ((P2&0x1F)|0xA0); //使能573
	Buzz = 0;	//关闭蜂鸣器
	Relay = 0; //关闭继电器
	P2 = P2 & 0x1F;	//禁止573
	while(1);
}

LED灯不过是换成了Y4C,对应选中Y4就可以操作LED了,上代码。

#include <stc15.h>

sbit Buzz = P0^6;
sbit Relay = P0^4;

void main()
{

	P2 = ((P2&0x1F)|0xA0); //使能573
	Buzz = 0;	//关闭蜂鸣器
	Relay = 0; //关闭继电器
	P2 = P2 & 0x1F;	//禁止573
	
	P2 = ((P2&0x1F)|0x80);
	P0 = 0x00; //点亮所有LED
	P2 = P2 & 0x1F;
	while(1);
}

三、总结

后期当不使用 LED、继电器和蜂鸣器 的时候,记得直接关闭,乱响的话很容易影响心情的!(╭(╯^╰)╮)

关闭代码模板如下:

void CloseFucker()
{
	P2 = (P2 & 0x1F) | 0x80;//关闭LED
	P0 = 0xFF;
	P2 = 0x00;
	
	P2 = (P2 & 0x1F) | 0xA0;//关闭蜂鸣器继电器
	P0 = P0 & 0xAF;
	P2 = 0x00;
}

小结:本篇文章从蓝桥单片机板子的硬件电路入手,详细介绍了74HC573和ULN2003这两个不那么熟悉的器件电路功能及作用。接着以驱动蜂鸣器为例,介绍了单片机IO的控制方式。最后举一反三,介绍了单片机IO控制LED和继电器的方式。

希望大家多多支持我的原创文章。如有错误,请大家及时指正,非常感谢。