单片机蜂鸣器和继电器的基本控制附详细程序与零基础注释

该文详细描述了一个使用CT107D单片机实现的功能程序,包括系统上电后关闭蜂鸣器和继电器,8个LED灯的闪烁、依次点亮和熄灭,以及继电器的吸合和断开,最后是蜂鸣器的鸣叫。程序通过74HC138进行地址选择,并利用延时函数控制操作顺序。
摘要由CSDN通过智能技术生成

        在 CT107D 单片机综合训练平台上,实现以下功能:

        1、系统上电后,关闭蜂鸣器,关闭继电器,关闭 8 个 LED 灯。

        2、循环实现以下功能:

                首先,8 个 LED 灯同时闪烁 3 次;

                接着,从 L1 灯至 L8 灯依次点亮;

                然后,继电器吸合,延时片刻,继电器断开;

                接着,从 L1 灯至 L8 灯依次熄灭;

                最后,蜂鸣器鸣叫一会后关闭。

以下是详细的程序与注释

#include "reg52.h"  //引用头文件

sbit HC138_A=P2^5;	 //将74HC138的A端口与单片机的P2^5连接起来
sbit HC138_B=P2^6;	 //将74HC138的B端口与单片机的P2^6连接起来
sbit HC138_C=P2^7;	 //将74HC138的C端口与单片机的P2^7连接起来



//延迟函数
void Delay(unsigned int t)
{
	while(t--);
}



//选择锁存器的函数,就是Y几输出低电平,Y4输出高电平控制74HC573锁存器,Y5输出高电平控制继电器蜂鸣器
void initHC138(unsigned char n)
{
	switch(n)
	{
		case 4:	//选择Y4输出高电平
			HC138_A=0;
			HC138_B=0;
			HC138_C=1;
		break;

		case 5: //选择Y5输出高电平
			HC138_A=1;
			HC138_B=0;
			HC138_C=1;
		break;
	}

}



//选择Y几输出高电平,且选择P0端口输出多少
void outputP0(unsigned char channel,unsigned char dat)
{
  initHC138(channel);
  P0=dat;

}




//LED点亮与熄灭	,继电器蜂鸣器打开与关闭
void LEDrunning()
{
	unsigned char i;//定义变量i


	//LED灯闪烁三次
	for(i=0;i<=3;i++)
	{
		outputP0(4,0x00);   //选择Y4输出高电平,P0端口输出十六进制00(二进制的00000000)点亮LED灯
		Delay(60000);
		Delay(60000);
		outputP0(4,0xff);	 //选择Y4输出高电平,P0端口输出十六进制ff(二进制的11111111)熄灭LED灯
		Delay(60000);
		Delay(60000);	
	}



	//LED灯逐个点亮
	for(i=0;i<=8;i++)
	{
		outputP0(4,(0xff<<i));//选择Y4输出高电平,<<左移运算符,将P0从11111111,设置到00000000
		Delay(60000);
		Delay(60000);
	}



	//打开继电器后关闭
	outputP0(5,0x10);//选择Y5输出高电平,P0端口输出00010000,让P04引脚变为1,继电器吸合 
	Delay(60000);
	Delay(60000);
	outputP0(5,0x00); //选择Y5输出高电平,P0端口输出00000000,让P04引脚变为0,继电器断开




	//LED灯逐个熄灭
	for(i=0;i<=8;i++)
	{
		outputP0(4,(~(0xff<<i)));//选择Y4输出高电平,使单片机控制LED灯
		Delay(60000);
		Delay(60000);
	}



	//打开蜂鸣器后关闭
	outputP0(5,0x40);//选择Y4输出高电平(控制蜂鸣器),让P04引脚变为1,打开蜂鸣器
	Delay(60000);
	Delay(60000);
	outputP0(5,0x00);//选择Y4输出高电平,让P04引脚变为0,关闭蜂鸣器
}





void initsystem()
{
	outputP0(5,0x00);//选择Y5输出高电平,让P0引脚全变为0,把所有的无关设备关闭		
}





//在主函数中执行
void main()
{
	initsystem();
  	while(1)//while语句当括号内为1执行大括号内语句,为0停止执行大括号内语句,while(1)括号内一直为1,所以此while循环会一直执行下去
	{
	   LEDrunning();
	}
	
}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值