导读:《蓝桥杯单片机组》专栏文章是博主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/1
,C/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);
}
关于继电器,它和蜂鸣器一样都是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和继电器的方式。
希望大家多多支持我的原创文章。如有错误,请大家及时指正,非常感谢。