【单片机学习】蜂鸣器与继电器的基本控制

题目:

首先让8路LED灯闪烁三遍后熄灭,接着依次点亮LED灯,继电器吸合一会儿后断开,然后依次熄灭LED灯,蜂鸣器鸣叫一会儿后关闭。

#include "reg52.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;	//让Y5输出低电平
	
	//关闭蜂鸣器、继电器
	P0=0x00; 
}

void Running()
{
	unsigned char i;

	HC138_C=1;
	HC138_B=0;
	HC138_A=0;  //让Y4输出低电平
	
	//闪烁三遍
	for(i=0;i<3;i++)
	{
		P0=0x00;
		delay(60000);
		P0=0xff;
		delay(60000);
	}
	
	//依次点亮
	for(i=1;i<=8;i++)
	{
		P0=0xff<<i;
		delay(60000);
	}

	HC138_C=1;
	HC138_B=0;
	HC138_A=1;  	//让Y5输出低电平
	
	//继电器吸合
	P0=0x10; 
	delay(60000);
	//继电器断开
	P0=0x00; 
	delay(60000);
	
	HC138_C=1;
	HC138_B=0;
	HC138_A=0; //让Y4输出低电平
	
	//依次熄灭
	for(i=1;i<=8;i++) 
	{
		P0=~(0xff<<i);
		delay(60000);
	}
	
	HC138_C=1;
	HC138_B=0;
	HC138_A=1;  //让Y5输出低电平
	
	//蜂鸣器响一会儿
	P0=0x40; 
	delay(60000);
	 //蜂鸣器关闭
	P0=0x00;
	delay(60000);
}

void main()
{
	InitSystem();
	while(1)
	{
		Running();
	}
}

优化一

#include "reg52.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 Init_HC138(unsigned char n)
{
	switch(n)
	{
		case 4:
			HC138_C=1;
			HC138_B=0;
			HC138_A=0; //让Y4输出低电平
		break;
		case 5:
			HC138_C=1;
			HC138_B=0;
			HC138_A=1;	//让Y5输出低电平	
		break;
	}
}

void InitSystem()
{
	Init_HC138(5);	//让Y5输出低电平
	
	//将蜂鸣器、继电器关闭
	P0=0x00; 
}

void Running()
{
	unsigned char i;

	Init_HC138(4);  //让Y4输出低电平
	
	//闪烁三遍
	for(i=0;i<3;i++)
	{
		P0=0x00;
		delay(60000);
		P0=0xff;
		delay(60000);
	}
	
	//依次点亮
	for(i=1;i<=8;i++)
	{
		P0=0xff<<i;
		delay(60000);
	}

	Init_HC138(5);  	//让Y5输出低电平
	
	//继电器闭合
	P0=0x10; 
	delay(60000);
	//继电器断开
	P0=0x00; 
	delay(60000);
	
	Init_HC138(4); //让Y4输出低电平
	
	//依次关闭
	for(i=1;i<=8;i++) 
	{
		P0=~(0xff<<i);
		delay(60000);
	}
	
	Init_HC138(5);  //让Y5输出低电平
	
	//蜂鸣器响一会儿
	P0=0x40; 
	delay(60000);
	 //蜂鸣器关闭
	P0=0x00;
	delay(60000);
}

void main()
{
	InitSystem();
	while(1)
	{
		Running();
	}
}

优化二

#include "reg52.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 Init_HC138(unsigned char n)
{
	switch(n)
	{
		case 4:
			HC138_C=1;
			HC138_B=0;
			HC138_A=0; //让Y4输出低电平
		break;
		case 5:
			HC138_C=1;
			HC138_B=0;
			HC138_A=1;	//让Y5输出低电平	
		break;
	}
}

void OutPutP0(unsigned char channel,unsigned char dat)
{
	Init_HC138(channel);
	P0=dat;
}

void InitSystem()
{
	//将蜂鸣器、继电器关闭
	OutPutP0(5,0x00); //让Y5输出低电平
}

void Running()
{
	unsigned char i;
	
	//闪烁三遍
	for(i=0;i<3;i++)
	{
		OutPutP0(4,0x00); //让Y4输出低电平
		delay(60000);
		OutPutP0(4,0xff); 
		delay(60000);
	}
	
	//依次点亮
	for(i=1;i<=8;i++)
	{
		OutPutP0(4,(0xff<<i)); 
		delay(60000);
	}
	
	//继电器吸合
	OutPutP0(5,0x10); //让Y5输出低电平
	delay(60000);
	//继电器断开
	OutPutP0(5,0x00); 
	delay(60000);
	
	//依次熄灭
	for(i=1;i<=8;i++) 
	{
		OutPutP0(4,~(0xff<<i));  //让Y4输出低电平
		delay(60000);
	}  
	
	//蜂鸣器响一会儿
	OutPutP0(5,0x40); //让Y5输出低电平
	delay(60000);
	//蜂鸣器关闭
	OutPutP0(5,0x00); 
	delay(60000);
}

void main()
{
	InitSystem();
	while(1)
	{
		Running();
	}
}

优化三

#include "reg52.h"

//延时函数
void delay(unsigned int t)
{
	while(t--);
	while(t--);
}

//选择锁存器
void Init_HC138(unsigned char n)
{
	switch(n)
	{
		case 4:
			P2=(P2&0x1f)|0x80; //让Y4输出低电平
            //先让P2与上0001 1111(0x1f),可将高三位清零;
            //再或上1000 0000(0x80),可将高三位置为100,即选择Y4
		break;
		case 5:
			P2=(P2&0x1f)|0xa0;	//让Y5输出低电平	
            //先让P2与上0001 1111(0x1f),可将高三位清零;
            //再或上1010 0000(0xa0),可将高三位置为101,即选择Y5
		break;
	}
}

void OutPutP0(unsigned char channel,unsigned char dat)
{
	Init_HC138(channel);
	P0=dat;
}

void InitSystem()
{
	//将蜂鸣器、继电器关闭
	OutPutP0(5,0x00); //让Y5输出低电平
}

void Running()
{
	unsigned char i;
	
	//闪烁三遍
	for(i=0;i<3;i++)
	{
		OutPutP0(4,0x00); //让Y4输出低电平
		delay(60000);
		OutPutP0(4,0xff); 
		delay(60000);
	}
	
	//依次点亮
	for(i=1;i<=8;i++)
	{
		OutPutP0(4,(0xff<<i)); 
		delay(60000);
	}
	
	//继电器吸合
	OutPutP0(5,0x10); //让Y5输出低电平
	delay(60000);
	//继电器断开
	OutPutP0(5,0x00); 
	delay(60000);
	
	//依次熄灭
	for(i=1;i<=8;i++) 
	{
		OutPutP0(4,~(0xff<<i));  //让Y4输出低电平
		delay(60000);
	}  
	
	//蜂鸣器响一会儿
	OutPutP0(5,0x40); //让Y5输出低电平
	delay(60000);
	//蜂鸣器关闭
	OutPutP0(5,0x00); 
	delay(60000);
}

void main()
{
	InitSystem();
	while(1)
	{
		Running();
	}
}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值