蓝桥杯突击1:关闭蜂鸣器与继电器,点亮LED

还有一个月参加蓝桥杯单片机设计大赛, 开始准备:

首先当然是点亮LED了, 但是蓝桥杯使用的CT107D开发板使用了74HC573锁存器,74HC02或非门, 138译码器来控制, 这就使得开发板稍微有点难度了.

       由于开发板上电后蜂鸣器会鸣叫,继电器会干扰系统的正常运行,所以首先我们要关闭蜂鸣器和继电器.

那么打开开发板原理图, 找到蜂鸣器,.

                                                             蓝桥杯突击1:关闭蜂鸣器与继电器,点亮LED_第1张图片

通过电路发现, 如果N BUZZ端口为0那么蜂鸣器就应该会鸣叫, 寻找N BUZZ的控制.

端口

蓝桥杯突击1:关闭蜂鸣器与继电器,点亮LED_第2张图片

我们发现NBUZZ接到ULN2003放大器的OUT7口,而放大器的IN7口连接到74HC573锁存器的Q7口, 锁存器Q7的输入口为P06口(D7).

锁存器74HC573的原理为, 如果OE端为0, LE端为1,那么D口可以控制Q口状态, 否则Q端保持上一次的电平状态.而电路图中OE已经接地, 所以当LE为1时,P06口可以控制蜂鸣器,反之为LE为0时蜂鸣器保持当前状态. 但是LE口又连接到Y5C, 找到原理图.

 

            蓝桥杯突击1:关闭蜂鸣器与继电器,点亮LED_第3张图片                         蓝桥杯突击1:关闭蜂鸣器与继电器,点亮LED_第4张图片

原理图显示Y5C被74HC02或非门控制, 其原理是先让Y5和WR的电平状态进行或运算, 然后将结果非运算后传给Y5C. 而WR在开发板的CON3上与GND相连, 所以当Y5为0时,Y5C为1 (0与0进行与运算为0, 非运算后为1). 然后我们再次找到Y5的控制端口.

 

                                         蓝桥杯突击1:关闭蜂鸣器与继电器,点亮LED_第5张图片

Y5被74HC138译码器进行控制.  74HC138译码器的原理为:

       P27  P26  P25         Y7  Y6  Y5  Y4  Y3  Y2  Y1  Y0

        0    0    0                   1   1    1     1     1     1   1     0

        0    0    1                   1   1    1     1     1     1   0     1

        0    1    0                   1   1    1     1     1     0   1     1

        0    1    1                   1   1    1     1     0     1   1     1

        1    0    0                    1   1   1     0     1    1    1     1

        1    0    1                    1   1    0    1     1    1    1     1

        1    1    0                    1   0    1    1     1    1    1     1

        1    1    1                    0   1    1    1     1    1    1     1

这就使Y5的控制逻辑

 

       到这里可能有点晕,我们整理一下思路:

       为了使NBUZZ为0, 我们要使74HC573锁存器打开, 也就是Y5C为1, 而为了使Y5C为1, 我们要使Y5为0, 而为了使Y5为0,就要使P27为1,P26为0, P27为1, 这就我们可以使P06为0来愉快地关闭蜂鸣器啦. 而关闭继电器的原理与蜂鸣器相同, 可以和蜂鸣器一起操作, 这里就不再说明了.

       下面贴上关闭蜂鸣器的代码:

void CloseBUZZ()

{

       P2=(P2&0x1f)|0xa0;  //先使得P2口的高三位为000,在通过或运算设置为 101,从而使Y5为0, 那么Y5C为1, 开启锁存器,

       P0^6=0;           //关闭蜂鸣器

       P0^4=0;           //关闭继电器

       P2&=0x1f;         //通过与运算使P2口的高三位为000, 使得Y5为1, 锁存器关闭,使得蜂鸣器和继电器保持关闭状态.

}

       关闭后我们点亮LED,:

 

蓝桥杯突击1:关闭蜂鸣器与继电器,点亮LED_第6张图片

我们发现LED的控制逻辑和蜂鸣器的控制逻辑几乎一模一样, 所以LED的控制逻辑就不再赘述了.

直接贴上点亮LED的整个代码:

#include 



typedef unsigned int uint;

typedef unsigned char uchar;



sbit BUZZ=P0^6;

sbit RELAY=P0^4;



void CloseBUZZ();



void main()

{

       CloseBUZZ();

       P2=(P2&0x1f)|0x80;     //打开锁存器控制LED

P0=0x55;            //点亮奇数LED

}



void CloseBUZZ()    //关闭蜂鸣器以及继电器

{

       P2=(P2&0x1f)|0xa0;

       BUZZ=0;

       RELAY=0;

       P2&=0x1f;

}

 

蓝桥杯每天一更,供大家学习交流使用,转载请先说明来处;

你可能感兴趣的:(MCU,51,CT107D,LED)