一、前言
在蓝桥的比赛里,在上电之前一般都要系统初始化,关闭蜂鸣器,继电器之类不需要用到的设备
在第十三届省赛考了继电器,蜂鸣器大部分都是要关闭的。
![](https://i-blog.csdnimg.cn/blog_migrate/f9ae30a1bcfadc299c2c87b3432feeec.png)
二、原理图
在开发板上面,蜂鸣器是一个上面贴着一张白色字片的黑色圆柱形,旁边那个黄色长方体的就是继电器。
原理图上面,他们都连接在ULN2003复合晶体管的输出端,CMOS端与VCC高电平相连,E端接GND,采用了集电极开路输出,输出电流大,故可直接驱动继电器。
在74HC573锁存器输出端,LE连接的是Y5C,所以我们需要回到SM74HC138译码器
![](https://i-blog.csdnimg.cn/blog_migrate/75b5b2e79104c005bb7597858e39581f.png)
我们需要控制Y5,所以我们只需要控制P25=1,P26=0,P27=1,就可以控制锁存器通道指向蜂鸣器和继电器
关于锁存器和译码器笔者在上一篇笔记提到,感兴趣的读者可以去看看蓝桥杯单片机基础学习部分(1)——LED灯(点亮一盏LED灯及流水灯)-CSDN博客
在开发板上面,需要用键帽把J6的2,3端口短接,VCC供电给蜂鸣器和继电器
三、代码实现功能
1、蜂鸣器响起
#include <STC15F2K60S2.H>
void main()
{
P2 = (P2 & 0x1f) | 0xa0;
while(1)
{
P0 = 0x40;
}
}
P2 = (P2 & 0x1f) | 0xa0;就是对译码器进行Y5端口输出控制
十六进制的0x40就是二进制的 0100 0000(高位在左右,低位在右)对应图1控制7C~1C的高低电平
![](https://i-blog.csdnimg.cn/blog_migrate/0e80b296d87b465e6f0ebc19e9bb34c3.png)
2、蜂鸣器滴答滴答
#include <STC15F2K60S2.H>
void Delay10ms(void) //@11.0592MHz
{
unsigned char data i, j;
i = 108;
j = 145;
do
{
while (--j);
} while (--i);
}
void main()
{
P2 = (P2 & 0x1f) | 0xa0;
while(1)
{
P0 = 0x40; //开启蜂鸣器
Delay10ms();
P0 = 0x00; //关闭蜂鸣器
Delay10ms();
}
}
要蜂鸣器滴答滴答,只需要开启蜂鸣器,一段时间后关闭,再一段时间后,再开启......就可以了
3、继电器开启
#include <STC15F2K60S2.H>
void main()
{
P2 = (P2 & 0x1f) | 0xa0;
while(1)
{
P0 = 0x10;
}
}
控制继电器只需要P0 = 0x10;
十六进制的0x10就是二进制的 0001 0000(高位在左右,低位在右)对应图1控制7C~1C的高低电平