目录
一 前言
二 继电器和蜂鸣器实物
三 分析部分
(1)bsp_init.c
(2)蜂鸣器和继电器原理图
(3)ULN2003
(4)他们俩所连接的锁存器
四 代码
在这里要特别说一点!!!
一 前言
本章会介绍一些蓝桥杯中 考的不是那么频繁的知识点,但是最好还是要学一学。后续会写一些关于pwm、NE555、串口等,国赛需要的超声波和一些比较难的,后续再写相关博客。
二 继电器和蜂鸣器实物
看上面这张图,继电器和蜂鸣器在官方所提供的右侧,画黄色圈的这部分,一定要把短接帽插在右侧,这样他们俩才能正常工作
关于他们俩的原理图,请看到第三部分,我会一步步进行分析,那么我们想要实现让继电器打开同时蜂鸣器叫,那么我们该如何操作呢,请看下面的分析的部分
三 分析部分
(1)bsp_init.c
在曾经我们写过的初始化函数当中,我们关闭了蜂鸣器和继电器,所以我们本次的主角就集中在了曾经最初学过的地方
void Cls_Peripheral(void)
{P0 = 0xFF; P2 = P2 & 0x1F | 0x80; //0x80ѡͨY4£¬½«Êý¾Ý͸´«¹ýÈ¥£¬½«LED¹Ø±ÕP2 &= 0x1F; //½«Ëø´æÆ÷¹Ø±ÕP0 = 0;P2 = P2 & 0x1F | 0xA0; //0xA0ѡͨY5£¬½«ÍâÉè´¦ÀíµôP2 &= 0x1F; //½«Ëø´æÆ÷¹Ø±Õ }
注意力集中在了0xA0这三行代码上,而真正决定着蜂鸣器和继电器是否开始工作,我们就应该把P0赋值成某一个数。
(2)蜂鸣器和继电器原理图
要给buzz和RELAY低电平,才能让蜂鸣器和继电器工作
(3)ULN2003
关于锁存器上链接的ULN2003,这上面是对应的原理图,可以发现内部说白了就是八个取反器,那么也就是说,在M74HC573M1R锁存器边上接了一个取反器。
(4)他们俩所连接的锁存器
首先想要让锁存器工作的,就必须要打开Y5C(这块不懂的,请看第一篇文章),其次,观察RELAY和BUZZ,他们所对应的位是P04和P06,如果我想让RELAY和BUZZ输出低电平0,那么15和13部分就得是高电平1,所对应的P04和P06就是高电平1,其他是零,P07到P00,0101 0000那么我就需要将P0赋值成0x50,才可以将对应的继电器和蜂鸣器打开。
四 代码
现在我们已经将最开始的bsp_init.c中的代码改成了如下代码,同时为了保证其他地方不改变,我们要写成P0或上0x50。
P0 |= 0x50;P2 = P2 & 0x1F | 0xA0; P2 &= 0x1F;
在这里要特别说一点!!!
由于数码管和灯都用到了P0这个位置,所以我们不能直接对P0处进行赋值,最好在mian.c上引入全局变量,unsigned char beep_relay_flag= 0;
我们只需要对全局变量beep_relay_flag赋值即可,不会影响到P0本身~
代码如下:
switch(Key_Down)
{case 11:beep_relay_flag |= 0x50;P0 = beep_relay_flag;P2 = P2 & 0X1F | 0xA0;P2 &= 0X1F; break;case 10:beep_relay_flag &= (~0x50);P0 = beep_relay_flag;P2 = P2 & 0X1F | 0xA0;P2 &= 0X1F; break;
}
这是在模板的main.c中的Key_Proc(void)函数中添加的代码,实现的是按下按键11打开蜂鸣器和继电器,按下按键10关闭蜂鸣器和继电器,同时,记得在上面添加全局变量unsigned char beep_relay_flag哦。
为什么这里要写成beep_relay_flag &= (~0x50);?
保持其他位置不变,不影响其他设备,如果直接赋值为零,会破坏其他设备的状态,影响正常运行