继电器和蜂鸣器的初始化
备战2022蓝桥杯大赛记录自己学习过程
希望可以取得一个不错的名次 加油
记录内容大部分全来自b站小蜜蜂老师讲解 yyds
小蜜蜂老师
下面的实验基于Led中的代码进行完善,并对继电器和蜂鸣器进行初始化及相应功能操作。
从上面原理图中我们可以看出Buzzer 和realy是接到ULN2003上面的该芯片的内部电路
在引脚输出的时候会取反。而该锁存器的选通受Y5控制 Y5 由74HC138控制CBA分别为101的时候选通
#include "reg52.h"
/********************************************
Date:2022-1-10
Author:小殷同学
Learn From:B 站小蜜蜂老师
*********************************************/
//sbit 定义74HC138 A-P2^5 B-P2^6 C-P2^7
sbit HC138_C = P2^7;
sbit HC138_B = P2^6;
sbit HC138_A = P2^5;
//#########################74HC138选择优化版###########################
void Init_74HC138(unsigned char n)
{
switch(n)
{
case 4:P2 = P2 | 0x1f; P2 = 0x80; break; //Y4选通
case 5:P2 = P2 | 0x1f; P2 = 0xa0; break; //Y5选通
case 6:P2 = P2 | 0x1f; P2 = 0xc0; break; //Y6选通
case 7:P2 = P2 | 0x1f; P2 = 0xe0; break; //Y7选通
}
}
//#####################################################################
void InitSystem(void)
{
//选通Y5 继电器和蜂鸣器 101
HC138_C = 1;
HC138_B = 0;
HC138_A = 1;
//Init_74HC138(5);
P0 = 0x00; //关闭继电器和蜂鸣器
}
void delay(unsigned int t)
{
while(t--);
while(t--);
}
void LedRunning(void)
{
unsigned char i = 0;
//选通Y4 led控制 100
HC138_C = 1;
HC138_B = 0;
HC138_A = 0;
//Init_74HC138(4);
for(i =0;i<3;i++)
{
P0 = 0x00;
delay(20000);
delay(20000);
P0 = 0xff;
delay(20000);
delay(20000);
}
//led 依次点亮
for(i = 0;i<8;i++)
{
P0 = 0xff << i;
delay(2000);
delay(2000);
}
//选通Y5 控制继电器和蜂鸣器
HC138_C = 1;
HC138_B = 0;
HC138_A = 1;
//Init_74HC138(5);
P0 = 0x10; //继电器吸合
//选通Y4 led控制
HC138_C = 1;
HC138_B = 0;
HC138_A = 0;
//Init_74HC138(4);
//Led依次熄灭
for(i = 0;i<8;i++)
{
P0 = ~(0xff <<i);
delay(2000);
delay(2000);
}
//选通Y5 控制继电器和蜂鸣器
HC138_C = 1;
HC138_B = 0;
HC138_A = 1;
//Init_74HC138(5);
P0 = 0x40; //蜂鸣器叫
}
void main(void)
{
InitSystem(); //初始化关闭蜂鸣器和继电器
while(1)
{
LedRunning();
}
}
每天进步一点点 加油 ^@^