蓝桥杯基础模块2:蜂鸣器继电器

一、模块题目

蓝桥杯基础模块2:蜂鸣器继电器_第1张图片

二、原理简述

1、74HC138(参见模块1)
蓝桥杯基础模块2:蜂鸣器继电器_第2张图片
2、74HC02(参见模块1)
3、74HC573(参见模块1)
蓝桥杯基础模块2:蜂鸣器继电器_第3张图片
4、ULN2003(内部有非门)
蓝桥杯基础模块2:蜂鸣器继电器_第4张图片
5、BUZZER蜂鸣器
蓝桥杯基础模块2:蜂鸣器继电器_第5张图片
6、RELAY继电器
蓝桥杯基础模块2:蜂鸣器继电器_第6张图片

三、源码

//头文件:
#include "reg52.h"
//延时函数:
void Delay(unsigned int t)
{
     
	while(t--);
	while(t--);
}
//HC138的选择输出引脚(代码优化)
void InitHC138(unsigned char n)
{
     
	switch(n)
	{
     
		case 4:
			P2 = (P2 & 0X1f) | 0x80;
		break;
		case 5:
			P2 = (P2 & 0X1f) | 0xa0;
		break;
		case 6:
			P2 = (P2 & 0X1f) | 0xc0;
		break;
		case 7:
			P2 = (P2 & 0X1f) | 0xe0;
		break;
	}
}
/* P2 & 0X1f  :位操作中的“与”操作,使P2口高三位清零,低5位保持原来的值,即只将74HC138三个输入引脚P2^5,P2^6,P2^7清零;
(P2 & 0X1f) | 0x80  :即与1000,0000相或,即给P2^7赋值1,此时74HC138输入三个引脚即对应为100,即使4为低电平。
其余switch语句类似。
*/
//P0口赋值(代码优化)
void OutPutP0(unsigned char channel, unsigned char dat)
{
     
	InitHC138(channel);
	P0 = dat;
}
//主要程序编写
void LEDRunning()
{
     
	unsigned char i;
	
	for(i = 0; i < 3; i++)
	{
     
		OutPutP0(4,0x00);
		Delay(60000);
		Delay(60000);
		OutPutP0(4,0xff);
		Delay(60000);
		Delay(60000);
	}							//LED全部亮三次
	
	for(i = 1; i <= 8; i++)
	{
     
		OutPutP0(4,(0xff << i));
		Delay(60000);
	}							//LED逐个点亮一次
	
	OutPutP0(5,0x10);			//继电器亮
	Delay(60000);
	Delay(60000);
	OutPutP0(5,0x00);			//继电器灭
	
	InitHC138(4);
	for(i = 1; i <= 8; i++)
	{
     
		OutPutP0(4,~(0xff << i));
		Delay(60000);
	}							//LED逐个熄灭一次
	
	OutPutP0(5,0x40);			//蜂鸣器响
	Delay(60000);
	Delay(60000);
	OutPutP0(5,0x00);			//蜂鸣器不响
}

void InitSystem()
{
     
	OutPutP0(5,0x00);		//初始状态函数,使蜂鸣器继电器一开始不工作
}
//主函数框架:
void main()
{
     
	InitSystem();
	while(1)
	{
     
		LEDRunning();
	}
}

四、开发板运行结果

首先,蜂鸣器不响,继电器不亮,LED亮三次;
然后,LED逐个被点亮,继电器闪烁一次;
最后,LED逐个熄灭,蜂鸣器响一次。
如此循环。

你可能感兴趣的:(单片机,蓝桥杯,单片机,实例,教程)