基于51单片机的蓝牙智能光控窗帘Word下载.docx
- 文档编号:8247914
- 上传时间:2023-05-10
- 格式:DOCX
- 页数:26
- 大小:318.91KB
基于51单片机的蓝牙智能光控窗帘Word下载.docx
《基于51单片机的蓝牙智能光控窗帘Word下载.docx》由会员分享,可在线阅读,更多相关《基于51单片机的蓝牙智能光控窗帘Word下载.docx(26页珍藏版)》请在冰点文库上搜索。
接口的集成?
路,可以根据收集的光?
据?
行?
境?
,其具有1~65535x的高分辨率,可支持?
大范?
的光照?
化。
BH1750FVI?
构框?
如?
1所示。
1BH1750FVI?
可容易看出,外部光照被接近人眼反?
的高精度光敏二极管PD探?
到后,通?
集成?
算放大器?
PD?
流?
,由模?
器?
取16位?
字?
据,然后被?
和IC界面?
理与存?
OSC?
部的振?
器提供?
部?
,通?
相?
的指令操作即可?
取出?
部存?
据。
使用?
准的I2C?
,按照?
序要求操作起?
也非常方便。
2.?
感器:
DHT11?
感器是一款含有已校准?
字信?
出的?
度复合?
感器。
它?
用?
用的?
字模?
采集技?
感技?
,确保?
品具有极高的可靠性与卓越的?
期?
定性。
感器包括一?
阻式感?
元件和一?
NTC?
元件,并与一?
高性能8位?
片机相?
接。
因此?
品具有品?
卓越、超快?
、抗干扰能力?
、性价比极高等优?
每?
DHT11?
感器都在极?
精确的?
度校?
室中?
行校准。
校准系?
以程序的形式?
存在OTP?
存中,?
部在?
信?
理?
程中要?
些校准系?
制串行接口,使系?
得?
易快捷。
超小的体?
、极低的功耗,信?
距离可?
20米以上,使其成?
各?
用甚至最?
苛刻的?
合的最佳?
品?
4?
排引?
封?
接方便,特殊封?
形式可根据用?
需求而提供。
3.?
L298N的?
明及?
用
恒?
恒流?
式2A?
芯片L298NL298是SGS公司的?
品,比?
常?
的是15?
Multiwatt封?
的L298N,?
部同?
包含4通道?
路。
可以方便的?
直
机,或一?
相步?
机。
L298N芯片可以?
二相?
机,也可以?
一?
四相?
机,?
出?
最高可?
50V,可以直接通?
源?
;
可以直接用
片机的IO口提供信?
而且?
路?
,使用比?
方便。
L298N可接受?
准TTL?
平信?
VSS,VSS可接4.5~7V?
4?
VS接?
,VS?
范?
VIH?
+2.5~46V。
流可?
2A,可?
感性?
1?
和15?
下管的?
射极分?
引出以
便接入?
流采?
阻,形成?
感信?
L298可?
2?
机,OUT1,OUT2和OUT3,OUT4之?
可分?
接?
机,本?
置我?
一台?
5,7,10,12?
入控制?
平,控制?
机的正反?
EnA,EnB接控制使能端,控制?
机的停?
表1是L298N功能?
L298N<
wbr>
用In3,In4的?
与表1相同。
由表1可知EnA?
低?
平?
,?
入?
机控制起作用,?
EnA?
高?
平,?
一高一低,?
机
正或反?
同?
机停止,同?
停。
L298N控制器原理如下:
3、控制?
件流程?
(多?
)
1.?
感器控制程序
凡是利用一定的物性(物理、化?
、生物)法?
、定理、定律、效?
等?
行能量?
与信息?
,并且?
出与?
格一一?
的器件和?
置均可?
感器;
感器又被?
器、?
器、敏感元件、?
能器和一次?
表等。
感器一般由敏感元件、?
元件和?
量?
路三部分?
成,有?
加上?
助?
源。
中的?
感器是感受被?
量的大小并?
出相?
的可用?
出信?
的器件或?
置。
据?
的几?
功能?
立地分隔?
候,?
必?
由一?
地方向另一?
地方?
据,?
就是完成?
种?
功能。
2.中?
控制程序
感器模?
据并判?
正确?
中?
程序?
T1口?
行初始化,?
而接收?
自?
的新?
据,比?
判?
后?
到命令地址?
而?
和通?
示器?
示出?
程序
自控制器的命令,判?
其命令是否正确,若不正确?
返回,若正确?
行命令,比?
做出相?
作,?
窗帘及推拉窗到?
指定的位置?
停止,器流程?
如下。
4、主要程序的指令:
附?
一:
二:
感器
三:
光?
感器BH1750
一:
:
修改at:
#include<
SoftwareSerial.h>
//引用程式庫
SoftwareSerialBT(8,9);
//接收腳,傳送腳
charval;
//儲存接收資料的變數
voidsetup(){
Serial.begin(9600);
//與電腦序列埠連線
Serial.println("
BTisready!
"
);
//設定藍牙模組的連線速率
BT.begin(9600);
}
voidloop(){
//若收到「序列埠監控視窗」的資料,則送到藍牙模組
if(Serial.available()){
val=Serial.read();
BT.print(val);
}
//若收到藍牙模組的資料,則送到「序列埠監控視窗」
if(BT.available()){
val=BT.read();
Serial.print(val);
机:
voidsetup()
{
voidloop()
while(Serial.available())
{
charc=Serial.read();
if(c=='
A'
HelloIamamarino"
主机:
voidsetup(){
voidloop(){
Serial.println('
//?
送A
while
(1);
二:
U8codetable2[]="
wendushidu"
;
U8codetable3[]="
.."
sbitRS=P2^6;
sbitRW=P2^5;
sbitE=P2^7;
voidwrite_com(U8com)
E=0;
RS=0;
RW=0;
Delay(5);
E=1;
P0=com;
voidwrite_date(U8date)
RS=1;
P0=date;
P0=0;
voidinit()
{
U8num;
Delay(15);
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
for(num=0;
num<
15;
num++)
write_date(table2[num]);
Delay
(1);
write_com(0x80+0x40);
write_date(table3[num]);
voidwrite_dht11(U8add,U8date)
U8shi,ge;
shi=date/10;
ge=date%10;
write_com(0x80+0x40+add);
write_date(0x30+shi);
write_date(0x30+ge);
/***********************dht11.h***************************/
typedefunsignedcharU8;
typedefunsignedintU16;
sbitP1_0=P2^0;
U8U8FLAG,k;
U8U8temp;
U8U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;
U8U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;
U8U8comdata;
voidDelay(U16z)
U8x,y;
for(x=z;
x>
0;
x--)
for(y=110;
y>
y--);
voiddelay_10us()
{
U8i;
i--;
voidCOM(void)//?
据01确?
for(i=0;
i<
8;
i++)
{
U8FLAG=2;
while((!
P1_0)&
&
U8FLAG++);
//1bit是否?
束
delay_10us();
U8temp=0;
//26us~28us表示?
if(P1_0)U8temp=1;
//超?
28us依然?
平表示?
1
while((P1_0)&
if(U8FLAG==1)break;
//U8FLAG溢出超?
跳出for循?
//判?
据位是0?
是1
//如果高?
平高?
定0高?
平值?
据位?
1
U8comdata<
<
=1;
U8comdata|=U8temp;
}
voidRH(void)//-----?
取子程序------------
P1_0=0;
Delay(34);
//主机拉低高于18ms
P1_0=1;
//?
由上拉?
阻拉高主机延?
20us
//主机?
入判?
if(!
P1_0)//判?
机是否有低?
如不?
跳出,?
向下?
行
U8FLAG=2;
while((!
//判?
机是否?
出80us的低?
是否?
束
while((P1_0)&
出80us的高?
平,如?
据接收?
COM();
//?
U8RH_data_H_temp=U8comdata;
度整?
8位
COM();
U8RH_data_L_temp=U8comdata;
度小?
U8T_data_H_temp=U8comdata;
U8T_data_L_temp=U8comdata;
U8checkdata_temp=U8comdata;
//校?
位
P1_0=1;
U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);
if(U8temp==U8checkdata_temp)//?
据校?
正确?
{
U8RH_data_H=U8RH_data_H_temp;
U8RH_data_L=U8RH_data_L_temp;
U8T_data_H=U8T_data_H_temp;
U8T_data_L=U8T_data_L_temp;
U8checkdata=U8checkdata_temp;
}
/***********************main.c***************************/
reg52.h>
LCD1602.h>
U16a,b,t;
U8flag,i;
voidmain()
RW=1;
t=0;
flag=0;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
init();
P2=0xff;
Delay(40);
while
(1)
RH();
write_dht11(0,U8T_data_H);
write_dht11(3,U8T_data_L);
write_dht11(9,U8RH_data_H);
write_dht11(12,U8RH_data_L);
if(flag==2)//100后flag?
2,?
行比?
{
if(a==U8T_data_H&
b==U8RH_data_H)
Buzzer=0;
while(a==U8T_data_H&
b==U8RH_data_H);
flag=0;
test();
voidtimer0()interrupt1
t++;
if(t==2000)//100秒?
一次
t=0;
flag=2;
//100秒后flag?
2
if(flag==0)//最?
始flag?
0?
值
a=U8T_data_H;
b=U8RH_data_H;
flag=1;
//flag?
化
三:
感器BH1750:
//使用?
,用?
只需更改GPIO_Pin_14、GPIO_Pin_15?
引?
并在主函?
里面?
用此函?
即可。
voidBH1750_Get_Guang(float*Zhaodu)
#include"
stm32f10x_lib.h"
#defineucharunsignedchar
#defineuintunsignedint
#defineDataPortP0//LCD1602?
据端口
#defineSlaveAddress0x46//定?
器件在IIC?
地址,根据ALTADDRESS地址引?
不同修改
//ALTADDRESS引?
接地?
地址?
0x46,接?
0xB8
#defineBH1750_SCLGPIO_Pin_14
#defineBH1750_SDAGPIO_Pin_15
//#defineGPIO_I2CGPIOB
#defineBH1750_SCL_0()GPIOF->
BRR=BH1750_SCL
#defineBH1750_SCL_1()GPIOF->
BSRR=BH1750_SCL
#defineBH1750_SDA_0()GPIOF->
BRR=BH1750_SDA
#defineBH1750_SDA_1()GPIOF->
BSRR=BH1750_SDA
#defineBH1750_SDA_STATE()(GPIOF->
IDR&
BH1750_SDA)//{return(GPIOB->
IDR&
PIN_SDA)!
=0;
typedefunsignedcharBYTE;
typedefunsignedshortWORD;
BYTEBUF[8];
//接收?
存?
ucharge,shi,bai,qian,wan;
示?
量
intdis_data;
voidInit_BH1750(void);
voidconversion(uinttemp_data);
voidSingle_Write_BH1750(ucharREG_Address);
据
ucharSingle_Read_BH1750(ucharREG_Address);
取?
部寄存器?
voidMultiple_Read_BH1750(void);
//------------------------------------
u8BH1750_Start(void);
voidBH1750_Stop(void);
u8BH1750_SendByte(u8Data);
u8BH1750_ReceiveByte(void);
voidBH1750_SendACK(void);
voidBH1750_SendNACK(void);
voidBH1750_Nop(void);
voidBH1750_Delay(unsignedintk);
//-----------------------------------
u8BH1750_ACK=0;
u8BH1750_READY=0;
u8BH1750_NACK=1;
u8BH1750_BUS_BUSY=2;
u8BH1750_BUS_ERROR=3;
u8BH1750_RETRY_COUNT=3;
//重?
次?
voidBH1750_Nop(void)
u8i=50;
while(i)
i--;
}
voidBH1750_Delay(unsignedintk)
{
unsignedinti,j;
k;
i++)
{
for(j=0;
j<
121;
j++);
}
/*******************************************************************************
*函?
名?
:
IIC_START
*描述:
送?
*
*?
入:
出:
*返回:
*作者:
*修改日期:
2010年6月8日
*******************************************************************************/
u8BH1750_Start(void)
BH1750_SDA_1();
BH1750_Nop();
BH1750_SCL_1();
BH1750_SDA_STATE())
////DebugPrint("
TWI_START:
BUSY\n"
returnBH1750_BUS_BUSY;
BH1750_SDA_0();
BH1750_SCL_0();
if(BH1750_SDA_STATE())
BUSERROR\n"
returnBH1750_BUS_ERROR;
returnBH1750_READY;
/*--------------------------------------------------------------------------*/
/**
*@Brief:
IIC_STOP
*/
voidBH1750_Stop(void)
//////DebugPrint("
TWI_STOP\n"
IIC_SendACK
voidBH1750_SendACK(void)
TWI_SendACK\n"
/*------------------------------------------------
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 51 单片机 蓝牙 智能 光控 窗帘