基于51单片机蓝牙智能控制风扇-proteus仿真-源程序

基于51单片机蓝牙智能控制风扇-proteus仿真-源程序
一、系统方案
1、本设计采用51单片机作为主控器。
2、DS18B20采集温度值送到液晶1602显示。
3、按键设置上下限,自动模式,低于下限,风扇不启动,下限到上限之间,风扇1档,大于上限风扇2档。
4、手动模式,按键控制档位切换。
5、蓝牙模式,手机APP控制档位切换。
在这里插入图片描述

二、硬件设计
原理图如下:
在这里插入图片描述

三、单片机软件设计
1、首先是系统初始化

void lcd_init()//液晶初始化函数*
{
uchar a;
write_1602com(0x38);//设置液晶工作模式,意思:162行显示,57点阵,8位数据
write_1602com(0x0c);//开显示不显示光标
write_1602com(0x06);//整屏不移动,光标自动右移
write_1602com(0x01);//清显示

write_1602com(0x80);//日历显示固定符号从第一行第1个位置之后开始显示
for(a=0;a<16;a++)
{
	write_1602dat(tab1[a]);//向液晶屏写日历显示的固定符号部分
	delay(3);
}
write_1602com(0x80+0x40);//时间显示固定符号写入位置,从第2个位置后开始显示
for(a=0;a<16;a++)
{
	write_1602dat(tab2[a]);//写显示时间固定符号,两个冒号
	delay(3);
}

}
2、液晶显示程序
void write_1602com(uchar com)//液晶写入指令函数
{
RS=0;//数据/指令选择置为指令
rw=0; //读写选择置为写
LCD1602=com;//送入数据
delay(1);
EN=1;//拉高使能端,为制造有效的下降沿做准备
delay(1);
EN=0;//en由高变低,产生下降沿,液晶执行命令
}

void write_1602dat(uchar dat)//液晶写入数据函数*
{
RS=1;//数据/指令选择置为数据
rw=0; //读写选择置为写
LCD1602=dat;//送入数据
delay(1);
EN=1; //en置高电平,为制造下降沿做准备
delay(1);
EN=0; //en由高变低,产生下降沿,液晶执行命令
}

3、按键程序
void KEY()
{
//功能键
if(SET==0)
{

	delay(10);
	if(SET==0)
	{
		Mode++;
		if(Mode==3)
		Mode=0;
	
	}
	while(SET==0)
	{
		if(Mode==0)
			{
			//	write_1602com(0x80+0x40+6);
				write_1602com(0x0c);
			}	
		else if(Mode==1)
			{
				write_1602com(0x80+0x40+4);
				write_1602com(0x0f);
			}	
		else
			{
				write_1602com(0x80+0x40+13);
				write_1602com(0x0f);
			}							
	}
}
//增加
if(ADD==0&&Mode==1)
{

	delay(10);
	if(ADD==0)	
	{
		TH++;
		if(TH>=99)	
		TH=99;
		write_1602com(0x80+0x40+3);
		write_1602dat(TH/10+0x30);
		write_1602dat(TH%10+0x30);
		write_1602com(0x80+0x40+4);	
		
	}
	while(ADD==0);
	
}
//减少
if(DEC==0&&Mode==1)
{
	
	delay(10);
	if(DEC==0)
	{
		TH--;
		if(TH==TL)	
		TH=TL+1;
		write_1602com(0x80+0x40+3);
		write_1602dat(TH/10+0x30);
		write_1602dat(TH%10+0x30);
		write_1602com(0x80+0x40+4);	
		
	}
	while(DEC==0);
}
if(ADD==0&&Mode==2)
{
	
	delay(10);
	if(ADD==0)	
	{
		TL++;
		if(TL==TH)	
		TL=TH-1;
		write_1602com(0x80+0x40+12);
		write_1602dat(TL/10+0x30);
		write_1602dat(TL%10+0x30);
		write_1602com(0x80+0x40+13);	
	
	}
	while(ADD==0);
	
}
//减少
if(DEC==0&&Mode==2)
{

	delay(10);
	if(DEC==0)
	{
		TL--;
		if(TL<=0)	
		TL=0;
		write_1602com(0x80+0x40+12);
		write_1602dat(TL/10+0x30);
		write_1602dat(TL%10+0x30);
		write_1602com(0x80+0x40+13);	
	
	}
	while(DEC==0);		
}
//增加
if(key1==0)
{

	delay(10);
	if(key1==0)	
	{
		//led=!led;
		number++;
		if(number>2) number=0;
		dangwei2 = 0;
		PWM2=1;
		TR0=0;
		pwm1(0); //控制PWM输出,进而控制电机的速度
	}
	while(key1==0);
	
}
if(key2==0)
{

	delay(10);
	if(key2==0)	
	{
		s1num++;
		if(s1num>2) s1num=0;
	}
	while(key2==0);
	
}

}
4、核心算法程序
if(number0)
{
led1=1;led2=1;
}
if(number
1)
{
led1=0;led2=1;
}
if(number2)
{
led1=1;led2=0;
}
if(number
1)
{
if(receiveData==‘1’)
{
dangwei2 = 1;

		   PWM2=0;
		   TR0=1;
		   pwm1(50); //控制PWM输出,进而控制电机的速度
			}
		 if(receiveData=='2')
			{
			    dangwei2 = 2;

		    PWM2=0;
		   TR0=1;
		  pwm1(100); //控制PWM输出,进而控制电机的速度
			}
			if(receiveData=='0')
			{
			    dangwei2 = 0;

		    PWM2=1;
		   TR0=0;
		  pwm1(0); //控制PWM输出,进而控制电机的速度
			}
		}	
	 if(number==2)
		{
			 if(s1num==1)
			{
			     dangwei2 = 1;

		   PWM2=0;
		   TR0=1;
		   pwm1(50); //控制PWM输出,进而控制电机的速度
			}
		  if(s1num==2)
			{
			    dangwei2 = 2;

		    PWM2=0;
		   TR0=1;
		  pwm1(100); //控制PWM输出,进而控制电机的速度
			}
			 if(s1num==0)
			{
			    dangwei2 = 0;

		    PWM2=1;
		   TR0=0;
		  pwm1(0); //控制PWM输出,进而控制电机的速度
			}
		}		

四、 proteus仿真设计
Proteus软件是一款应用比较广泛的工具,它可以在没有硬件平台的基础上通过自身的软件仿真出硬件平台的运行情况,这样就可以通过软件仿真来验证我们设计的方案有没有问题,如果有问题,可以重新选择器件,连接器件,直到达到我们设定的目的,避免我们搭建实物的时候,如果当初选择的方案有问题,我们器件都已经焊接好了,再去卸载下去,再去焊接新的方案的器件,测试,这样会浪费人力和物力,也给开发者带来一定困惑,Proteus仿真软件就很好的解决这个问题,我们在设计之初,就使用该软件进行模拟仿真,测试,选择满足我们设计的最优方案。最后根据测试没问题的仿真图纸,焊接实物,调试,最终完成本设计的作品。
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bbxyliyang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值