04蜂鸣器、继电器

一、打开蜂鸣器500ms,关闭蜂鸣器500ms,打开继电器500ms,关闭继电器500ms

#include<stc15.h>
	unsigned int DT = 500;
	
	void Delay_MS(unsigned int MS);
	void main(void)
	{
		P27=1;P26=0;P25=1;//使能控制蜂鸣器、继电器的74HC573的锁存器
		//P2=0XA0;  1010 0000==P27=1;P26=0;P25=0;
		P0=0X00;  //关闭蜂鸣器、继电器
		P27=1;P26=0;P25=0;//使能控制LED的74HC573的锁存器
		P0=0XFF;//关闭LED
		P27=1;P26=0;P25=1;//使能控制蜂鸣器、继电器的74HC573的锁存器
		//P2=0XA0;  1010 0000==P27=1;P26=0;P25=0;
		P0=0X00;  //关闭蜂鸣器、继电器
		while(1)
		{
			P06=1;Delay_MS(DT);//打开蜂鸣器500MS
			P06=0;Delay_MS(DT);//关闭蜂鸣器500MS
			
			P04=1;Delay_MS(DT);//打开继电器500MS
			P04=0;Delay_MS(DT);//关闭继电器500MS
//			
//			P0=0X40;Delay_MS(DT);打开蜂鸣器500MS
//			P0=0X00;Delay_MS(DT);关闭蜂鸣器500MS
//			
//			P0=0X10;Delay_MS(DT);//打开继电器500MS
//			P0=0X00;Delay_MS(DT);//关闭继电器500MS
		}
	}
	void Delay_MS(unsigned int MS)
{
	unsigned int i,j;
	for(i=0;i<MS;i++)
	{
		for(j=853;j>0;j--);
	}
}

二、上电初始化程序,上电之后,关闭所有的LED,数码管,蜂鸣器,继电器

#include<stc15.h>
 void All_Init(void);
 void main(void)
 {
	 All_Init();
	 while(1);	 
 }
void All_Init(void)
{
	P2=0XA0;//打开蜂鸣器、继电器的74HC573的锁存器
	P0=0X00;//关闭蜂鸣器、继电器
	
	P2=0X80;//打开控制LED的74HC573的锁存器
	P0=0XFF;//关闭LED
	
	P2=0XC0;//打开控制数码管位选的锁存器
	P0=0XFF;//选中所有的数码管
	P2=0XE0;//打开控制数码管段选的锁存器
	P0=0XFF;//关闭所有的数码管
	
//	P2=0XC0;//打开控制数码管位选的锁存器
//	P0=0X00;//不选中所有的数码管
	
}

三、LED先闪3次,再依次点亮,继电器吸合,灯再依次熄灭,最后蜂鸣器叫一下 

#include<reg52.h>
void Delay(unsigned int t);
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 InitHC138(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 LEDRunning()
{
	unsigned char i;
	HC138_C=1;
	HC138_B=0;
	HC138_A=0;  // InitHC138(4);
	for(i=0;i<3;i++)
	{
		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输出低电平 InitHC138(5);
	P0=0X10;   //继电器打开
	Delay(60000);
	Delay(60000);
	P0=0X00;
	
	HC138_C=1;
	HC138_B=0;
	HC138_A=0;
	
	for(i=1;i<=8;i++)
	{
		P0=~(0XFF<<i);
		Delay(60000);
		Delay(60000);
	}
	HC138_A=1;
	HC138_B=0;
	HC138_C=1; //Y5输出低电平
	P0=0X40;   //蜂鸣器打开
	Delay(60000);
	Delay(60000);
	P0=0X00;
	
}
void InitSystem()
{
	HC138_A=1;
	HC138_B=0;
	HC138_C=1; //Y5输出低电平
	P0=0X00;
}

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

四、基于上一段代码的优化

#include<stc15.h>
void Delay(unsigned int t);
sbit HC138_A=P2^5;
sbit HC138_B=P2^6;
sbit HC138_C=P2^7; //用P2=(P2&0X1F)|0X80;,将sbit删除

void Delay(unsigned int t)
{
	while(t--);
	while(t--);
}
void InitHC138(unsigned char n)
{
	switch(n)  //后面不要加;
	{
		case 4:
				HC138_C=1;
				HC138_B=0;
				HC138_A=0;  //P2=(P2&0X1F)|0X80;
		break;
		case 5:
				HC138_C=1;
				HC138_B=0;
				HC138_A=1;  //P2=(P2&0X1F)|0XA0;
		break;
		case 6:
				HC138_C=1;
				HC138_B=1;
				HC138_A=0;  //P2=(P2&0X1F)|0XC0;
		break;
		case 7:
				HC138_C=1;
				HC138_B=1;
				HC138_A=1;  //P2=(P2&0X1F)|0XE0;
		break;
	}
}
void OutPutP0(unsigned char channel,unsigned char dat)
{
	InitHC138(channel);
	P0=dat;
}

void LEDRunning()
{
	unsigned char i;
//	HC138_C=1;
//	HC138_B=0;
//	HC138_A=0;  // InitHC138(4);
	for(i=0;i<3;i++)
	{
		OutPutP0(4,0X00);
		//P0=0X00;
		Delay(60000);
		Delay(60000);
		P0=0XFF;  //OutPutP0(4,0XFF);
		Delay(60000);
		Delay(60000);
	}
	
	for(i=1;i<=8;i++)
	{
		OutPutP0(4,(0XFF<<i));//P0=0XFF<<i;
		Delay(60000);
		Delay(60000);
	}
	HC138_C=1;
	HC138_B=0;
	HC138_A=1; //Y5输出低电平 InitHC138(5);
	P0=0X10;   //继电器打开
	Delay(60000);
	Delay(60000);
	P0=0X00;
	
	HC138_C=1;
	HC138_B=0;
	HC138_A=0;
	
	for(i=1;i<=8;i++)
	{
		P0=~(0XFF<<i);
		Delay(60000);
		Delay(60000);
	}
	HC138_A=1;
	HC138_B=0;
	HC138_C=1; //Y5输出低电平
	P0=0X40;   //蜂鸣器打开
	Delay(60000);
	Delay(60000);
	P0=0X00;
	
}
void InitSystem()
{
	HC138_A=1;
	HC138_B=0;
	HC138_C=1; //Y5输出低电平
	P0=0X00;
}

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

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值