【蓝桥杯单片机】1.2 蜂鸣器和继电器

序言

通过对LED的学习,相信大家的对74HC138译码器74HC573锁存器有了较为详细的了解,但是只对其中的一个74HC573锁存器进行了学习,此次我们会学习控制蜂鸣器的继电器的锁存器,同时也会对在74HC138译码器上选择74HC573锁存器的选择代码进行优化处理。

让我们开始吧~

一、实物图

图中左侧的为蜂鸣器模块,右侧为L10(继电器吸合时点亮,断开时关闭)。

特别注意:红色箭头所指内容为继电器和蜂鸣器开关,记得要把键帽插在ON上。

二、原理图及硬件部分

此处可以得知,控制蜂鸣器引脚(BUZZ)和继电器引脚(RELAY)的锁是“Y5” 。

1. 74HC573锁存器的功能

  1. 数据存储:573锁存器可以将输入的数据在时钟信号的作用下暂时存储起来,以便后续处理或输出。

  2. 数据输出控制:当时钟信号到来时,锁存器会将存储的数据输出,实现对数据输出的控制。这对于确保数据在特定时刻得到正确输出非常重要。

  3. 并行数据传输:573锁存器通常具有多个并行输入和输出引脚,可以实现并行数据的传输,适用于需要处理多个数据信号的场合。

  4. 时序控制:通过控制时钟信号的频率和时序,可以精确地控制数据存储和输出的时间,确保系统的稳定性和可靠性。

2.  74HC573锁存器的使用

数据输入端(D1~D8)的输入=数据输出端(Q1~Q8)的输出,且输出端的电平状态不影响输入端。

3.ULN2003达林顿管

(1)特点

ULN2003芯片具有以下特点:

  1. 多通道输出:ULN2003芯片具有7个高电压、高电流输出通道,每个通道都有一个达林顿对输出。这使得它能够同时控制多个负载。

  2. 达林顿对输出:每个输出通道都包含了一个达林顿对,它是一种高效率的电流放大器,能够承受较高的负载电流。

  3. 内部反向电压保护二极管:ULN2003芯片的每个输出引脚都内置了反向电压保护二极管,用于保护输出引脚免受感性负载的损害。

  4. 大功率能力:ULN2003芯片能够承受较高的电流和电压,适用于驱动各种类型的高功率负载,如继电器、步进电机等。

(2)功能

  1. 电流放大和负载驱动:ULN2003内部集成了7个达林顿对输出,能够提供高电流放大和电流输出,使其适合驱动各种高功率负载,如继电器、步进电机等。

  2. 多通道控制:ULN2003具有7个输出通道,每个通道都可以独立控制,这使得它可以同时控制多个负载,提高了系统的灵活性和多功能性。

  3. 电压反向保护:每个输出通道都内置了反向电压保护二极管,可以保护输出引脚免受感性负载的损害,提高了系统的稳定性和可靠性。

  4. 适应性强:ULN2003能够承受较高的电流和电压,适用于各种工业和消费电子应用,如汽车电子、家电控制、机器人等领域。

  5. 简化电路设计:ULN2003的集成设计简化了电路设计过程,减少了外部元件的数量和复杂性,降低了系统成本并提高了系统的可靠性。

 此处,我们可以直接将其理解为“非门”

三、代码部分

1. 选择锁存器

在LED部分中我们学习了74HC138译码器的使用(详情见我的作品:1.1LED流水灯http://t.csdnimg.cn/nBlFU)。

例如此处我们选择Y5通道对应的锁存器:

sbit HC138_A2=P2^7;    //重新定义HC138_A2连接P27引脚
sbit HC138_A1=P2^6;    //重新定义HC138_A1连接P26引脚
sbit HC138_A0=P2^5;    //重新定义HC138_A0连接P25引脚

void SelectHC573()//定义函数名称
{
    HC138_A2=1;   //P2^7引脚输出高电平1
    HC138_A1=0;   //P2^6引脚输出高电平0
    HC138_A0=1;   //P2^5引脚输出高电平1
}

如此对应的二进制数为:101,即十进制数5,因此选择了Y5通道。

2. 74HC138译码器代码优化

在前文中我们说过如此写代码过于冗杂,此处我们对代码进行优化。

首先我们先观察一下74HC138译码器的原理图:

(1) 由图中我们可以得知A、B、C所对于的引脚分别为P25、P26、P27,因此我们只对这三个引脚进行赋值,以免造成不必要的错误。

P2=P2 & 0x1f; //0001 1111

(2) 然后,我们将高三位的值清0(即P25,P26,P27),然后第五位保持不变,我们在此基础上对高三位进行赋值。

若:A2、A1、A0组成的二进制数为100,即十进制数4,因此选择通道4

若:A2、A1、A0组成的二进制数为101,即十进制数5,因此选择通道5

若:A2、A1、A0组成的二进制数为110,即十进制数6,因此选择通道6

若:A2、A1、A0组成的二进制数为111,即十进制数7,因此选择通道7

(3) 将二进制某一位上的数字置“1” ,我们通常使用“或”(|)操作。此处举例我们所选的为Y4:

P2= P2 | 0x80; //P2 | 1000 0000

此时P2的高三位的值为100,十进制数为4(此处我们已将P2的高三位单独拿出来分析,因此读者不必纠结实际上P2的值)

(4)因此我们可以延伸写出其他寄存器的选择:

void SelectHC573(unsigned char n)  //定义函数,调用时写入需要调用的寄存器号
{
    switch(n)
    {
        case 4:
            P2=(P2 & 0x1f) | 0x80;  //选择寄存器4 (100)
        break;
        case 5:
            P2=(P2 & 0x1f) | 0xa0;  //选择寄存器5 (101)
        break;
        case 6:
            P2=(P2 & 0x1f) | 0xc0;  //选择寄存器6 (110)
        break;
        case 7:
            P2=(P2 & 0x1f) | 0xe0;  //选择寄存器7 (111)
        break;
    }
}

至此我们74HC138译码器的优化代码已完成(后续会有更进一步的优化)。

3.继电器和蜂鸣器的使用

首先我们选择其对应的寄存器:

SelectHC573(5);

由原理图可知,我们若想在BUZZ处输出高电平,则需要ULN2003达林顿管输出高电平,因此74HC573锁存器输出低电平,即P06口输出低电平、

P0=0x40; //1011 1111 蜂鸣器工作

同样,我们打开继电器,则需使P04口输入低电平

P0=0x10; //1110 1111 继电器工作

 这样,继电器和蜂鸣器都可以工作了!

四、代码纯享版

此处写一个先打开蜂鸣器,一段时间后关闭,再打开继电器,一段时间后关闭。

#include <STC15F2K60S2.H>  //引入头文件
void SelectHC573(unsigned char n)  //定义函数,调用时写入需要调用的寄存器号
{
    switch(n)
    {
        case 4:
            P2=(P2 & 0x1f) | 0x80;  //选择寄存器4 (100)
        break;
        case 5:
            P2=(P2 & 0x1f) | 0xa0;  //选择寄存器5 (101)
        break;
        case 6:
            P2=(P2 & 0x1f) | 0xc0;  //选择寄存器6 (110)
        break;
        case 7:
            P2=(P2 & 0x1f) | 0xe0;  //选择寄存器7 (111)
        break;
    }
}

void Delay(unsigned int t)
{
    while(t--);
}

void main()
{
    SelectHC573(5);    //选择寄存器
    while(1)
    {
        P0=0x40;       //打开蜂鸣器
        Delay(60000);
        P0=0x40;       //关闭蜂鸣器
        Delay(60000);
        P0=0x10;       //打开继电器
        Delay(60000);
        P0=0x10;       //关闭继电器
        Delay(60000);
    }
}

  • 35
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值