测量温湿度通过蓝牙和串口发送数据显示在LCD1602屏上
同时通过温度和蓝牙来控制风扇
实验器材:
51开发板、DHT11模块、蓝牙模块、LCD1602、马达、小风扇、杜邦线
源码仅供参考:
#include <REGX52.H>
#include “intrins.h”
#define databuffer P0 //定义8位数据线,Po端口组
sfr AUXR = 0x8E;
sbit LED1 = P3^7;
sbit DHT = P3^3;
sbit RS = P1^0;
sbit RW = P1^1;
sbit EN = P1^4;
sbit JDQ = P1^6; //继电器
char dates[5]; //8位为一个数据
char temp[8]; //字符有7个,但是\0占一个字符
char Hema[8];
void Delay30ms(void) //@11.0592MHz
{
unsigned char data i, j;
i = 54;
j = 199;
do
{while (--j);
} while (--i);
}
void Delay40us(void) //@11.0592MHz
{
unsigned char data i;
_nop_();
i = 15;
while (--i);
}
void Delay60us(void) //@11.0592MHz
{
unsigned char data i;
i = 25;
while (--i);
}
void Delay15ms() //@11.0592MHz
{
unsigned char i, j;
i = 27;
j = 226;
do
{while (--j);
} while (--i);
}
void Delay5ms() //@11.0592MHz
{
unsigned char i, j;
i = 9;
j = 244;
do
{while (--j);
} while (--i);
}
void Delay1000ms(void) //@11.0592MHz
{
unsigned char data i, j, k;
_nop_();
i = 8;
j = 1;
k = 243;
do
{do{while (--k);} while (--j);
} while (--i);
}
串口初始化以及发送数据
``
`c
void Uart1_Init() //串口初始化
{ AUXR = 0x01; //让波特率更加稳定,防止掉帧SCON = 0x50; //配置串口工作模式,REN为1则接收数据TMOD &= 0x0F;TMOD |= 0x20; //配置定时器为8位自动重装模式TL1 = 0xFD;TH1 = 0xFD; //8位自动重装模式TH1存放的值自动存入TL1TR1 = 1; //启动定时器
}
``
void senddate(char date) //串口发出一个个数据函数
{SBUF = date;while(!TI); //直到等于1时发送成功,TI为0时变1发送成功;为1变0时不循环TI = 0; //无时差
}
void sendstring(char* str) //传入字符串
{while(*str != '\0'){senddate(*str); //将字符串打印出来str++; //地址偏移}}
DHT11湿温度传感器时序信号和读数据
void check_DHT_start() //DHT信号
{DHT = 1;DHT = 0;Delay30ms();DHT = 1;Delay60us();while(DHT); //D