迈向赛场的第二步:编写蜂鸣器和继电器停止代码

前几天刚打完广东省职业技能竞赛 现在的打算就是 剩下不到的一个月主要准备蓝桥杯 然后学硬件基础、高数、数电,准备电赛了。
今天跟了一下小蜜蜂老师的蓝桥杯第二节基础课程(确实是进度有点慢)。
之前就一直困扰在蜂鸣器一直响 很烦 这次刚好 解决了这个问题。
板上的这些元器件 还是可以通过简单直接的方法配置引脚来写代码.
思路是这样的:(当时写代码之前做的笔记)
继电器一上电就吸合,蜂鸣器一上电就鸣叫

所以目标是把蜂鸣器(SP2)的2脚配置到高电平 给N_BUZZ一个1
把继电器(K1)的4配置到低电平 给N_Relay一个1

想给这两个引脚配置高低电平需要配置 U10ULN2003
原理图上的这两个引脚 对应到的上一个控制芯片是74HC573
U10的配置需要对U9进行配置
U9是74HC573芯片
要给U9的11一个高电平
配置Y5C
代码实现:
P42(WR)=0;
A0=1;A1=0;A2=1;D4=1;D6=1;

(其实在写代码的时候有点不明白为啥要给继电器也给1)

这次主要用到了switchcase语句来写配置Y?C的通道来控制是“LED模式”还是“蜂鸣器和继电器模式”。
我又啥想法就直接编写啥想法了 也没有对代码进行简化 以下将展示我写的代码(涵盖跟着小蜜蜂老师改进的代码)。
一:主函数

include <STC15F2K60S2.H>

include "Delay.h"

include "LEDRunning.h"

include "Systen_Init.h"

include "ComponentsRunning.h"

void main()
{
Systen_Init();
LEDRunning();
BuzzerRunning_F(500);
Relay_Running_F(1000);
}
/由于我将很多代码都模块化了 所以这里的主函数只需要引用一堆头文件 然后直接调用我自己定义的函数就行了 代码可以实现 一排LED一起点亮 然后闪烁3下 接着流水灯一排 然后继电器吸合一会 最后蜂鸣器鸣响一下/

二:元器件初始化函数

include <STC15F2K60S2.H>

include "HC138Init.h"

/*
写这个函数的目的是为了将初始化板子上的一些硬件模块
将继电器配置为不吸合状态
将蜂鸣器配置为不鸣叫状态
*/

sbit D4=P0^4;
sbit D6=P0^6;
void Systen_Init()
{
HC138_Init(4);
D4=0;//D4是继电器D6是蜂鸣器
D6=0;//我现在也不是很清楚为啥要给这俩位0才能关上这俩器件的使能 但是 事实如此 就这样先记着
}

void OutPutP0(unsigned char chanel,unsigned char dat)
{
HC138_Init(chanel);
P0=dat;
}//其中这个函数是小蜜蜂老师写的 非常好的一个函数 这个函数成功用两个数就完成了好几行代码的功能 做到了选择模式和配置IO口数字的功能
/*
这个函数的调用可以将继电器和蜂鸣器的状态由一上电就默认开启 改为使这两个器件不工作 最底层的原理是给这两个元件的引脚都一个高电平 使得他们都没有高低电平电信号
*/
三:延时函数
(这个没啥好介绍的 就直接跳过了)
四:LED跑马灯函数(修改版)

include <STC15F2K60S2.H>

include "Delay.h"

include "HC138Init.h"

include "Systen_Init.h"

void LEDRunning()
{
unsigned char i;

for(i=0;i<3;i++)
{
OutPutP0(4,0x00);
Delay(250);
OutPutP0(4,0xff);
Delay(250);
}
for(i=0;i<=8;i++)
{
	OutPutP0(4,(0xff<<i));
	Delay(100);
}
for(i=0;i<=8;i++)
{
	OutPutP0(4,~(0xff<<i));
	Delay(100);	
}

}
/*
这个函数是经过了第一课的跑马灯函数编写的封装和优化后的函数
*/
五:元器件允许工作函数

include <STC15F2K60S2.H>

include "Delay.h"

include "Systen_Init.h"

include "HC138Init.h"

void BuzzerRunning_F(unsigned int xms)
{
// unsigned int X;
OutPutP0(5,0x20);
Delay(xms);
Systen_Init();
}

void Relay_Running_F(unsigned int xms)
{
OutPutP0(5,0x80);
Delay(xms);
Systen_Init();
}
/*
调用这个函数的时候 蜂鸣器和继电器这两个元件就会被允许工作 做出相应的反应
*/
六:HC138选择函数

include <STC15F2K60S2.H>

sbit HC138_A=P2^5;
sbit HC138_B=P2^6;
sbit HC138_C=P2^7;
sbit WR_138=P4^2;

void HC138_Init(unsigned char x)
{
switch (x)
{
case 4:
WR_138=0;
HC138_A=1;
HC138_B=0;
HC138_C=0;
break;

	case 5:
	WR_138=0;
	HC138_A=1;
	HC138_B=0;
	HC138_C=1;	
	break;
	
	case 6:	
	WR_138=0;			
	HC138_A=1;
	HC138_B=1;
	HC138_C=0;
	break;	
	
	case 7:
	WR_138=0;
	HC138_A=1;
	HC138_B=1;
	HC138_C=1;
	break;		
}

}
/*
调用这个函数 就可以选择是Y4C还是Y5C 也就是选择“跑马灯”还是“继电器蜂鸣器”
*/

博客就先写到这 距离蓝桥杯越来越快了 祝我越来越好 最终拿下一个理想的结果

posted on 2025-03-20 01:46  bright彬  阅读(65)  评论(1)    收藏  举报