基于DHT11的温湿度检测报告
基于DHT11的温湿度控制系统设计
![基于DHT11的温湿度控制系统设计](https://img.taocdn.com/s3/m/2fd79d8e58fafab068dc02ac.png)
本科毕业设计(论文) 题目:基于DHT11的温湿度检测系统设计基于DHT11的温湿度检测系统设计摘要DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,传感器包括一个电阻式感湿元件和一个NTC测温元件,具有品质卓越、超快响应、抗干扰能力强、性价比极高等特点。
温湿度是我们日常生活中最基本的环境参数,温湿度的检测具有重要意义。
本文主要介绍该传感器的特点,并采用STC89C52单片机,LCD1602液晶显示器,及一些元器件进行组合,从而完成对温湿度的检测。
选用温湿度传感器DHT11检测环境温度和湿度,将其输出的数字信号输入单片机STC89C52,单片机采集数字信号并进行数据处理,然后由LCD1602进行显示,外加复位电路、时钟电路、键盘电路和报警电路。
本系统整体设计具有界面友好、控制灵活、硬件系统集成度高、电路简单、功能强、性能可靠、成本低等特点。
对我们的生活特别有帮助。
关键词: DHT11;单片机;温湿度;检测。
Design a System of Temperature and Humidity DetectionBased on the DHT11AbstractDHT11 temperature and humidity digital sensor is a composite temperature and humidity sensor , it outputs the already calibrated digital signal ,the sensor includes a resistance type moisture element and a NTC temperature measuring element, with excellent quality, super fast response, strong anti-interference ability, extremely high performance-price ratio.Temperature and humidity is the most basic parameters of environment,temperature and humidity detection is of great significance.This paper mainly introduces the characteristics of the sensors, and uses the STC89C52 singlechip, LCD1602 display, and some of the components are combined, so as to complete the detection of temperature and humidity. Choose DHT11 temperature and humidity sensors to detect temperature and humidity, the output of digital signal input microcontroller STC89C52 single-chip digital signal and data processing, and then by the LCD1602 display, plus the reset circuit, clock circuit, keyboard circuit and alarm circuit.The system design with friendly interface, flexible control, high hardware system integration, simple circuit, functional, reliable performance, low cost, etc. Particularly helpful to our life.Key words:DHT11; microcontroller; temperature and humidity ; detection.目录中文摘要 (1)Abstract (2)1 绪论 (1)1.1 研究的意义 (1)1.2 国内外发展现状 (1)1.3 设计的市场现状分析 (2)1.4 温湿度检测技术和存在的问题 (2)1.5 设计内容和预期结果 (3)1.5.1 主要完成内容 (3)1.5.2 本文的设计思路 (3)1.5.3 预期结果 (4)2 温湿度测量系统方案设计 (5)2.1系统总体设计 (5)2.2 系统设计原则 (5)2.3 系统方案的论证与选择 (6)2.3.1 单片机的选择 (6)2.3.2 显示器的选择 (7)2.3.3 报警系统的选择 (8)3 系统硬件设计 (9)3.1主控模块 (9)3.1.1 STC89C52的简介 (9)3.1.2 STC89C52的主要特点 (9)3.1.3 STC89C52的引脚功能 (9)3.1.4 STC89C52的控制接口 (11)3.3 时钟电路 (12)3.4 显示模块 (13)3.4.1 LCD1602简介 (13)3.4.2 LCD1602特性 (13)3.4.3 LCD1602 管脚功能 (13)3.4.4 LCD1602字符集 (14)3.4.5 LCD1602与单片机的接口 (14)3.5温湿度采集模块 (15)3.5.1 温湿度传感器简介 (15)3.5.2 串行接口(单线双向) (16)3.5.3 引脚与接口 (18)3.6 键盘模块 (18)3.7 报警模块 (19)3.7.1 蜂鸣器报警原理 (19)3.7.2 报警电路接口 (20)3.8 串口通信模块 (20)3.8.1 RS-232C简介 (20)3.8.2 MAX232简介 (21)3.9小结 (22)4 系统软件设计 (24)4.1 主程序模块程序设计 (24)4.2 1602液晶显示模块程序设计 (25)4.3 传感器模块程序设计 (26)4.4 键盘模块设计 (27)5 设计中遇到的问题及解决方法 (29)5.1 硬件问题及解决方法 (29)5.2 软件所遇问题及解决方法 (29)6 结论 (30)参考文献 (31)致谢.................................. 错误!未定义书签。
基于DHT11温湿度传感系统总结报告
![基于DHT11温湿度传感系统总结报告](https://img.taocdn.com/s3/m/c3d59de95ef7ba0d4a733b49.png)
成都信息工程学院电子工程学院工程实践总结报告项目名称:温湿度的传感器专业:大气探测班级:组号:成员:指导教师:评分:年月日目录1 项目计划 (1)1.1 方案可行性分析 (1)1.2 项目执行计划 (1)2 各单元模块设计说明 (2)2.1 主控制模块 (2)2.2 温湿度传感器 (3)2.2.1 DHT11的简介 (4)2.2.2 DHT11的引脚应用电路连接说明 (4)2.2.3 DHT11的硬件连接图 (5)3 调试说明 (5)3.1 调试方法及步骤 (5)3.2 调试数据 (7)3.3 调试结果 (8)3.4 材料清单 (9)4 总结 (9)5 参考文献 (10)6 附录 (10)1项目计划1.1方案可行性分析随着电子科技的迅速发展,对仓库、工厂、博物馆等等地方温湿度监测系统的要求不断增高,从而也促进自动监测系统的迅速发展,本文详细叙述一个温湿度自动监测系统的总体结构,设计原则及具体性能指标。
由于系统具有较高的精度,反应速度快,在环境测试方面具有良好的应用前景。
随着人们生活水平的提高,人们逐渐对温湿度变得敏感起来,对于温湿度的了解,有助于人们的生活起居。
有时候需要知道空气中的温湿度,以便于出行和穿戴的选择,有时候需要知道太阳能热水器的水温,以便于洗浴。
为了能实时了解空气中的温度和湿度,有必要制作一种测量温度和湿度的仪器。
随着温湿度传感器快速发展,可想而知的是研发一个湿度计不再是难事。
人类高端技术不断发展,电子集成电路越来越简单方便,将之投注与工业加工也并非难事。
从设计方案看了,我们所运用的电子技术也不会很复杂,所以,研发一种新的湿度计可谓是轻而易举,水到渠成。
就工业技术可行度是一定的。
图1-1 温湿度传感器1.2项目执行计划老师对本学期任务介绍后,本小组先讨论了项目内容,明确大致方向后用1周时间查阅相关的资料使其有更深入的了解,并对实物的制作有初步的概念,讨论给出最终方案后用2周时间绘制原理图、PCB排版以及着手对实物制作材料的准备,1周时间软件学习以及程序的完成和最终检查,1周就开始实物的制作、改进、调试和测试数据。
温湿度测量实验报告
![温湿度测量实验报告](https://img.taocdn.com/s3/m/14e3d681ba4cf7ec4afe04a1b0717fd5370cb247.png)
温湿度测量实验报告引言温湿度是日常生活中非常重要的气象参数,对于环境舒适度、农业生产、工业生产等都有着重要的影响。
因此,准确测量温湿度成为了科研和工程领域的重要任务。
本实验旨在通过使用一种温湿度传感器来测量环境的温湿度,并分析其测量结果的准确性。
实验装置1.Arduino开发板2.DHT11温湿度传感器3.杜邦线若干4.计算机实验步骤1.连接电路:将DHT11传感器通过杜邦线连接到Arduino开发板上。
确保连接正确且稳固。
2.编写代码:使用Arduino开发环境编写代码,将DHT11传感器与Arduino开发板进行通信。
在代码中实现温湿度测量的功能。
3.上传代码:将编写好的代码上传到Arduino开发板上,确保代码能够正确运行。
4.测试测量:将Arduino开发板连接到计算机,并打开串口监视器。
通过串口监视器可以实时查看DHT11传感器测量得到的温湿度值。
5.对比验证:测量环境中的温湿度,并使用其他准确的温湿度测量仪器进行对比,验证DHT11传感器的测量准确性。
6.记录测量结果:将DHT11传感器测量得到的温湿度值以及其他准确测量仪器的测量结果记录下来,方便后续分析和比较。
7.数据分析:将DHT11传感器测量得到的温湿度值与其他准确测量仪器的测量结果进行比较和分析,探究DHT11传感器的测量误差范围和稳定性。
8.结果讨论:根据数据分析的结果,讨论DHT11传感器的测量准确性以及在实际应用中的可靠性。
9.结论总结:总结实验结果,提出改进传感器测量准确性的建议,并展望未来温湿度测量技术的发展方向。
结果与讨论通过对DHT11传感器的实际测量以及与其他准确测量仪器的对比验证,我们得到了以下结果和结论: 1. DHT11传感器在一定范围内的温湿度测量结果与其他准确测量仪器基本吻合,具有较高的测量准确性。
2. 随着测量温度和湿度的增加,DHT11传感器的测量误差会逐渐增大,尤其是在极端的高温高湿环境中。
利用DHT11测温度湿度实验报告
![利用DHT11测温度湿度实验报告](https://img.taocdn.com/s3/m/0a6a802b02d276a201292e01.png)
微电子工艺实验题目气压温度测量系统学生姓名洪强学号学院电子与信息工程学院专业电子科学与技术指导教师曹鸿霞二O一五年十一月二十二日目录目录 ............................................................................................................. 错误!未定义书签。
1 系统描述................................................................................................ 错误!未定义书签。
1.1 课程设计题目 (3)1.2 系统设计方案介绍 (3)1.3 方案论证 (4)2 硬件电路设计 (4)2.1 LCD1602液晶显示模块 (5)2.1.1 LCD1602原理图及引脚说明 (5)2.1.2 LCD1602操作时序 (6)2.2 AT89C52单片机 (7)2.3 DHT11传感器模块 (8)2.3.1 DHT11原理图及引脚说明 (8)2.3.2 DHT11数据帧 (9)2.3.3 DHT11电气特性 (10)2.3.4 DHT11操作时序 (10)2.4 蜂鸣器模块 (12)2.5 DHT11温湿度检测设计图 (12)3 软件程序设计 (13)3.1 程序流程图 (13)3.2程序设计 (14)3.2.1主程序 (14)3.2.2 LCD显示程序 (15)3.2.3蜂鸣器程序 (22)4 实验结果 (23)5 实验总结 (24)参考文献 (22)测量气压温度测量系统洪强南京信息工程大学电子科学与技术,210044摘要本实验基于使用STC89C52单片机、DHT11传感器模块、1602液晶显示屏模块以及报警模块。
简单明了的实现的可提要求。
DHT11数字温湿度传感器把采集到的温湿度数据传给单片机。
STM32单片机DHT11数字温湿度监测
![STM32单片机DHT11数字温湿度监测](https://img.taocdn.com/s3/m/0a9cdc16590216fc700abb68a98271fe910eaf1b.png)
STM32单片机DHT11数字温湿度监测OLED液晶接口电路图DHT11传感器接口电路图STM32单片机DHT11数字温湿度监测程序源代码#include "sys.h"#define LED_RED PBout(12) //红色发光二极管控制管脚PB12 #define LED_GREEN PBout(13) //绿色发光二极管控制管脚PB13 #define LED_YELLOW PBout(14) //黄色发光二极管控制管脚PB14 #define LED_BLUE PBout(15) //蓝色发光二极管控制管脚PB15 #define DHT11_IO_IN() {GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=8<<0;}#define DHT11_IO_OUT() {GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=3<<0;}#define DHT11_DQ_OUT PAout(0) //数据端口PA0#define DHT11_DQ_IN PAin(0) //数据端口PA0#define OLED_RST_Clr() PCout(13)=0 //RST#define OLED_RST_Set() PCout(13)=1 //RST#define OLED_RS_Clr() PBout(4)=0 //DC#define OLED_RS_Set() PBout(4)=1 //DC#define OLED_SCLK_Clr() PCout(15)=0 //SCL#define OLED_SCLK_Set() PCout(15)=1 //SCL#define OLED_SDIN_Clr() PCout(14)=0 //SDA#define OLED_SDIN_Set() PCout(14)=1 //SDA#define OLED_CMD 0 //写命令#define OLED_DATA 1 //写数据void delay_init(u8 SYSCLK);void delay_ms(u16 nms);void delay_us(u32 nus);void Led_Init(void); //发光二极管控制管脚初始化void Red_Led_Light(void); //点亮红色发光二极管void Green_Led_Light(void); //点亮绿色发光二极管void Yellow_Led_Light(void); //点亮黄色发光二极管void Blue_Led_Light(void); //点亮蓝色发光二极管void Red_Led_Goout(void); //熄灭红色发光二极管void Green_Led_Goout(void); //熄灭绿色发光二极管void Yellow_Led_Goout(void); //熄灭黄色发光二极管void Blue_Led_Goout(void); //熄灭蓝色发光二极管u8 DHT11_Init(void); //初始化DHT11u8 DHT11_Read_Data(u8 *temp,u8 *humi); //读取温湿度u8 DHT11_Read_Byte(void); //读出一个字节u8 DHT11_Read_Bit(void); //读出一个位u8 DHT11_Check(void); //检测是否存在DHT11void DHT11_Rst(void); //复位DHT11void OLED_WR_Byte(u8 dat,u8 cmd);void OLED_Display_On(void);void OLED_Display_Off(void);void OLED_Refresh_Gram(void);void Oled_Init(void);void OLED_Clear(void);void OLED_DrawPoint(u8 x,u8 y,u8 t);void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 size,u8 mode);void OLED_ShowNumber(u8 x,u8 y,u32 num,u8 len,u8 size);void OLED_ShowString(u8 x,u8 y,const u8 *p);void Oled_Show(void);static u8 fac_us=0; //us延时倍乘数static u16 fac_ms=0; //ms延时倍乘数u8 OLED_GRAM[128][8];const unsigned char oled_asc2_1206[95][12]={{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",0*/ {0x00,0x00,0x00,0x00,0x3F,0x40,0x00,0x00,0x00,0x00,0x00,0x00},/*"!",1*/ {0x00,0x00,0x30,0x00,0x40,0x00,0x30,0x00,0x40,0x00,0x00,0x00},/*""",2*/ {0x09,0x00,0x0B,0xC0,0x3D,0x00,0x0B,0xC0,0x3D,0x00,0x09,0x00},/*"#",3*/ {0x18,0xC0,0x24,0x40,0x7F,0xE0,0x22,0x40,0x31,0x80,0x00,0x00},/*"$",4*/{0x18,0x00,0x24,0xC0,0x1B,0x00,0x0D,0x80,0x32,0x40,0x01,0x80},/*"%",5*/ {0x03,0x80,0x1C,0x40,0x27,0x40,0x1C,0x80,0x07,0x40,0x00,0x40},/*"&",6*/ {0x10,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"'",7*/ {0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x80,0x20,0x40,0x40,0x20},/*"(",8*/ {0x00,0x00,0x40,0x20,0x20,0x40,0x1F,0x80,0x00,0x00,0x00,0x00},/*")",9*/ {0x09,0x00,0x06,0x00,0x1F,0x80,0x06,0x00,0x09,0x00,0x00,0x00},/*"*",10*/ {0x04,0x00,0x04,0x00,0x3F,0x80,0x04,0x00,0x04,0x00,0x00,0x00},/*"+",11*/ {0x00,0x10,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*",",12*/ {0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x00,0x00},/*"-",13*/ {0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*".",14*/ {0x00,0x20,0x01,0xC0,0x06,0x00,0x38,0x00,0x40,0x00,0x00,0x00},/*"/",15*/ {0x1F,0x80,0x20,0x40,0x20,0x40,0x20,0x40,0x1F,0x80,0x00,0x00},/*"0",16*/ {0x00,0x00,0x10,0x40,0x3F,0xC0,0x00,0x40,0x00,0x00,0x00,0x00},/*"1",17*/ {0x18,0xC0,0x21,0x40,0x22,0x40,0x24,0x40,0x18,0x40,0x00,0x00},/*"2",18*/ {0x10,0x80,0x20,0x40,0x24,0x40,0x24,0x40,0x1B,0x80,0x00,0x00},/*"3",19*/ {0x02,0x00,0x0D,0x00,0x11,0x00,0x3F,0xC0,0x01,0x40,0x00,0x00},/*"4",20*/ {0x3C,0x80,0x24,0x40,0x24,0x40,0x24,0x40,0x23,0x80,0x00,0x00},/*"5",21*/ {0x1F,0x80,0x24,0x40,0x24,0x40,0x34,0x40,0x03,0x80,0x00,0x00},/*"6",22*/ {0x30,0x00,0x20,0x00,0x27,0xC0,0x38,0x00,0x20,0x00,0x00,0x00},/*"7",23*/ {0x1B,0x80,0x24,0x40,0x24,0x40,0x24,0x40,0x1B,0x80,0x00,0x00},/*"8",24*/ {0x1C,0x00,0x22,0xC0,0x22,0x40,0x22,0x40,0x1F,0x80,0x00,0x00},/*"9",25*/ {0x00,0x00,0x00,0x00,0x08,0x40,0x00,0x00,0x00,0x00,0x00,0x00},/*":",26*/ {0x00,0x00,0x00,0x00,0x04,0x60,0x00,0x00,0x00,0x00,0x00,0x00},/*";",27*/ {0x00,0x00,0x04,0x00,0x0A,0x00,0x11,0x00,0x20,0x80,0x40,0x40},/*"<",28*/ {0x09,0x00,0x09,0x00,0x09,0x00,0x09,0x00,0x09,0x00,0x00,0x00},/*"=",29*/ {0x00,0x00,0x40,0x40,0x20,0x80,0x11,0x00,0x0A,0x00,0x04,0x00},/*">",30*/ {0x18,0x00,0x20,0x00,0x23,0x40,0x24,0x00,0x18,0x00,0x00,0x00},/*"?",31*/ {0x1F,0x80,0x20,0x40,0x27,0x40,0x29,0x40,0x1F,0x40,0x00,0x00},/*"@",32*/ {0x00,0x40,0x07,0xC0,0x39,0x00,0x0F,0x00,0x01,0xC0,0x00,0x40},/*"A",33*/ {0x20,0x40,0x3F,0xC0,0x24,0x40,0x24,0x40,0x1B,0x80,0x00,0x00},/*"B",34*/ {0x1F,0x80,0x20,0x40,0x20,0x40,0x20,0x40,0x30,0x80,0x00,0x00},/*"C",35*/ {0x20,0x40,0x3F,0xC0,0x20,0x40,0x20,0x40,0x1F,0x80,0x00,0x00},/*"D",36*/ {0x20,0x40,0x3F,0xC0,0x24,0x40,0x2E,0x40,0x30,0xC0,0x00,0x00},/*"E",37*/ {0x20,0x40,0x3F,0xC0,0x24,0x40,0x2E,0x00,0x30,0x00,0x00,0x00},/*"F",38*/ {0x0F,0x00,0x10,0x80,0x20,0x40,0x22,0x40,0x33,0x80,0x02,0x00},/*"G",39*/ {0x20,0x40,0x3F,0xC0,0x04,0x00,0x04,0x00,0x3F,0xC0,0x20,0x40},/*"H",40*/ {0x20,0x40,0x20,0x40,0x3F,0xC0,0x20,0x40,0x20,0x40,0x00,0x00},/*"I",41*/ {0x00,0x60,0x20,0x20,0x20,0x20,0x3F,0xC0,0x20,0x00,0x20,0x00},/*"J",42*/ {0x20,0x40,0x3F,0xC0,0x24,0x40,0x0B,0x00,0x30,0xC0,0x20,0x40},/*"K",43*/ {0x20,0x40,0x3F,0xC0,0x20,0x40,0x00,0x40,0x00,0x40,0x00,0xC0},/*"L",44*/ {0x3F,0xC0,0x3C,0x00,0x03,0xC0,0x3C,0x00,0x3F,0xC0,0x00,0x00},/*"M",45*/ {0x20,0x40,0x3F,0xC0,0x0C,0x40,0x23,0x00,0x3F,0xC0,0x20,0x00},/*"N",46*/ {0x1F,0x80,0x20,0x40,0x20,0x40,0x20,0x40,0x1F,0x80,0x00,0x00},/*"O",47*/ {0x20,0x40,0x3F,0xC0,0x24,0x40,0x24,0x00,0x18,0x00,0x00,0x00},/*"P",48*/{0x1F,0x80,0x21,0x40,0x21,0x40,0x20,0xE0,0x1F,0xA0,0x00,0x00},/*"Q",49*/ {0x20,0x40,0x3F,0xC0,0x24,0x40,0x26,0x00,0x19,0xC0,0x00,0x40},/*"R",50*/ {0x18,0xC0,0x24,0x40,0x24,0x40,0x22,0x40,0x31,0x80,0x00,0x00},/*"S",51*/ {0x30,0x00,0x20,0x40,0x3F,0xC0,0x20,0x40,0x30,0x00,0x00,0x00},/*"T",52*/ {0x20,0x00,0x3F,0x80,0x00,0x40,0x00,0x40,0x3F,0x80,0x20,0x00},/*"U",53*/ {0x20,0x00,0x3E,0x00,0x01,0xC0,0x07,0x00,0x38,0x00,0x20,0x00},/*"V",54*/ {0x38,0x00,0x07,0xC0,0x3C,0x00,0x07,0xC0,0x38,0x00,0x00,0x00},/*"W",55*/ {0x20,0x40,0x39,0xC0,0x06,0x00,0x39,0xC0,0x20,0x40,0x00,0x00},/*"X",56*/ {0x20,0x00,0x38,0x40,0x07,0xC0,0x38,0x40,0x20,0x00,0x00,0x00},/*"Y",57*/ {0x30,0x40,0x21,0xC0,0x26,0x40,0x38,0x40,0x20,0xC0,0x00,0x00},/*"Z",58*/ {0x00,0x00,0x00,0x00,0x7F,0xE0,0x40,0x20,0x40,0x20,0x00,0x00},/*"[",59*/ {0x00,0x00,0x70,0x00,0x0C,0x00,0x03,0x80,0x00,0x40,0x00,0x00},/*"\",60*/ {0x00,0x00,0x40,0x20,0x40,0x20,0x7F,0xE0,0x00,0x00,0x00,0x00},/*"]",61*/ {0x00,0x00,0x20,0x00,0x40,0x00,0x20,0x00,0x00,0x00,0x00,0x00},/*"^",62*/ {0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10},/*"_",63*/ {0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"`",64*/ {0x00,0x00,0x02,0x80,0x05,0x40,0x05,0x40,0x03,0xC0,0x00,0x40},/*"a",65*/ {0x20,0x00,0x3F,0xC0,0x04,0x40,0x04,0x40,0x03,0x80,0x00,0x00},/*"b",66*/ {0x00,0x00,0x03,0x80,0x04,0x40,0x04,0x40,0x06,0x40,0x00,0x00},/*"c",67*/ {0x00,0x00,0x03,0x80,0x04,0x40,0x24,0x40,0x3F,0xC0,0x00,0x40},/*"d",68*/ {0x00,0x00,0x03,0x80,0x05,0x40,0x05,0x40,0x03,0x40,0x00,0x00},/*"e",69*/ {0x00,0x00,0x04,0x40,0x1F,0xC0,0x24,0x40,0x24,0x40,0x20,0x00},/*"f",70*/ {0x00,0x00,0x02,0xE0,0x05,0x50,0x05,0x50,0x06,0x50,0x04,0x20},/*"g",71*/ {0x20,0x40,0x3F,0xC0,0x04,0x40,0x04,0x00,0x03,0xC0,0x00,0x40},/*"h",72*/ {0x00,0x00,0x04,0x40,0x27,0xC0,0x00,0x40,0x00,0x00,0x00,0x00},/*"i",73*/ {0x00,0x10,0x00,0x10,0x04,0x10,0x27,0xE0,0x00,0x00,0x00,0x00},/*"j",74*/ {0x20,0x40,0x3F,0xC0,0x01,0x40,0x07,0x00,0x04,0xC0,0x04,0x40},/*"k",75*/ {0x20,0x40,0x20,0x40,0x3F,0xC0,0x00,0x40,0x00,0x40,0x00,0x00},/*"l",76*/ {0x07,0xC0,0x04,0x00,0x07,0xC0,0x04,0x00,0x03,0xC0,0x00,0x00},/*"m",77*/ {0x04,0x40,0x07,0xC0,0x04,0x40,0x04,0x00,0x03,0xC0,0x00,0x40},/*"n",78*/ {0x00,0x00,0x03,0x80,0x04,0x40,0x04,0x40,0x03,0x80,0x00,0x00},/*"o",79*/ {0x04,0x10,0x07,0xF0,0x04,0x50,0x04,0x40,0x03,0x80,0x00,0x00},/*"p",80*/ {0x00,0x00,0x03,0x80,0x04,0x40,0x04,0x50,0x07,0xF0,0x00,0x10},/*"q",81*/ {0x04,0x40,0x07,0xC0,0x02,0x40,0x04,0x00,0x04,0x00,0x00,0x00},/*"r",82*/ {0x00,0x00,0x06,0x40,0x05,0x40,0x05,0x40,0x04,0xC0,0x00,0x00},/*"s",83*/ {0x00,0x00,0x04,0x00,0x1F,0x80,0x04,0x40,0x00,0x40,0x00,0x00},/*"t",84*/ {0x04,0x00,0x07,0x80,0x00,0x40,0x04,0x40,0x07,0xC0,0x00,0x40},/*"u",85*/ {0x04,0x00,0x07,0x00,0x04,0xC0,0x01,0x80,0x06,0x00,0x04,0x00},/*"v",86*/ {0x06,0x00,0x01,0xC0,0x07,0x00,0x01,0xC0,0x06,0x00,0x00,0x00},/*"w",87*/ {0x04,0x40,0x06,0xC0,0x01,0x00,0x06,0xC0,0x04,0x40,0x00,0x00},/*"x",88*/ {0x04,0x10,0x07,0x10,0x04,0xE0,0x01,0x80,0x06,0x00,0x04,0x00},/*"y",89*/ {0x00,0x00,0x04,0x40,0x05,0xC0,0x06,0x40,0x04,0x40,0x00,0x00},/*"z",90*/ {0x00,0x00,0x00,0x00,0x04,0x00,0x7B,0xE0,0x40,0x20,0x00,0x00},/*"{",91*/ {0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xF0,0x00,0x00,0x00,0x00},/*"|",92*/{0x00,0x00,0x40,0x20,0x7B,0xE0,0x04,0x00,0x00,0x00,0x00,0x00},/*"}",93*/ {0x40,0x00,0x80,0x00,0x40,0x00,0x20,0x00,0x20,0x00,0x40,0x00},/*"~",94*/ };const unsigned char oled_asc2_1608[95][16]={{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",0*/{0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xCC,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00},/*"!",1*/{0x00,0x00,0x08,0x00,0x30,0x00,0x60,0x00,0x08,0x00,0x30,0x00,0x60,0x00,0x00,0x00},/*""",2*/{0x02,0x20,0x03,0xFC,0x1E,0x20,0x02,0x20,0x03,0xFC,0x1E,0x20,0x02,0x20,0x00,0x00},/*"#",3*/{0x00,0x00,0x0E,0x18,0x11,0x04,0x3F,0xFF,0x10,0x84,0x0C,0x78,0x00,0x00,0x00,0x00},/*"$",4*/{0x0F,0x00,0x10,0x84,0x0F,0x38,0x00,0xC0,0x07,0x78,0x18,0x84,0x00,0x78,0x00,0x00},/*"%",5*/{0x00,0x78,0x0F,0x84,0x10,0xC4,0x11,0x24,0x0E,0x98,0x00,0xE4,0x00,0x84,0x00,0x08},/*"&",6*/{0x08,0x00,0x68,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"'",7*/{0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xE0,0x18,0x18,0x20,0x04,0x40,0x02,0x00,0x00},/*"(",8*/{0x00,0x00,0x40,0x02,0x20,0x04,0x18,0x18,0x07,0xE0,0x00,0x00,0x00,0x00,0x00,0x00},/*")",9*/{0x02,0x40,0x02,0x40,0x01,0x80,0x0F,0xF0,0x01,0x80,0x02,0x40,0x02,0x40,0x00,0x00},/*"*",10*/{0x00,0x80,0x00,0x80,0x00,0x80,0x0F,0xF8,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x00},/*"+",11*/{0x00,0x01,0x00,0x0D,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*",",12*/{0x00,0x00,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80},/*"-",13*/{0x00,0x00,0x00,0x0C,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*".",14*/{0x00,0x00,0x00,0x06,0x00,0x18,0x00,0x60,0x01,0x80,0x06,0x00,0x18,0x00,0x20,0x00},/*"/",15*/{0x00,0x00,0x07,0xF0,0x08,0x08,0x10,0x04,0x10,0x04,0x08,0x08,0x07,0xF0,0x00,0x00},/*"0",16*/{0x00,0x00,0x08,0x04,0x08,0x04,0x1F,0xFC,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00},/*"1",17*/{0x00,0x00,0x0E,0x0C,0x10,0x14,0x10,0x24,0x10,0x44,0x11,0x84,0x0E,0x0C,0x00,0x00},/*"2",18*/{0x00,0x00,0x0C,0x18,0x10,0x04,0x11,0x04,0x11,0x04,0x12,0x88,0x0C,0x70,0x00,0x00},/*"3",19*/0x00,0x24,0x00,0x00},/*"4",20*/{0x00,0x00,0x1F,0x98,0x10,0x84,0x11,0x04,0x11,0x04,0x10,0x88, 0x10,0x70,0x00,0x00},/*"5",21*/{0x00,0x00,0x07,0xF0,0x08,0x88,0x11,0x04,0x11,0x04,0x18,0x88, 0x00,0x70,0x00,0x00},/*"6",22*/{0x00,0x00,0x1C,0x00,0x10,0x00,0x10,0xFC,0x13,0x00,0x1C,0x00, 0x10,0x00,0x00,0x00},/*"7",23*/{0x00,0x00,0x0E,0x38,0x11,0x44,0x10,0x84,0x10,0x84,0x11,0x44, 0x0E,0x38,0x00,0x00},/*"8",24*/{0x00,0x00,0x07,0x00,0x08,0x8C,0x10,0x44,0x10,0x44,0x08,0x88, 0x07,0xF0,0x00,0x00},/*"9",25*/{0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x0C,0x03,0x0C,0x00,0x00, 0x00,0x00,0x00,0x00},/*":",26*/{0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x06,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00},/*";",27*/{0x00,0x00,0x00,0x80,0x01,0x40,0x02,0x20,0x04,0x10,0x08,0x08, 0x10,0x04,0x00,0x00},/*"<",28*/{0x02,0x20,0x02,0x20,0x02,0x20,0x02,0x20,0x02,0x20,0x02,0x20, 0x02,0x20,0x00,0x00},/*"=",29*/{0x00,0x00,0x10,0x04,0x08,0x08,0x04,0x10,0x02,0x20,0x01,0x40, 0x00,0x80,0x00,0x00},/*">",30*/{0x00,0x00,0x0E,0x00,0x12,0x00,0x10,0x0C,0x10,0x6C,0x10,0x80, 0x0F,0x00,0x00,0x00},/*"?",31*/{0x03,0xE0,0x0C,0x18,0x13,0xE4,0x14,0x24,0x17,0xC4,0x08,0x28, 0x07,0xD0,0x00,0x00},/*"@",32*/{0x00,0x04,0x00,0x3C,0x03,0xC4,0x1C,0x40,0x07,0x40,0x00,0xE4, 0x00,0x1C,0x00,0x04},/*"A",33*/{0x10,0x04,0x1F,0xFC,0x11,0x04,0x11,0x04,0x11,0x04,0x0E,0x88, 0x00,0x70,0x00,0x00},/*"B",34*/{0x03,0xE0,0x0C,0x18,0x10,0x04,0x10,0x04,0x10,0x04,0x10,0x08, 0x1C,0x10,0x00,0x00},/*"C",35*/{0x10,0x04,0x1F,0xFC,0x10,0x04,0x10,0x04,0x10,0x04,0x08,0x08, 0x07,0xF0,0x00,0x00},/*"D",36*/{0x10,0x04,0x1F,0xFC,0x11,0x04,0x11,0x04,0x17,0xC4,0x10,0x04, 0x08,0x18,0x00,0x00},/*"E",37*/{0x10,0x04,0x1F,0xFC,0x11,0x04,0x11,0x00,0x17,0xC0,0x10,0x00, 0x08,0x00,0x00,0x00},/*"F",38*/{0x03,0xE0,0x0C,0x18,0x10,0x04,0x10,0x04,0x10,0x44,0x1C,0x78, 0x00,0x40,0x00,0x00},/*"G",39*/{0x10,0x04,0x1F,0xFC,0x10,0x84,0x00,0x80,0x00,0x80,0x10,0x84, 0x1F,0xFC,0x10,0x04},/*"H",40*/{0x00,0x00,0x10,0x04,0x10,0x04,0x1F,0xFC,0x10,0x04,0x10,0x04, 0x00,0x00,0x00,0x00},/*"I",41*/0x10,0x00,0x00,0x00},/*"J",42*/{0x10,0x04,0x1F,0xFC,0x11,0x04,0x03,0x80,0x14,0x64,0x18,0x1C, 0x10,0x04,0x00,0x00},/*"K",43*/{0x10,0x04,0x1F,0xFC,0x10,0x04,0x00,0x04,0x00,0x04,0x00,0x04, 0x00,0x0C,0x00,0x00},/*"L",44*/{0x10,0x04,0x1F,0xFC,0x1F,0x00,0x00,0xFC,0x1F,0x00,0x1F,0xFC, 0x10,0x04,0x00,0x00},/*"M",45*/{0x10,0x04,0x1F,0xFC,0x0C,0x04,0x03,0x00,0x00,0xE0,0x10,0x18, 0x1F,0xFC,0x10,0x00},/*"N",46*/{0x07,0xF0,0x08,0x08,0x10,0x04,0x10,0x04,0x10,0x04,0x08,0x08, 0x07,0xF0,0x00,0x00},/*"O",47*/{0x10,0x04,0x1F,0xFC,0x10,0x84,0x10,0x80,0x10,0x80,0x10,0x80, 0x0F,0x00,0x00,0x00},/*"P",48*/{0x07,0xF0,0x08,0x18,0x10,0x24,0x10,0x24,0x10,0x1C,0x08,0x0A, 0x07,0xF2,0x00,0x00},/*"Q",49*/{0x10,0x04,0x1F,0xFC,0x11,0x04,0x11,0x00,0x11,0xC0,0x11,0x30, 0x0E,0x0C,0x00,0x04},/*"R",50*/{0x00,0x00,0x0E,0x1C,0x11,0x04,0x10,0x84,0x10,0x84,0x10,0x44, 0x1C,0x38,0x00,0x00},/*"S",51*/{0x18,0x00,0x10,0x00,0x10,0x04,0x1F,0xFC,0x10,0x04,0x10,0x00, 0x18,0x00,0x00,0x00},/*"T",52*/{0x10,0x00,0x1F,0xF8,0x10,0x04,0x00,0x04,0x00,0x04,0x10,0x04, 0x1F,0xF8,0x10,0x00},/*"U",53*/{0x10,0x00,0x1E,0x00,0x11,0xE0,0x00,0x1C,0x00,0x70,0x13,0x80, 0x1C,0x00,0x10,0x00},/*"V",54*/{0x1F,0xC0,0x10,0x3C,0x00,0xE0,0x1F,0x00,0x00,0xE0,0x10,0x3C, 0x1F,0xC0,0x00,0x00},/*"W",55*/{0x10,0x04,0x18,0x0C,0x16,0x34,0x01,0xC0,0x01,0xC0,0x16,0x34, 0x18,0x0C,0x10,0x04},/*"X",56*/{0x10,0x00,0x1C,0x00,0x13,0x04,0x00,0xFC,0x13,0x04,0x1C,0x00, 0x10,0x00,0x00,0x00},/*"Y",57*/{0x08,0x04,0x10,0x1C,0x10,0x64,0x10,0x84,0x13,0x04,0x1C,0x04, 0x10,0x18,0x00,0x00},/*"Z",58*/{0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFE,0x40,0x02,0x40,0x02, 0x40,0x02,0x00,0x00},/*"[",59*/{0x00,0x00,0x30,0x00,0x0C,0x00,0x03,0x80,0x00,0x60,0x00,0x1C, 0x00,0x03,0x00,0x00},/*"\",60*/{0x00,0x00,0x40,0x02,0x40,0x02,0x40,0x02,0x7F,0xFE,0x00,0x00, 0x00,0x00,0x00,0x00},/*"]",61*/{0x00,0x00,0x00,0x00,0x20,0x00,0x40,0x00,0x40,0x00,0x40,0x00, 0x20,0x00,0x00,0x00},/*"^",62*/{0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01, 0x00,0x01,0x00,0x01},/*"_",63*/0x00,0x00,0x00,0x00},/*"`",64*/{0x00,0x00,0x00,0x98,0x01,0x24,0x01,0x44,0x01,0x44,0x01,0x44, 0x00,0xFC,0x00,0x04},/*"a",65*/{0x10,0x00,0x1F,0xFC,0x00,0x88,0x01,0x04,0x01,0x04,0x00,0x88, 0x00,0x70,0x00,0x00},/*"b",66*/{0x00,0x00,0x00,0x70,0x00,0x88,0x01,0x04,0x01,0x04,0x01,0x04, 0x00,0x88,0x00,0x00},/*"c",67*/{0x00,0x00,0x00,0x70,0x00,0x88,0x01,0x04,0x01,0x04,0x11,0x08, 0x1F,0xFC,0x00,0x04},/*"d",68*/{0x00,0x00,0x00,0xF8,0x01,0x44,0x01,0x44,0x01,0x44,0x01,0x44, 0x00,0xC8,0x00,0x00},/*"e",69*/{0x00,0x00,0x01,0x04,0x01,0x04,0x0F,0xFC,0x11,0x04,0x11,0x04, 0x11,0x00,0x18,0x00},/*"f",70*/{0x00,0x00,0x00,0xD6,0x01,0x29,0x01,0x29,0x01,0x29,0x01,0xC9, 0x01,0x06,0x00,0x00},/*"g",71*/{0x10,0x04,0x1F,0xFC,0x00,0x84,0x01,0x00,0x01,0x00,0x01,0x04, 0x00,0xFC,0x00,0x04},/*"h",72*/{0x00,0x00,0x01,0x04,0x19,0x04,0x19,0xFC,0x00,0x04,0x00,0x04, 0x00,0x00,0x00,0x00},/*"i",73*/{0x00,0x00,0x00,0x03,0x00,0x01,0x01,0x01,0x19,0x01,0x19,0xFE, 0x00,0x00,0x00,0x00},/*"j",74*/{0x10,0x04,0x1F,0xFC,0x00,0x24,0x00,0x40,0x01,0xB4,0x01,0x0C, 0x01,0x04,0x00,0x00},/*"k",75*/{0x00,0x00,0x10,0x04,0x10,0x04,0x1F,0xFC,0x00,0x04,0x00,0x04, 0x00,0x00,0x00,0x00},/*"l",76*/{0x01,0x04,0x01,0xFC,0x01,0x04,0x01,0x00,0x01,0xFC,0x01,0x04, 0x01,0x00,0x00,0xFC},/*"m",77*/{0x01,0x04,0x01,0xFC,0x00,0x84,0x01,0x00,0x01,0x00,0x01,0x04, 0x00,0xFC,0x00,0x04},/*"n",78*/{0x00,0x00,0x00,0xF8,0x01,0x04,0x01,0x04,0x01,0x04,0x01,0x04, 0x00,0xF8,0x00,0x00},/*"o",79*/{0x01,0x01,0x01,0xFF,0x00,0x85,0x01,0x04,0x01,0x04,0x00,0x88, 0x00,0x70,0x00,0x00},/*"p",80*/{0x00,0x00,0x00,0x70,0x00,0x88,0x01,0x04,0x01,0x04,0x01,0x05, 0x01,0xFF,0x00,0x01},/*"q",81*/{0x01,0x04,0x01,0x04,0x01,0xFC,0x00,0x84,0x01,0x04,0x01,0x00, 0x01,0x80,0x00,0x00},/*"r",82*/{0x00,0x00,0x00,0xCC,0x01,0x24,0x01,0x24,0x01,0x24,0x01,0x24, 0x01,0x98,0x00,0x00},/*"s",83*/{0x00,0x00,0x01,0x00,0x01,0x00,0x07,0xF8,0x01,0x04,0x01,0x04, 0x00,0x00,0x00,0x00},/*"t",84*/{0x01,0x00,0x01,0xF8,0x00,0x04,0x00,0x04,0x00,0x04,0x01,0x08, 0x01,0xFC,0x00,0x04},/*"u",85*/0x01,0x80,0x01,0x00},/*"v",86*/{0x01,0xF0,0x01,0x0C,0x00,0x30,0x01,0xC0,0x00,0x30,0x01,0x0C,0x01,0xF0,0x01,0x00},/*"w",87*/{0x00,0x00,0x01,0x04,0x01,0x8C,0x00,0x74,0x01,0x70,0x01,0x8C,0x01,0x04,0x00,0x00},/*"x",88*/{0x01,0x01,0x01,0x81,0x01,0x71,0x00,0x0E,0x00,0x18,0x01,0x60,0x01,0x80,0x01,0x00},/*"y",89*/{0x00,0x00,0x01,0x84,0x01,0x0C,0x01,0x34,0x01,0x44,0x01,0x84,0x01,0x0C,0x00,0x00},/*"z",90*/{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x3E,0xFC,0x40,0x02,0x40,0x02},/*"{",91*/{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00},/*"|",92*/{0x00,0x00,0x40,0x02,0x40,0x02,0x3E,0xFC,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"}",93*/{0x00,0x00,0x60,0x00,0x80,0x00,0x80,0x00,0x40,0x00,0x40,0x00,0x20,0x00,0x20,0x00},/*"~",94*/};void delay_init(u8 SYSCLK){SysTick->CTRL&=0xfffffffb; //bit2清空,选择外部时钟 HCLK/8 fac_us=SYSCLK/8;fac_ms=(u16)fac_us*1000;}void delay_ms(u16 nms){u32 temp;SysTick->LOAD=(u32)nms*fac_ms; //时间加载(SysTick->LOAD为24bit) SysTick->VAL =0x00; //清空计数器SysTick->CTRL=0x01 ; //开始倒数do{temp=SysTick->CTRL;}while(temp&0x01&&!(temp&(1<<16))); //等待时间到达SysTick->CTRL=0x00; //关闭计数器SysTick->VAL =0X00; //清空计数器}void delay_us(u32 nus){u32 temp;SysTick->LOAD=nus*fac_us; //时间加载SysTick->VAL=0x00; //清空计数器SysTick->CTRL=0x01 ; //开始倒数do{temp=SysTick->CTRL;}while(temp&0x01&&!(temp&(1<<16))); //等待时间到达SysTick->CTRL=0x00; //关闭计数器SysTick->VAL =0X00; //清空计数器}void Led_Init(void){RCC->APB2ENR|=1<<3; //使能PORTB接口时钟GPIOB->CRH&=0XFFF0FFFF;GPIOB->CRH|=0X00030000; //PB12推挽输出GPIOB->ODR|=1<<12; //PB12输出高电平GPIOB->CRH&=0XFF0FFFFF;GPIOB->CRH|=0X00300000; //PB13推挽输出GPIOB->ODR|=1<<13; //PB13输出高电平GPIOB->CRH&=0XF0FFFFFF;GPIOB->CRH|=0X03000000; //PB14推挽输出GPIOB->ODR|=1<<14; //PB14输出高电平GPIOB->CRH&=0X0FFFFFFF;GPIOB->CRH|=0X30000000; //PB15推挽输出GPIOB->ODR|=1<<15; //PB15输出高电平}void Red_Led_Light(void){LED_RED=0;}void Red_Led_Goout(void){LED_RED=1;}void Green_Led_Light(void){LED_GREEN=0;}void Green_Led_Goout(void){LED_GREEN=1;}void Yellow_Led_Light(void){LED_YELLOW=0;}void Yellow_Led_Goout(void){LED_YELLOW=1;}void Blue_Led_Light(void){LED_BLUE=0;}void Blue_Led_Goout(void){LED_BLUE=1;}void DHT11_Rst(void){DHT11_IO_OUT(); //SET OUTPUTDHT11_DQ_OUT=0; //拉低DQdelay_ms(20); //拉低至少18msDHT11_DQ_OUT=1; //DQ=1delay_us(30); //主机拉高20~40us}u8 DHT11_Check(void){u8 retry=0;DHT11_IO_IN();while(DHT11_DQ_IN&&retry<100) //DHT11会拉低40~80us {retry++;delay_us(1);};if(retry>=100)return 1;else retry=0;while (!DHT11_DQ_IN&&retry<100) //DHT11拉低后会再次拉高40~80us {retry++;delay_us(1);};if(retry>=100)return 1;return 0;}u8 DHT11_Read_Bit(void){u8 retry=0;while(DHT11_DQ_IN&&retry<100) //等待变为低电平{retry++;delay_us(1);}retry=0;while(!DHT11_DQ_IN&&retry<100) //等待变高电平{retry++;delay_us(1);}delay_us(40); //等待40usif(DHT11_DQ_IN)return 1;else return 0;}u8 DHT11_Read_Byte(void){u8 i,dat;dat=0;for(i=0;i<8;i++){dat<<=1;dat|=DHT11_Read_Bit();}return dat;}u8 DHT11_Read_Data(u8 *temp,u8 *humi){u8 buf[5];u8 i;DHT11_Rst();if(DHT11_Check()==0){for(i=0;i<5;i++){buf[i]=DHT11_Read_Byte();} //读取40位数据if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4]){*humi=buf[0];*temp=buf[2];} }else return 1;return 0;}u8 DHT11_Init(void){RCC->APB2ENR|=1<<2; //使能PORTA口时钟GPIOA->CRL&=0XFFFFFFF0; //PORTA.11 推挽输出GPIOA->CRL|=0X00000003;GPIOA->ODR|=1<<0; //输出1DHT11_Rst();return DHT11_Check();void OLED_Refresh_Gram(void){u8 i,n;for(i=0;i<8;i++){OLED_WR_Byte (0xb0+i,OLED_CMD); //设置页地址(0~7)OLED_WR_Byte (0x00,OLED_CMD); //设置显示位置—列低地址 OLED_WR_Byte (0x10,OLED_CMD); //设置显示位置—列高地址 for(n=0;n<128;n++){OLED_WR_Byte(OLED_GRAM[n][i],OLED_DATA);} }}void OLED_WR_Byte(u8 dat,u8 cmd){u8 i;if(cmd){OLED_RS_Set();}else{OLED_RS_Clr();}for(i=0;i<8;i++){OLED_SCLK_Clr();if(dat&0x80){OLED_SDIN_Set();}else{OLED_SDIN_Clr();}OLED_SCLK_Set();dat<<=1;}OLED_RS_Set();}void OLED_Display_On(void){OLED_WR_Byte(0X8D,OLED_CMD); //SET DCDC命令OLED_WR_Byte(0X14,OLED_CMD); //DCDC ONOLED_WR_Byte(0XAF,OLED_CMD); //DISPLAY ON}void OLED_Display_Off(void){OLED_WR_Byte(0X8D,OLED_CMD); //SET DCDC命令OLED_WR_Byte(0X10,OLED_CMD); //DCDC OFFOLED_WR_Byte(0XAE,OLED_CMD); //DISPLAY OFF}void OLED_Clear(void){u8 i,n;for(i=0;i<8;i++)for(n=0;n<128;n++)OLED_GRAM[n][i]=0X00;OLED_Refresh_Gram(); //更新显示void OLED_DrawPoint(u8 x,u8 y,u8 t){u8 pos,bx,temp=0;if(x>127||y>63)return; //超出范围了.pos=7-y/8;bx=y%8;temp=1<<(7-bx);if(t)OLED_GRAM[x][pos]|=temp;else OLED_GRAM[x][pos]&=~temp;}void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 size,u8 mode){u8 temp,t,t1;u8 y0=y;chr=chr-' ';for(t=0;t<size;t++){if(size==12){temp=oled_asc2_1206[chr][t];} //调用1206字体 else{temp=oled_asc2_1608[chr][t];} //调用1608字体 for(t1=0;t1<8;t1++){if(temp&0x80){OLED_DrawPoint(x,y,mode);}else{OLED_DrawPoint(x,y,!mode);}temp<<=1;y++;if((y-y0)==size){y=y0;x++;break;}}}}u32 oled_pow(u8 m,u8 n){u32 result=1;while(n--)result*=m;return result;}void OLED_ShowNumber(u8 x,u8 y,u32 num,u8 len,u8 size){u8 t,temp;u8 enshow=0;for(t=0;t<len;t++){temp=(num/oled_pow(10,len-t-1))%10;if(enshow==0&&t<(len-1)){if(temp==0){OLED_ShowChar(x+(size/2)*t,y,' ',size,1);continue;}else{enshow=1;}}OLED_ShowChar(x+(size/2)*t,y,temp+'0',size,1);}}void OLED_ShowString(u8 x,u8 y,const u8 *p){#define MAX_CHAR_POSX 122#define MAX_CHAR_POSY 58while(*p!='\0'){if(x>MAX_CHAR_POSX){x=0;y+=16;}if(y>MAX_CHAR_POSY){y=x=0;OLED_Clear();}OLED_ShowChar(x,y,*p,12,1);x+=8;p++;}}void Oled_Init(void){RCC->APB2ENR|=1<<3; //使能PORTB时钟GPIOB->CRL&=0XFFF0FFFF;GPIOB->CRL|=0X00020000; //PB4 推挽输出RCC->APB2ENR|=1<<4; //使能PORTC时钟RCC->APB2ENR|=1<<0; //使能AFIO时钟GPIOC->CRH&=0X000FFFFF; //PC13,14,15设置成输出 2MHz 推挽输出GPIOC->CRH|=0X22200000;PWR->CR|=1<<8; //取消备份区写保护RCC->BDCR&=0xFFFFFFFE; //外部低俗振荡器关闭 PC14,PC15成为普通IO BKP->CR&=0xFFFFFFFE; //侵入检测TAMPER引脚作为通用IO口使用PWR->CR&=0xFFFFFEFF; //备份区写保护OLED_RST_Clr();delay_ms(100);OLED_RST_Set();OLED_WR_Byte(0xAE,OLED_CMD); //关闭显示OLED_WR_Byte(0xD5,OLED_CMD); //设置时钟分频因子,震荡频率OLED_WR_Byte(80,OLED_CMD); //[3:0],分频因子;[7:4],震荡频率OLED_WR_Byte(0xA8,OLED_CMD); //设置驱动路数OLED_WR_Byte(0X3F,OLED_CMD); //默认0X3F(1/64)OLED_WR_Byte(0xD3,OLED_CMD); //设置显示偏移OLED_WR_Byte(0X00,OLED_CMD); //默认为0OLED_WR_Byte(0x40,OLED_CMD); //设置显示开始行 [5:0],行数OLED_WR_Byte(0x8D,OLED_CMD); //电荷泵设置OLED_WR_Byte(0x14,OLED_CMD); //bit2,开启/关闭OLED_WR_Byte(0x20,OLED_CMD); //设置内存地址模式OLED_WR_Byte(0x02,OLED_CMD);//[1:0],00,列地址模式;01,行地址模式;10,页地址模式;默认10;OLED_WR_Byte(0xA1,OLED_CMD); //段重定义设置,bit0:0,0->0;1,0->127;OLED_WR_Byte(0xC0,OLED_CMD);//设置COM扫描方向;bit3:0,普通模式;1,重定义模式 COM[N-1]->COM0;N:驱动路数OLED_WR_Byte(0xDA,OLED_CMD); //设置COM硬件引脚配置OLED_WR_Byte(0x12,OLED_CMD); //[5:4]配置OLED_WR_Byte(0x81,OLED_CMD); //对比度设置OLED_WR_Byte(0xEF,OLED_CMD); //1~255;默认0X7F (亮度设置,越大越亮)OLED_WR_Byte(0xD9,OLED_CMD); //设置预充电周期OLED_WR_Byte(0xf1,OLED_CMD); //[3:0],PHASE 1;[7:4],PHASE 2;OLED_WR_Byte(0xDB,OLED_CMD); //设置VCOMH 电压倍率OLED_WR_Byte(0x30,OLED_CMD);//[6:4] 000,0.65*vcc;001,0.77*vcc;011,0.83*vcc;OLED_WR_Byte(0xA4,OLED_CMD);//全局显示开启;bit0:1,开启;0,关闭;(白屏/黑屏)OLED_WR_Byte(0xA6,OLED_CMD); //设置显示方式;bit0:1,反相显示;0,正常显示 OLED_WR_Byte(0xAF,OLED_CMD); //开启显示OLED_Clear();}void Oled_Show(void){OLED_ShowString(0,0,"****************");OLED_ShowString(22,20,"DHT11--TEST");OLED_ShowString(30,30,"T: 'C");OLED_ShowString(30,40,"H: %");OLED_ShowString(0,50,"****************");OLED_Refresh_Gram();}int main(void){u8 t;u8 temperature;u8 humidity;Stm32_Clock_Init(9); //系统时钟设置delay_init(72); //延时初始化JTAG_Set(JTAG_SWD_DISABLE); //关闭JTAG接口JTAG_Set(SWD_ENABLE); //打开SWD接口Oled_Init();Led_Init(); //LED初始化while(DHT11_Init()) //初始化DHT11{delay_ms(1000);LED_RED = !LED_RED;} //DS0闪烁Oled_Show();while(1){if(t%10==0){DHT11_Read_Data(&temperature,&humidity);。
基于STM32的温湿度检测(DHT11)
![基于STM32的温湿度检测(DHT11)](https://img.taocdn.com/s3/m/c8829ed16f1aff00bed51e9e.png)
//systick 为 24 位
//清空计数器 //使能,减到零是无
temp=SysTick->CTRL; 值
}while((temp&0x01)&&(!(temp&(1<<16)))); SysTick->CTRL = 0x00; SysTick->VAL = 0x00; }
void Delay(__IO uint32_t nCount); void delay_us(u16 count); void delay_ms(u16 count);
void USART_OUT(USART_TypeDef* USARTx, uint8_t *Data,...); void USART_Config(USART_TypeDef* USARTx); char *itoa(int value, char *string, int radix); void DHT11_OutH(void); void DHT11_OutL(void); u8 DHT11_ReadBit(void); u8 DHT11_ReadChar(void); u8 DHT11_GetResult(void);
//
停止位 1 位
USART_ART_Parity = USART_Parity_No;
//
无校验位
USART_ART_HardwareFlowControl = USART_HardwareFlowControl_None; //无硬件流控
delay_ms(1800); } }
//系统时钟设置 //中断源配置 //端口初始化
//串口 1 初始化
// 如 果 读 取 数 据 错
基于DHT11的温湿度监测电路设计
![基于DHT11的温湿度监测电路设计](https://img.taocdn.com/s3/m/4f8e38fe4693daef5ef73d37.png)
题目:基于DHT11的温湿度监测电路设计基于DHT11的温湿度监测电路设计摘要本次设计是采用MSC-51系列单片机中的AT89S51和DHT11构成的低成本的温湿度的检测控制系统。
单片机AT89S51是一款低消耗、高性能的CMOS8位单片机,由于它强大的功能和低价位,因此在很多领域得到广泛应用。
DHT11温湿度传感器是一款含有已校准数字输出的温湿度复合传感器,传感器包括一个电阻式感湿原件和一个NTC 测温元件,该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。
设计主要包括硬件电路的设计和系统软件的设计。
硬件电路主要包括单片机、温湿度传感器、显示模块、报警器以及控制设备等五部分。
其中由DHT11温湿度传感器及LCD1602字符型液晶模块构成系统显示模块;测温湿度控制电路由温湿度传感器和预设温度值比较报警电路组成;用户根据需要预先输入预设值,当实际测量的温湿度不符合预设的温湿度标准时,发出报警信号(蜂鸣器蜂鸣)。
软件部分包括了主程序、显示子程序、测温湿度子程序。
关键词:AT89S51;DHT11;温湿度监测DHT11 Temperature and Humidity monitoring circuit designABSTRACTAT89S51 is a low consumption, high performance CMOS8 bit microcontroller.Because of its powerful features and low price, it is used in many areas.DHT11 temperature and humidity sensor is a temperature and humidity combined sensor containing a calibrated digital output, the sensor consists of a resistor in the original sense of wet and a NTC temperature measurement devices.The product has many advantages, such as excellent quality, fast response, strong anti-jamming capability . This design is fromed by the AT89S51 in MSC-51 Series and DHT11 constitute which is a low-cost temperature and humidity measurement and control system. The design includes the design of hardware circuit design and system software.The hardware has Five modules.They are a microcontroller, temperature and humidity sensors, display module, alarm and control equipment. The LCD1602-character LCD module constitute the system display module.The temperature and humidity control circuit by the temperature and humidity sensors and preset temperature alarm circuit.According to the need of pre-enter the default value, when the actual measurement of the temperature humidity does not conform the preset temperature and humidity standards, send the alarm signal (buzzer will beep).The software part includes the main program, the display routines, temperature and humidity subroutine.Key words:AT89S51 ;DHT11 ;Temperature and humidity monitoring.目录1 前言 (1)1.1本文研究的背景及意义 (1)1.2研究任务和主要内容 (1)1.2.1本系统要完成任务 (1)1.2.2主要内容 (1)2 设计任务要求分析 (2)2.1设计要求 (2)2.2系统组成 (2)2.3本章小结 (2)3 硬件设计 (3)3.1单片机模块设计 (3)3.1.1AT89S51单片机 (3)3.1.2单片机最小系统 (4)3.1.3复位电路 (4)3.1.4时钟电路 (5)3.1.5温湿度设置(按键)电路 (6)3.2显示电路 (6)3.3传感器电路 (8)3.4电源指示灯电路 (10)3.5系统的蜂鸣器电路 (10)3.6本章小结 (11)4软件设计 (12)4.1温湿度采集模块 (14)4.2显示模块 (15)4.3蜂鸣器报警模块 (15)4.4PROTUES运行结果 (16)4.5本章小结 (17)结论 (18)参考文献 (19)致谢 (20)1 前言1.1 本文研究的背景及意义在日常生活中,温湿度监控系统应用很广泛,例如:机房、档案馆、材料加工场等场所,都必须严格控制环境的温度和相对湿度,使其保持在一定的范围。
STM32(三十一)DHT11温湿度传感器获取温湿度数据
![STM32(三十一)DHT11温湿度传感器获取温湿度数据](https://img.taocdn.com/s3/m/9b9638c87e192279168884868762caaedd33bace.png)
t1~t2⾄少18ms t3~t420~40us t5~t680us t7~t880us t9~t1050us t11~t1226us~28us(表⽰数据0)t13~t14 50us t15~t1670us(表⽰数据1)STM32(三⼗⼀)DHT11温湿度传感器获取温湿度数据⼀、传感器实物图⼆、传感器应⽤电路图:通过原理图可知dht11通过DQ 脚和STM32F407ZE06的PG9连接。
通过DQ 进⾏数据传输,串⾏接⼝ (单线双向),半双⼯的⼯作模式。
串⾏接⼝ (单线双向)DATA ⽤于微处理器与 DHT11之间的通讯和同步,采⽤单总线数据格式,⼀次通讯时间4ms 左右,数据分⼩数部分和整数部分,具体格式在下⾯说明,当前⼩数部分⽤于以后扩展,现读出为零.操作流程如下:⼀次完整的数据传输为40bit,⾼位先出。
数据格式:8bit 湿度整数数据+8bit 湿度⼩数数据+8bi 温度整数数据+8bit 温度⼩数数据+8bit 校验和数据传送正确时校验和数据等于“ 8bit 湿度整数数据+8bit 湿度⼩数数据+8bi 温度整数数据+8bit 温度⼩数数据” 所得结果的末8位。
三、数据传输过程 ⽤户MCU 发送⼀次开始信号后,DHT11从低功耗模式转换到⾼速模式,等待主机开始信号结束后,DHT11发送响应信号,送出40bit 的数据,并触发⼀次信号采集,⽤户可选择读取部分数据.从模式下,DHT11接收到开始信号触发⼀次温湿度采集,如果没有接收到主机发送开始信号,DHT11不会主动进⾏温湿度采集.采集数据后转换到低速模式。
(1)起始阶段:主机(DQ 脚PG9)主动发送⾄少18ms(t1-t2)的低电平(开始信号)此时PG9是输出模式(MCU 给DHT11发),保证DHT11能检测到起始信号,DHT11检测到起始信号后,从低功耗模式转换为⾼速模式,在拉⾼延时等待20~40us (t3-t4),此时开始信号结束。
基于DHT11的温湿度检测报告
![基于DHT11的温湿度检测报告](https://img.taocdn.com/s3/m/13803dd3f524ccbff0218408.png)
课题:基于 DHT11 的温湿度检测
图二:DHT11 封装尺寸图
2、引脚说明
第一根引脚
第二根引脚
第三根引脚
第四根引脚
正面从左向右数
VDD 供电 3— 5.5VDC
串行数据 单总线
GND 空脚,请悬空
接地,电源负极
3、工作原理
3.1 数据传输格式
单片机发送一次开始信号后,DHT11 从低功耗模式转换到高速模式,等待单片机开始
一、设计目的
1、掌握 AT89C52 的控制 2、掌握 DHT11 的控制原理 3、掌握数码管的动态扫描 4、掌握按键的输入
二、设计要求
1、温、湿度实时检测及显示:通过 4 位数码管实时显示传感器 DHT11 检测到的温度 和湿度,并可通过固定时间切换显示温度和湿度。
2、温、湿度上下限设置按钮:分配按键,通过对应的按键,可实现对温度上、下限的 设置;湿度上、下限的控制。
如果总线为高电平,说明 DHT11 没有响应,有可能是线路没插好。
四、方案说明及相关功能电路接线图
4.1 整体框架图
采集装置 DHT11
控制中心 AT89C52
显示装置 数码管
输入装置 按键
报警装置 蜂鸣器
4.2 控制中心——AT89C52 单片机
图七:AT89C52 单片机的最小系统电路图 该系统的控制中心,是由一片 AT89C52 单片机来控制、分析。该款单片机的最小系统 由复位电路、晶振电路,I\O 口电路,完成其它功能的元器件均接在该片单片机的 I\O 口上, 由该单片机控制。
1、基本参数..............................................................................................................................2 2、引脚说明..............................................................................................................................3 3、工作原理..............................................................................................................................3 四、方案说明及相关功能电路接线图 ...................................................................................5 4.1 整体框架图..........................................................................................................................5 4.2 控制中心——AT89C52 单片机.........................................................................................5 4.3 采集装置——DHT11 传感器 ...........................................................................................5 4.4 输入装置——按键.............................................................................................................5 4.5 显示装置——数码管.........................................................................................................6 4.6 报警装置——蜂鸣器.........................................................................................................7 五、主要程序流程图 ...............................................................................................................8 六、调试结果: .....................................................................................................................10 6.1 总体显示:........................................................................................................................10 6.2 按键调试:........................................................................................................................10 6.3 报警调试............................................................................................................................11 七、调试过程遇到的问题 .....................................................................................................11 7.1 问题:单片机始终未接收到 DHT11 的信号。 .............................................................11 7.2 问题:数码管动态扫描不稳定。....................................................................................11 7.3 问题:数码管显示位数太少,要显示的东西太多。....................................................12 7.4 问题:报警太单一,无法区分是湿度报警,还是温度报警。....................................12 八、实验总结 .........................................................................................................................12 九、程序清单 .........................................................................................................................13 十、效果图 .............................................................................................................................21
湿度传感实验报告
![湿度传感实验报告](https://img.taocdn.com/s3/m/e2a48d367ed5360cba1aa8114431b90d6c85891c.png)
湿度传感实验报告本实验旨在通过湿度传感器来测量环境中的湿度,并且了解湿度对于环境及人体的影响,以及不同湿度条件下传感器的工作特性。
实验材料:1. Arduino开发板2. DHT11湿度传感器3. 连接线4. 计算机实验步骤:1. 将Arduino开发板连接到计算机,并打开Arduino IDE软件。
2. 将DHT11传感器连接到Arduino开发板。
将传感器的VCC引脚连接到5V 接口,GND引脚连接到GND接口,SIG引脚连接到数字引脚2。
3. 在Arduino IDE软件中,选择正确的开发板和端口,并打开示例代码“DHT11库”中的"DHTtester"程序。
4. 上传程序到Arduino开发板中。
5. 观察串口监视器中的输出结果,获取环境湿度的数值。
实验结果:根据上述实验步骤,可以获得环境湿度的数值。
通过修改代码,可以实时获取湿度数值,并进行相应的处理和显示。
在不同时间段或环境条件下,湿度数值可能会有所变化。
讨论与分析:湿度是空气中水蒸汽含量的度量,它对于环境和人体健康都有一定的影响。
湿度过高时,容易导致空气潮湿,增加了霉菌和细菌滋生的机会,对人体呼吸系统和皮肤有不良影响。
湿度过低时,空气干燥,容易引发皮肤干燥、喉咙疼痛等问题。
因此,对于不同环境中的湿度进行监测十分重要。
DHT11湿度传感器采用数字信号输出,具有快速响应、稳定性好、价格低廉等特点,适用于大多数需要测量湿度的应用。
在实验中,我们可以通过读取传感器输出的数值来判断环境湿度的高低。
在实际应用中,湿度传感器可以广泛应用于温室监控、空调控制、智能家居等领域。
通过湿度传感器的数据,可以实时调节环境湿度,提高生活和工作的舒适度。
结论:通过本实验,我们成功使用DHT11湿度传感器对环境湿度进行了测量,并了解了湿度对于环境及人体的影响。
湿度传感器在实际应用中具有重要作用,可以帮助我们及时了解环境的湿度情况,并采取相应的措施进行调节。
基于DHT11的实验室多点温湿度报警系统设计
![基于DHT11的实验室多点温湿度报警系统设计](https://img.taocdn.com/s3/m/a3040e1f866fb84ae45c8d7f.png)
二进制
o l 1o o 00 0
十六进 制
2H 4
十进制
3 6
.
5 O
湿度小数 温度整数 温度小数
校 验 码
o l o 1 o 1 oO O 0 O 1 ol l O 0 0 O o 11 o 0
1 l 1o O 1l0
3H 2 1H 6 5H O
山西 电子 技 术 21 0 1年第 4期
文章 编 号 :6 44 7 (0 )4 04 -2 17 -58 2 1 0 ・0 50 1
应 用 实践
基 于 D T 实验 室 多点 温 湿度 报 警 系统 设 计 H1 1的
王 志宏 , 白翠珍
( 山西 医科 大学 基 础 医学院 , 西 太原 000 ) 山 30 1
BH C
2 2
.
8 O
D T1 H 1 与单 片机主机通讯过程时序如图 3所示 , 总线空 闲状态为高 电平 , 机把 总 线拉 低大 于 1 等 待 D T I 主 8ms H 1
器 和高亮发 光管 , 实现报警 功能。
13 OI l . t l特性研究 T
D T 1 H 1【数字温湿度传感 器 , 2 是一款含有 已校 准数字信
当温湿度 数据超 出设定 温湿 度值 时 , 由单 片 机驱 动 报警 装 置, 实现现场报警功 能。
图 1 系统 原 理 结 构 框 图
1所示 。
表 l 4 bt 0 i数据结构表
1 2 硬 件选 型 .
单 片 机 选 用 国 产 宏 晶 科 技 生 产 的 高 性 价 比 SC 95 R T 8 C 1 C系列 j与传统 8 5 单 片机 相 比, 具有功 , 01 其 耗低 , 抗外部 电磁辐射 干扰强 , 序下 载方式 为 U R 程 A T方式 等优 点 , 用 非 常 方 便 。显 示 模 块 采 用 自带 汉 字 库 的 使 L D 26 , C 18 4 主控 芯 片为 S 72 , 求 支 持 串 口通 信 ( 分 T9 1要 部 L D模块需要跳线 才能 实 现 串 口通 信 功 能 ) C 。报 警 装置 采 用 L D与蜂 鸣器实现声光报警 , E 当温湿 度超出设定 值时 , 单 片机 VO 口输 出高 电平 , N N型三 极管驱 动大 电流蜂 鸣 经 P
《传感器原理及应用》DHT11温湿度检测计实验报告
![《传感器原理及应用》DHT11温湿度检测计实验报告](https://img.taocdn.com/s3/m/565d461bf011f18583d049649b6648d7c0c70841.png)
《传感器原理及应用》DHT11温湿度检测计实验报告基于DHT11温湿度传感器的温湿度计设计1.实验功能要求使用DHT11实现温湿度的测量2.实验所用传感器原理DHT11:单片机通过如下几个步骤完成读取DHT11的数据步骤一:DHT11上电后(DHT11上电后要等待1S以越过不稳定状态在此期间不能发送任何指令),测试环境温湿度数据,并记录数据,同时DHT11的DATA数据线由上拉电阻拉高一直保持高电平;此时DHT11的DATA引脚处于输入状态,时刻检测外部信号。
步骤二:微处理器的I/O设置为输出同时输出低电平,且低电平保持时间不能小于18ms(最大不得超过30ms),然后微处理器的I/O设置为输入状态,由于上拉电阻,微处理器的I/O即DHT11的DATA数据线也随之变高,等待DHT11作出回答信号。
步骤三:DHT11的DATA引脚检测到外部信号有低电平时,等待外部信号低电平结束,延迟后DHT11的DATA引脚处于输出状态,输出83微秒的低电平作为应答信号,紧接着输出87微秒的高电平通知外设准备接收数据,微处理器的I/O此时处于输入状态,检测到I/O有低电平(DHT11回应信号)后,等待87微秒的高电平后的数据接收。
步骤四:由DHT11的DATA引脚输出40位数据,微处理器根据I/O电平的变化接收40位数据,位数据“0”的格式为:54微秒的低电平和23-27微秒的高电平,位数据“1”的格式为:54微秒的低电平加68-74微秒的高电平。
低电平的时间一致,本质比较的是高电平的时间3.实验电路4.实验过程一.单片机上机后1s内不读取二. 主机(单片机)发送起始信号:1.主机先拉高data。
2.拉低data延迟18ms。
3.拉高data(通过此操作将单片机引脚设置为输入)。
三.DHT11收到起始信号后进行应答:拉低data,单片机读取到引脚被输出低电平持续80us后换为高电平,持续80us,直到高电平结束,意味着主机可以开始接受数据。
利用DHT11测温度湿度实验报告
![利用DHT11测温度湿度实验报告](https://img.taocdn.com/s3/m/6c30b8c7195f312b3169a538.png)
微电子工艺实验题目气压温度测量系统学生姓名洪强学号***********学院电子与信息工程学院专业电子科学与技术指导教师曹鸿霞二O一五年十一月二十二日目录目录................................................ 错误!未定义书签。
1 系统描述.......................................... 错误!未定义书签。
1.1 课程设计题目 (2)1.2 系统设计方案介绍 (2)1.3 方案论证 (3)2 硬件电路设计 (3)2.1 LCD1602液晶显示模块 (3)2.1.1 LCD1602原理图及引脚说明 (4)2.1.2 LCD1602操作时序 (5)2.2 AT89C52单片机 (6)2.3 DHT11传感器模块 (7)2.3.1 DHT11原理图及引脚说明 (7)2.3.2 DHT11数据帧 (8)2.3.3 DHT11电气特性 (8)2.3.4 DHT11操作时序 (9)2.4 蜂鸣器模块 (10)2.5 DHT11温湿度检测设计图 (11)3 软件程序设计 (11)3.1 程序流程图 (11)3.2程序设计 (12)3.2.1主程序 (12)3.2.2 LCD显示程序 (13)3.2.3蜂鸣器程序 (20)4 实验结果 (21)5 实验总结 (22)参考文献 (22)测量气压温度测量系统洪强南京信息工程大学电子科学与技术,南京 210044摘要本实验基于使用STC89C52单片机、DHT11传感器模块、1602液晶显示屏模块以及报警模块。
简单明了的实现的可提要求。
DHT11数字温湿度传感器把采集到的温湿度数据传给单片机。
经过单片机的处理。
准确的显示到液晶屏上。
并对温湿度设置上下限。
越限报警。
)关键词:单片机DHT11传感器1602液晶显示屏STC89C52 报警1 系统描述1.1 课程设计题目温度测量及显示要求:①基于52系列单片机平台和DHT11温湿度传感器完成温湿度的测量;②温度测量数据的显示,可以用LCD1602显示;③对温湿度设置上下限,超过限度报警1.2 系统设计方案介绍电路总体上分为温湿度采集部分、中央处理器、显示模块以及报警模块部分。
基于51单片机的DHT11温湿度传感器
![基于51单片机的DHT11温湿度传感器](https://img.taocdn.com/s3/m/21ed821ff18583d0496459ed.png)
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void Delay_10us()//进入函数3us
{
uchar i;//每条语句1us
i--;
i--;
i--;
i--;
i--;
i--;
}
void display(uchar th,uchar tl)
{
uchar ih=0,il=0,jh=0,jl=0,kh=0,kl=0;
{
flag=2;
while((!dth)&&(flag++)); //等待拉高
//Delay_10us();
//Delay_10us();
//Delay_10us();
j=3;while(j--);//延时30us
temp=0;
if(dth==1)temp=1;
flag=2;
while(dth&&(flag++));//等待拉低
//if(flag==1)break;
cdata<<=1;
cdata=cdata|temp;
}
return cdata;
}
void getdth()
{
uchar i;
dth=0;
delayms(18);//18ms
dth=1;
//Delay_10us();
//Delay_10us();
//Delay_10us();
//Delay_10us();
i=4;while(i--);//延时40us
dth=1;
if(dth!=1)//dth11响应
基于DHT11的温度湿度监测系统课程设计报告模板
![基于DHT11的温度湿度监测系统课程设计报告模板](https://img.taocdn.com/s3/m/8851b0c5d15abe23482f4deb.png)
基于DHT11的温度湿度监测系统班级:计科XX班姓名:XX指导老师:XX完成时间:2010年12月10日一:选题背景随着电子科技的迅速发展,对仓库、工厂、博物馆等等地方温湿度监测系统的要求不断增高,从而也促进自动检测系统的迅速发展,本文详细叙述一个计算机温湿度自动检测系统的总体结构,设计原则及具体性能指标。
由于系统具有较高的精度,反应速度快,在环境测量方面具有很好的应用前景。
防潮、防霉、防腐、防爆是仓库、工厂等地方日常工作的重要内容,是衡量仓库、工厂等地方管理质量的重要指标。
它直接影响到储备物资的使用寿命和工作可靠性。
为保证日常工作的顺利进行,首要问题是加强仓库和工厂内温度与湿度的监测工作。
但传统的方法是用与湿度表、毛发湿度表、双金属式测量计和湿度试纸等测试器材,通过人工进行检测,对不符合温度和湿度要求的库房进行通风、去湿和降温等工作。
这种人工测试方法费时费力、效率低,且测试的温度及湿度误差大,随机性大。
因此我们需要一种造价低廉、使用方便且测量准确的温湿度测量仪。
随着人们生活水平的提高,人们逐渐对温湿度变得敏感起来,对于温度湿度的了解,有助于人们的生活起居。
有时候需要知道空气中的温度湿度,以便于出行和穿戴的选择,有时候需要知道太阳能热水器的水温,以便于洗浴。
为了能实时了解空气中的温度和湿度,有必要制作一种测量温度和湿度的仪器。
有些地方,如博物馆,一些文物必须保存在适合的温度湿度范围内,以免文物长时间接触空气中的水分而造成文物损坏,而文物保存在适合的温度湿度范围内,其代价又太大,有时难以承受。
所以,无论如何,都有必要实时监控空气中的温度湿度,必然需要一种价格低廉,使用方便的测量仪器来监控温度和湿度。
二:需求分析DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。
它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。
传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。
温湿度传感器实验报告
![温湿度传感器实验报告](https://img.taocdn.com/s3/m/cf00da4791c69ec3d5bbfd0a79563c1ec5dad7ae.png)
温湿度传感器实验报告温湿度传感器实验报告引言:温湿度传感器是一种常见的传感器,用于测量周围环境的温度和湿度。
它广泛应用于气象观测、室内环境监测、农业生产等领域。
本实验旨在通过实际操作和数据分析,探究温湿度传感器的工作原理和性能。
实验设备和方法:实验中使用的温湿度传感器是DHT11型号,其工作电压为3-5V,输出为数字信号。
实验所需的其他设备包括Arduino开发板、面包板、杜邦线等。
首先,将DHT11传感器连接到Arduino开发板上。
将传感器的VCC引脚连接到Arduino的5V引脚,GND引脚连接到Arduino的GND引脚,DATA引脚连接到Arduino的数字引脚2。
接下来,编写Arduino代码,通过读取传感器的数据并将其显示在串口监视器上。
代码的主要功能是通过Arduino的数字引脚读取传感器的数据,并将温度和湿度值发送到串口监视器上。
实验结果和分析:经过实验测量和数据分析,我们得到了一组温湿度传感器的测量结果。
在一个封闭的房间环境中,温度和湿度的变化是不可避免的。
我们将这些数据用图表的形式呈现,以更直观地观察温湿度的变化趋势。
首先,我们观察到在一天的不同时间段,温度和湿度的变化是有规律的。
例如,在白天温度较高,湿度较低;而在晚上温度较低,湿度较高。
这是由于太阳的照射和人体活动等因素的影响。
其次,我们还发现温湿度传感器对环境的变化非常敏感。
例如,当有人进入房间时,体温和呼吸会导致温度和湿度的瞬时变化。
这进一步验证了温湿度传感器的精确度和灵敏度。
此外,通过对数据的分析,我们还可以得出一些结论。
例如,温度和湿度之间存在一定的相关性。
当温度升高时,湿度往往会降低;反之亦然。
这可能是由于水分的蒸发和空气的冷却等因素的影响。
结论:通过本次实验,我们深入了解了温湿度传感器的工作原理和性能。
它可以准确地测量周围环境的温度和湿度,并对环境的变化做出敏感的反应。
温湿度传感器在气象观测、室内环境监测和农业生产等领域具有广泛的应用前景。
基于DHT11的温湿度监测系统
![基于DHT11的温湿度监测系统](https://img.taocdn.com/s3/m/3391849ce53a580216fcfeaf.png)
Ab s t r a c t :Ai mi n g a t t h e p r o b l e ms o f l a b o r i n t e n s i t y a n d l o w p r o d u c t i v i t y b y ma n p o we r me a s u in r g t h e t e mp e r a — t u r e a n d h u mi d i t y i n v e g e t a b l e s g r e e n h o u s e , mo n i t o r i n g s y s t e m o f t e mp e r a t u r e a n d h u mi d i t y b a s e d o n DHT 1 1 i s d e s i g n e d, f o r me a s u in r g t h e t e mp e r a t u r e a n d h u mi d i t y i n g r e e n h o u s e .T h e c o r e o f t h e s y s t e m i s At me g a 1 6 9 p
g o o d f e a t u r e s s u c h a s s i mp l e o pe r a t i o n、 wo r k i ng s t a b l y、 l o w p o we r c o ns u mp t i o n a n d l o w c o s t . Ke y wo r ds: AVR s i n g l e —c h i p mi c r o c o mp ut e r ; t e mp e r a t u r e a n d h u mi d i t y; mo n i t o in r g
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、设计目的 (2)二、设计要求 (2)三、DHT11介绍 (2)1、基本参数 (2)2、引脚说明 (3)3、工作原理 (3)四、方案说明及相关功能电路接线图 (5)4.1整体框架图 (5)4.2控制中心——AT89C52单片机 (5)4.3 采集装置——DHT11传感器 (5)4.4 输入装置——按键 (5)4.5 显示装置——数码管 (6)4.6 报警装置——蜂鸣器 (7)五、主要程序流程图 (8)六、调试结果: (10)6.1总体显示: (10)6.2按键调试: (10)6.3报警调试 (11)七、调试过程遇到的问题 (11)7.1问题:单片机始终未接收到DHT11的信号。
(11)7.2问题:数码管动态扫描不稳定。
(11)7.3问题:数码管显示位数太少,要显示的东西太多。
(11)7.4问题:报警太单一,无法区分是湿度报警,还是温度报警。
(12)八、实验总结 (12)九、程序清单 (13)十、效果图 (20)由于对生态环境的破坏,导致近几年气候极其不稳定。
有时昨天还短衣短裤,过着夏天的生活,一觉醒来,一朝回到寒冷冬季。
由于没注意到温、湿度的变化,及时添衣补水,导致感冒频发,所以对温湿度的检测及控制就非常有必要了。
51系列单片机由于价格低廉,便于控制,时常用于小型程序的控制。
本文便采用AT89C52来进行对DHT11采集到的信号进行分析、控制,使其能实时采集当前温度、湿度,并可通过对应来按键来进行温湿度上下限的设置,若当前温度超过设定的上下限时,产生报警、提醒。
将采集信号置于室外,可提醒人们出门需添衣补水;将采集信号置于大棚种植中,可提醒农夫对大棚进行调温、对农作物进行补水,防止农作物死亡。
一、设计目的1、掌握AT89C52的控制2、掌握DHT11的控制原理3、掌握数码管的动态扫描4、掌握按键的输入二、设计要求1、温、湿度实时检测及显示:通过4位数码管实时显示传感器DHT11检测到的温度和湿度,并可通过固定时间切换显示温度和湿度。
2、温、湿度上下限设置按钮:分配按键,通过对应的按键,可实现对温度上、下限的设置;湿度上、下限的控制。
3、自动报警:当温度或湿度超过其上、下限时,蜂鸣器会通过不同的报警对象来产生不同的报警方式。
三、DHT11介绍0—50℃图一:DHT11实物图图二:DHT11封装尺寸图3.1数据传输格式单片机发送一次开始信号后,DHT11从低功耗模式转换到高速模式,等待单片机开始信号结束后,DHT11发送40bit的数据,高位先出。
数据格式:8bit湿度整数数据+8bit湿度小数数据+8bit温度整数数据+8bit温度小数数据+8bit校验和数据传输正确时,校验和数据等于“8bit湿度整数数据+8bit湿度小数数据+8bit温度整数数据+8bit温度小数数据”所得结果的末八位如果没有接收到单片机发送的开始信号,DHT11不会主动进行温湿度采集,转换到低功耗模式。
图三:DHT11工作时序图3.2 采集开始方式DHT11空闲时为高电平,单片机把总线拉低等待DHT11响应,拉低时间需大于18ms,保证DHT11能检测到起始信号。
DHT11接收到主机的开始信号后,等待单片机开始信号结束,然后发送80us低电平响应信号。
单片机发送开始信号结束后,延时等待20~40us后,读取DHT11的响应信号,可以切换到输入模式,或者输出高电平均可,总线由上拉电阻拉高。
图四:DHT11启动时序图3.3DHT11信号发送方式图五:“0”信号表示时序图图六:“1”信号表示时序图如果总线为低电平,说明DHT11发送响应信号,DHT11发送响应信号后,会再把总线拉高80us,开始准备数据,每一bit数据都以50us低电平开始,通过判断高电平的时间,来决定采集到的数是“0”还是“1”;当高电平时间为26us~28us时,则采集到的数为“0”,如图四所示;当高电平时间大于28us 时,则采集到的数 “1”,如图五所示。
当最后1bit 数据传输完毕后,DHT11拉低总线50us,随后由上拉电阻拉高进入空闲状态。
如果总线为高电平,说明DHT11没有响应,有可能是线路没插好。
四、方案说明及相关功能电路接线图4.1整体框架图4.2控制中心——AT89C52单片机图七:AT89C52单片机的最小系统电路图该系统的控制中心,是由一片AT89C52单片机来控制、分析。
该款单片机的最小系统由复位电路、晶振电路,I\O 口电路,完成其它功能的元器件均接在该片单片机的I\O 口上,由该单片机控制。
4.3 采集装置——DHT11传感器DHT11信号端接单片机的P2.1口,外加上拉电阻。
DHT11与单片机之间的数据传输都是从该P2.1口上传输。
电路接法如图八所示。
4.4 输入装置——按键按键由一个光电开关和4个普通按键组成。
用户可根据固定的按键来设置温湿度报警的上限线,电路解法如图九所示。
各个按键的作用如下:控制中心 AT89C52采集装置 DHT11 输入装置 按键显示装置 数码管报警装置 蜂鸣器图八:DHT11接线图P3.3口的光电开关:用于切换进入设置界面还是显示界面P3.4口的普通按键:当前设定对象值减一P3.5口的普通按键:当前设定对象值加一P3.6口的普通按键:切换设置对象的上、下限P3.7口的普通按键:切换设置对象(温——湿度)图九:按键接线图4.5 显示装置——数码管显示部分由四位数码管构成的,用户可根据数码管的显示,看到的温、湿度,以及其当前设置的上、下限。
接线图如图十所示。
每位数码管的功能如下:首位:当首位灭时,为显示状态;亮时为设置状态当显示“∪”时,表示设置当前对象的上限当显示为“∩”时,表示设置当前对象的下限末尾:用于判别对象:当显示“E”时,则表示湿度当显示“C“时,则表示温度中间两位数:用于显示数值图十:数码管接线图4.6 报警装置——蜂鸣器当温湿度的其中一项超过其设定的上下限,蜂鸣器就会产生报警,用户可根据不同的报警方式,判断是温度超过界限,还是湿度超过界限。
温度报警:急促的响声湿度报警:缓慢的响声二则同时报警:响停时间一样图十一:蜂鸣器接线图五、主要程序流程图六、调试结果:6.1总体显示:开机上电后,数码管能正常显示当前温度、湿度,并且每隔一段时间会温湿度自动切换。
6.2按键调试:1、进入设置界面(光电开关P3.3),后,数码管会自动显示成当前对应对象所设的对应值,再按一次,则又退出设置界面。
例如:数码管显示“∪40C”,则表示当前设置的温度上限为40℃;显示“∩50E”则表示当前湿度下限设置值为50%。
2、进入设置界面后(光电开关P3.3),按温湿度切换按钮(普通按键P3.7),数码管会自动切换对应对象,并且出现前对应对象所设的对应值。
例如:数码管本来显示“∩50E”,按下按钮后,变成“∩20C”,则表示数码管本来显示的是湿度下限设置为50%,按下按钮后,则数码管变成显示温度下限当前设置值位20℃。
3、进入设置界面后(光电开关P3.3),按上下限切换按钮(普通按键P3.6),数码管会自动切换显示当前对象所设的对应值。
例如:数码管本来显示“∪40C”,按下该按钮后,数码管会变成“∩20C”,则表示数码管本来显示的是温度上限为40℃,按下该按钮后,则数码管会变成显示温度下限当前设置值位20℃。
4、进入设置界面后(光电开关P3.3),按加一按钮(普通按键P3.5),会把当前对象的设置值加一,数码管显示的值也会对应加一。
例如:数码管本来显示“∩20C”,按下该按钮后,数码管显示“∩21C”。
即表示本来当前的温度下限设置值为20℃,按下该按钮后,温度下限的设置值变为21℃。
5、进入设置界面后(光电开关P3.3),按减一按钮(普通按键P3.4),会把当前对象的设置值减一,数码管显示的值也会对应减一。
例如:数码管本来显示“∩50E”,按下该按钮后,数码管显示“∩49E”。
即表示湿度下限本来设置值为50%,按下该按钮后,湿度下限设置值变49%。
6、没有进入设置界面,按其它四个按键无反应。
6.3报警调试1、将温度的报警下限调到超过当前温度或者报警上限调低于当前温度时,蜂鸣器会发出急促的报警声。
2、将湿度的报警下限调到超过当前湿度或者报警上限调低于当前湿度时,蜂鸣器会发出缓慢的报警声。
3、当温湿度同时都报警时,蜂鸣器会发出响停一致的报警声。
4、当正处于报警时,进入设置界面,报警声会停止,用户可重新设置上下限,让报警取消,以免扰民。
七、调试过程遇到的问题7.1问题:单片机始终未接收到DHT11的信号。
现象:运行程序后,数码管始终显示00。
分析:硬件原因,1、DHT11坏了,信号未采集,导致单片机无信号。
软件原因,1、采集步骤出错,未理解透DHT11采集原理,导致信号未采集。
2、显示程序错误,未正确赋值显示,以至于DHT11已采集到信号,但未能正确显示,以至于误以为是DHT11未采集信号。
问题解决:硬件问题排除,买了几个全新的DHT11,分别接上单片机,发现全都不能使用,所以初步排除了硬件原因。
软件原因,最有可能的就是未能正确理解DHT11采集过程,所以特地跟组员规定,先不探讨,各自去看DHT11采集原理,之后再探讨各自认为DHT11如何采集,然后再按各自的理解,一个一个实验,看那个能采集到信号,确定出DHT11正确的采集过程。
7.2问题:数码管动态扫描不稳定。
现象:本来在主程序调用数码管显示程序,使4位数码管逐个给值、显示,4位数码管都能正常稳定的显示,但经过一次数据采集之后,数码管会有一段时间的晃动,甚至全灭,之后再变稳定。
分析:未采集信号前,数码管能正常显示,遇到采集信号时,数码管不能正常显示,推测是DHT11采集时耗时太久,所以数码管更新显示时间边长,所以数码管动态扫描不稳定。
问题解决:采用定时器中断,每隔一段时间,中断发生时,扫描数码管的一位,下次扫描时,自动切换到扫描数码管下一位。
这样能保证数码管稳定显示。
但用中断时,DHT11采集前时,需把中断关掉,防止采集过程中,信号丢失。
7.3问题:数码管显示位数太少,要显示的东西太多。
现象:数码管只有四位,不仅要显示温度、湿度,还要显示湿度与温度各自的最大值与最小值,数据较多。
分析:由于没有标志,不知道当前显示的是什么数,显示是否正确。
问题解决:经小组统一决定将四位数码管的中间两位来显示数值,首尾两个数码管用来确定当前显示的是什么数。
具体的格式如前面数码管的介绍中所说。
在程序中,建立了4个变量,来给数码管显示判断,各个变量各种状态效果如下所述:例如:bianliang和bianliang3都为“0”,则数码管显示当前湿度bianliang=1并且bianliang1和bianliang2都为0,则数码管显示的湿度的最小值。