硬件电路的设计
(附文件)
系统的功能分析及体系结构设计
3.1.1系统功能分析
本设计由STC89C52单片机电路+DHT11温湿度传感器店里了+蓝牙电路+电源电路组成。
1、通过单片机采集DHT11检测温湿度值,并且通过蓝牙将数据发送到手机。
数据:T:23’C H:72% //标识温度23 湿度72
3.1.2系统总体结构
本系统具体框图如下图所示:
原理图:
5V电源电路设计
本系统选择5V直流电源作为系统总电源,为整个系统供电,电路简单、稳定。DC为电源的DC插座,可以直接接USB电源线,一端插在DC插座上,另外一端可以插在5V电源上,如电脑USB、充电宝、手机充电器等等。LED为红色LED灯,作为系统是否有点的指示灯,电阻为1K电阻,起到限流作用,保护LED灯,以防电流过大烧坏LED灯。SW为自锁开关,开关按下后,红灯亮,此时系统电源5V直流输出。开关再次按下后,红灯灭,此时系统电源无5V电源输出。
DHT11温湿度传感器模块电路设计
DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性和卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。每个DHT11传感器都在极为精确的湿度校验室中进行校准。校准系数以程序的形式存在OTP内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。单线制串行接口,使系统集成变得简易快捷。超小的体积、极低的功耗,使其成为该类应用中,在苛刻应用场合的最佳选择。产品为4针单排引脚封装,连接方便。通过单片机等微处理器简单的电路连接就能够实时的采集本地湿度和温度。DHT11与单片机之间能采用简单的单总线进行通信,仅仅需要一个I/O口。传感器内部湿度和温度数据40Bit的数据一次性传给单片机,数据采用校验和方式进行校验,有效的保证数据传输的准确性。DHT11功耗很低,5V电源电压下,工作平均最大电流0.5mA。
一、传感器参数
(1)传感器采用DHT11
(2)工作电压范围:3.3V-5.5V
(3)工作电流 :平均0.5mA
(4)湿度测量范围:20-90%RH
(5)湿度测量误差:±5%
(6)温度测量范围:0-50℃
(7)温度测量误差:±2%
(8)湿度分辨率 :1%RH 8位
(9)温度分辨率 :1℃ 8位
(10)采样周期 :1S
(11)单总线结构
(12)与TTL兼容(5V)
(13)输出形式:数字输出
(14)PCB板尺寸:3.2cm*1.4cm
(15)有固定栓孔,方便安装
二、接口说明
(1)VCC 外接3.5V-5.5V
(2)GND 外接GND
(3)DATA 小板开关量输出接口,可外接单片机
DHT11数字湿温度传感器采用单总线数据格式。即,单个数据引脚端口完成输入输出双向传输。其数据包由5Byte(40Bit)组成。数据分小数部分和整数部分,具体格式在下面说明。
(1)一次完整的数据传输为40bit,高位先出。
(2)数据格式:8bit湿度整数数据+8bit湿度小数数据
(3)+8bit温度整数数据+8bit温度小数数据
(4)+8bit校验和,校验和数据为前四个字节相加。
JDY-30蓝牙模块电路设计
蓝牙模块是指集成蓝牙功能的芯片基本电路集合,用于无线网络通讯。本蓝牙模块就是为了只能无线数据传输而专门打造的,本模块支持串行接口,支持SP蓝牙串口协议,具有成本低、体积小、收发灵敏性高等特点,只需配备少许的外围元件就能实现大功能。
一、模块特点
(1)支持蓝牙 SPP 串口协议
(2)内置 PCB 天线
(3)支持 UART 接口
(4)蓝牙 Class 2
(5)数据传输比 BLE 蓝牙快、可达到 8K 每秒以上的速率
(6)支持与 SPP 主蓝牙模块连接通信(JDY-30 为从 SPP 蓝牙模块)
(7)支持与电脑 SPP 蓝牙通信
(8)支持 Android 手机 SPP 通信
二、产品应用范围
(1) POS 机
(2)蓝牙打印机
(3)蓝牙玩具
(4)蓝牙高速数据传输产品应用
(5)小家电
(6)汽车电子
三、模块技术参数
(1)工作电压:3.3V-6V
(2)工作温度:-40℃-85℃
(3)天线:PCB板载天线
(4)功耗:19mA
四、模块接口说明
(1)RXD 串口输入,电平为TTL电平
(2)TXD 串口输出,电平为TTL电平
(3)GND 接GND
(4)VCC 接3.3V-6V
蓝牙模块接口电路图如下图所示。
系统软件设计
#include <reg52.h>
#include <intrins.h>
#include <stdio.h>
#include "dht21.h"
unsigned long time_20ms=0; //定时变量
unsigned char dis0[16]; //数组暂存
unsigned char read_dht21=0; //读取标志
void Init_Timer0(void);//函数声明
void UART_Init(void);
void uartSendByte(unsigned char dat);
void SendStr(unsigned char *s,unsigned char length);
void main (void)
{
Init_Timer0(); //定时器0初始化
UART_Init(); //串口初始化
DelayMs(120);
SendStr("ready ok!",9);
while(1) //主循环
{
if(read_dht21==1)
{
read_dht21=0;
ET0 =0; //关闭定时器中断
RH(); //读取模块数据周期不易小于 2S
ET0 =1; //开定时器中断
sprintf(dis0,"T:%02d'C H:%02d%% \n",(int)U8T_data_H,(int)U8RH_data_H);
SendStr(dis0,14); //发送
}
}
}
void Init_Timer0(void)
{
TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响
TH0=(65536-20000)/256; //重新赋值 20ms
TL0=(65536-20000)%256;
EA=1; //总中断打开
ET0=1; //定时器中断打开
TR0=1; //定时器开关打开
}
void Timer0_isr(void) interrupt 1
{
TH0=(65536-20000)/256; //重新赋值 20ms
TL0=(65536-20000)%256;
time_20ms++;
if(time_20ms%50==0)
{
read_dht21=1; //定时发送数据
}
}
void UART_Init(void)
{
SCON = 0x50; // SCON: 模式 1, 8-bit UART, 使能接收
TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit 重装
TH1 = 0xFD; // TH1: 重装值 9600 波特率 晶振 11.0592MHz
TR1 = 1; // TR1: timer 1 打开
EA = 1; //打开总中断
ES = 1; //打开串口中断
}
void SendByte(unsigned char dat)//串口发送单字节数据
{
unsigned char time_out;
time_out=0x00;
SBUF = dat; //将数据放入SBUF中
while((!TI)&&(time_out<100)) //检测是否发送出去
{time_out++;DelayUs2x(10);} //未发送出去 进行短暂延时
TI = 0; //清除ti标志
}
void SendStr(unsigned char *s,unsigned char length) //发送定长度字符串
{
unsigned char NUM;
NUM=0x00;
while(NUM<length) //发送长度对比
{
SendByte(*s); //放松单字节数据
s++; //指针++
NUM++; //下一个++
}
}
void UART_SER (void) interrupt 4 //串行中断服务程序
{
if(RI) //判断是接收中断产生
{
RI=0; //标志位清零
}
if(TI) //如果是发送标志位,清零
TI=0;
}
.
链接:https://pan.baidu.com/s/1-KAUV7YU3CqtIxzDJRVlGA
提取码:lvrt
.