【蓝桥杯单片机2】蜂鸣器与继电器的基本控制

本节要实现的内容:在单片机综合训练平台上实现蜂鸣器与继电器的基本控制,首先让8路LED指示灯闪烁3遍后熄灭,接着依次点亮LED指示灯,继电器吸合一会后断开,然后依次熄灭LED指示灯,蜂鸣器鸣叫一会后关闭,程序循环实现上述功能。


1.蜂鸣器与继电器电路原理图

 由原理图可知:

        1、蜂鸣器:要使蜂鸣器响,(锁存器)P06输出1,(74HC138)Y5输出低电平。

2.代码实现(复杂代码,直接实现)

/************************************************************************
实验现象:实现蜂鸣器与继电器的基本控制,首先让8路LED指示灯闪烁3遍后熄灭,
					接着依次点亮LED指示灯,继电器吸合一会后断开,然后依次熄灭LED指
					示灯,蜂鸣器鸣叫一会后关闭,程序循环实现上述功能。
************************************************************************/
#include "reg52.h"
#include "intrins.h"

sbit HC138_A = P2^5;
sbit HC138_B = P2^6;
sbit HC138_C = P2^7;

//延时函数
void Delay(unsigned int t)	//延时程序,什么都不干,执行许多空的指令
{
	while(t--);
	while(t--);								//再循环一遍
}
//初始化系统
void InitSystem()					
{
   HC138_C=1;
   HC138_B=0;
   HC138_A=1;
   P0=0x00;							//蜂鸣器,继电器都关闭
}

//Led控制函数
void Led_Proc()
{
	unsigned char i;
	HC138_C = 1;
	HC138_B = 0;
	HC138_A = 0;
	
	for(i = 0; i < 3; i++)			//让LED灯闪烁3遍
	{
		P0 = 0x00;
		Delay(60000);
		Delay(60000);
		P0 = 0xff;
		Delay(60000);
		Delay(60000);
	}
	
	for(i = 1; i <= 8; i++)			//移位使灯依次点亮
	{
		P0 = 0xff << i;
		Delay(60000);
		Delay(60000);
	}
	
		HC138_C = 1;
		HC138_B = 0;
		HC138_A = 1;	//Y5输出低电平
		P0 = 0x10;		//继电器p04吸合
		Delay(60000);
		Delay(60000);
		P0 = 0x00;		//继电器关
	
		HC138_C = 1;
		HC138_B = 0;
		HC138_A = 0;	//Y4输出低电平
		for(i = 1; i <= 8; i++)			//移位使灯依次熄灭
		{
			P0 = ~(0xff << i);
			Delay(60000);
			Delay(60000);
		}
		
		HC138_C = 1;
		HC138_B = 0;
		HC138_A = 1;	//Y5输出低电平
		P0 = 0x40;		//蜂鸣器p06开
		Delay(60000);
		Delay(60000);
		P0 = 0x00;		//继电器关
}

//主函数
void main(void)
{
		InitSystem();
    while(1)
    {
			Led_Proc();
		
		}
}

3.代码优化

/************************************************************************
实验现象:实现蜂鸣器与继电器的基本控制,首先让8路LED指示灯闪烁3遍后熄灭,
					接着依次点亮LED指示灯,继电器吸合一会后断开,然后依次熄灭LED指
					示灯,蜂鸣器鸣叫一会后关闭,程序循环实现上述功能。
************************************************************************/
#include "reg52.h"
#include "intrins.h"


//延时函数
void Delay(unsigned int t)	//延时程序,什么都不干,执行许多空的指令
{
	while(t--);
	while(t--);								//再循环一遍
}

void HC138_state(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;		
	}
	
}
//初始化系统
void InitSystem()					
{
	HC138_state(5);
	P0=0x00;							//蜂鸣器,继电器都关闭
}

void OutP0_Proc(unsigned char channel,unsigned char dat)
{
	HC138_state(channel);
	P0 = dat;
}
//Led控制函数
void Led_Proc()
{
	unsigned char i;

	for(i = 0; i < 3; i++)			//让LED灯闪烁3遍
	{
		OutP0_Proc(4,0x00);
		Delay(60000);
		Delay(60000);
    OutP0_Proc(4,0xff);
		Delay(60000);
		Delay(60000);
	}
	
	for(i = 1; i <= 8; i++)			//移位使灯依次点亮
	{
		OutP0_Proc(4,0xff << i);
		Delay(60000);
		Delay(60000);
	}
	
		OutP0_Proc(5,0x10);		//继电器p04吸合 00010000
		Delay(60000);
		Delay(60000);
		OutP0_Proc(5,0x00);//继电器关
	

		for(i = 1; i <= 8; i++)			//移位使灯依次熄灭
		{
		OutP0_Proc(4,~(0xff << i));
			Delay(60000);
			Delay(60000);
		}
		

    OutP0_Proc(5,0x40);//蜂鸣器p06开  01000000
		Delay(60000);
		Delay(60000);
		OutP0_Proc(5,0x00);//继电器关
}

//主函数
void main(void)
{
		InitSystem();
    while(1)
    {
			Led_Proc();
		
		}
}

        另外,以下两段代码等同。

sbit HC138_A = P2^5;
sbit HC138_B = P2^6;
sbit HC138_C = P2^7;

void HC138_state(unsigned char n)
{
	switch(n)
	{
		case 4:
		 HC138_C=1;
		 HC138_B=0;
		 HC138_A=0;	
		break;		
		case 5:
		 HC138_C=1;
		 HC138_B=0;
		 HC138_A=1;
		break;		
		case 6:
		 HC138_C=1;
		 HC138_B=1;
		 HC138_A=0;
		break;		
		case 7:
		 HC138_C=1;
		 HC138_B=1;
		 HC138_A=1;	
		break;		
	}
	
}
void HC138_state(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;		
	}
	
}

解释:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值