基于51单片机蓝牙开关控制家电系统Word下载.docx
《基于51单片机蓝牙开关控制家电系统Word下载.docx》由会员分享,可在线阅读,更多相关《基于51单片机蓝牙开关控制家电系统Word下载.docx(13页珍藏版)》请在冰点文库上搜索。
蓝牙通信单元采用工业级的HC-05蓝牙模块来完成,蓝牙模块在整个系统中负责蓝牙指令的接收和传输;
家电开关的自动控制部分采用继电器开关来实现,继电器开关是典型的弱电信号控制型开关。
二.设计原理
采用手机蓝牙终端进行遥控控制,系统通过手机蓝牙实现家用电器开关的遥控开启和关闭,采用此方案进行设计的硬件框图如图所示
三.设计过程
采用直流电源同时增加LDO电源管理芯片进行系统的稳压,由于系统单片机需要直流5V电压供电,HC-05蓝牙模块需要3.3V直流电源供电,因而系统采用单一的电源不能同时满足单片机和蓝牙模块的电压需求,系统电源管理电路需要增加5V和3.3V的电压管理芯片,系统采用直流9V供电,5V电压输出采用LM7805稳压芯片稳压后输出给单片机及板上的5V电压系统供电,3.3V的电压采用RT9193-3.3V稳压输出给系统的HC-05蓝牙模块供电。
系统电源电路主要包括5V稳压输出电路,5V转3.3V稳压电路,电源滤波电路和电源输出指示电路。
系统9V转直流5V电压部分电路如图a所示,5V转3.3V稳压电路如图b所示。
图单片机最小系统电路图
控制电路采用继电器控制实现。
继电器控制电路采用弱电控制强电的工作原理,单片机通过控制继电器的断开和吸合来控制外接家电的通断,具体控制电路如图所示。
图继电器控制电路图
系统软件设计采用C语言编程,编译环境为Keil。
系统主程序主要包括系统的初始化、蓝牙串口通信、信号的输出控制等,系统主程序流程图如图所示
Y
系统蓝牙通信模块子程序主要完成手机蓝牙指令的接收以及和单片机直接的数据通信等,此部分程序的完成是整个系统软件设计成功与否的关键所在。
图4-2为系统蓝牙通信子程序流程图。
图系统蓝牙通信子程序流程图
四.注意事项
1、首先先不要插芯片,要先测量一下各点的电压,尤其是单片机工作电压,蓝牙模块电路工作电压,在保证模块工作电压正常的前提下再安插主要先芯片,不然会烧坏芯片或者模块造成不可挽回的损失;
2、系统工作之前首先要对蓝牙模块进行测试,保证蓝牙模块能够实现正常的指令收发功能。
蓝牙遥控测试主要完成继电器的开启和关闭,手机蓝牙指令“Y”控制继电器的的开启和关闭,手机蓝牙发送指令“Y”一次继电器1吸合,,再次发送指令“Y”继电器断开。
五.系统源程序
(多路继电器控制家电)
#include"
main.h"
LCD12864.h"
uart.h"
//定义变量
//****************************************************
//主函数
voidmain()
{
LCD12864_Reset();
//初始化液晶
LCD12864_HAIZI_SET();
//设置为普通模式
Relay1=Relay2=Relay3=Relay4=0;
//初始化设置为0,不吸合
Delay_ms(100);
Uart_Init();
while
(1)
{
Relay1=Flag_Relay1;
Relay2=Flag_Relay2;
Relay3=Flag_Relay3;
Relay4=Flag_Relay4;
if(Flag_Relay1==1)
LCD12864_NoWaitIdle_COM_Write(0x80);
//设置指针
LCD12864_write_word("
冰箱状态:
开"
);
}
else
关"
if(Flag_Relay2==1)
LCD12864_NoWaitIdle_COM_Write(0x90);
空调状态:
if(Flag_Relay3==1)
LCD12864_NoWaitIdle_COM_Write(0x88);
电视状态:
if(Flag_Relay4==1)
LCD12864_NoWaitIdle_COM_Write(0x98);
灯泡状态:
}
//MS延时函数(12M晶振下测试)
voidDelay_ms(unsignedintn)
unsignedinti,j;
for(i=0;
i<
n;
i++)
for(j=0;
j<
123;
j++);
//unsignedcharRX_Buffer[30];
unsignedcharNum=0;
bitFlag_Relay1=0;
bitFlag_Relay2=0;
bitFlag_Relay3=0;
bitFlag_Relay4=0;
unsignedchartemp=0;
voidUart_Init()
SCON=0X50;
//UART方式1;
8位UART
REN=1;
//不允许串行口接收数据
PCON=0x00;
//SMOD=0;
波特率不加倍
TMOD=0x20;
//T1方式2,用于产生波特率
TH1=0xFD;
//装初值
TL1=0xFD;
TR1=1;
//启动定时器1
EA=1;
//打开全局中断控制
ES=1;
//串行口中断
voidUartPrintf(unsignedchar*p)//发送字符串
{
while(*p)
{
SBUF=*(p++);
while(TI==0)
;
};
TI=0;
}
voidUartPrintASCII(unsignedcharc)//发送一个字符
TI=0;
SBUF=c;
while(TI==0);
voidRECEIVE_DATA(void)interrupt4using1//串口中断
if(RI==1)
{
temp=SBUF;
if(temp=='
A'
)
Flag_Relay1=!
Flag_Relay1;
UartPrintf("
ReceiveA"
}
elseif(temp=='
B'
Flag_Relay2=!
Flag_Relay2;
ReceiveB"
C'
Flag_Relay3=!
Flag_Relay3;
ReceiveC"
D'
Flag_Relay4=!
Flag_Relay4;
ReceiveD"
RI=0;