资源描述
-摘 要由于温度与湿度不管是从物理量本身还是在实际人们的生活中都有着密切的关系,所以温湿度一体的传感器就会相应产生。 DHT11与单片机之间能采用简单的单总线进展通信,仅仅需要一个I/O口。操作简单,使用基亚5110二手屏幕显示DHT11传感器读出来的温度和湿度值。关键字:AT89S52;5110液晶;DHT11传感器;单总线AbstractBecause of the temperature and the humidity from both the physical quantity itself or in the actual life of people are closely related, so the temperature and humidity sensor integrated will arise accordingly. Between DHT11 and SCM can adopt the simple single bus, only need a I/O port. Simple operation, using the base of 5110 secondhand screen display DHT11 sensor Read out the temperature and humidity.Keywords: AT89S52; DHT11 5110 LCD; sensor; single bus. z-目 录 引 言 -11.1 DHT11描述-21.2 管脚排列-21.3 应用电路连接说明-21.4 DHT11数据构造-31.5 DHT11的传输时序-3 DHT11开场发送数据流程-3主机复位信号和DHT11响应信号 -3数字0信号表示方法-3数字1信号表示方法-42、诺基亚5110液晶简介PCD8544驱动-4 2.1 引脚-4 2.2 功能描述:-5 地址计数器 (AC)-5 初始化-5复位的作用-6显示控制-6 串行接口时序-6 指令集 -63、 总结-74、 辞-85、参考文献-96、附录-10 5.1 实验总框架图-10 5.2 硬件局部-10硬件原理图-10 硬件PCB图-11 所需元器件-115.3 实验效果-11 5.4 实验软件程序-12. z-引 言可靠性与卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个8位单片机相连接。该产品具有通信便捷、超快响应、抗干扰能力强等优点。每个DHT11传感器都在OTP存中存入了在湿度校验室中获得的校准系数。校准系数以程序的形式储存,在传感器部在检测信号的处理过程中要调用这些校准系数。单总线串行接口,仅需1个I/O口即可实现对温度和湿度的同时测量,使系统集成变得简易快捷,小体积、低功耗,使其成为一种温湿度测量原件的不错选择。是居家温湿度表不错的传感器件。1.1 DHT11描述DHT11是奥松生产的一款湿温度一体化的数字传感器。该传感器包括一个电阻式测湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。通过单片机等微处理器简单的电路连接就能够实时的采集本地湿度和温度。DHT11与单片机之间能采用简单的单总线进展通信,仅仅需要一个I/O口。传感器部湿度和温度数据40Bit的数据一次性传给单片机,数据采用校验和方式进展校验,有效的保证数据传输的准确性。DHT11功耗很低,5V电源电压下,工作平均最大电流0.5mA。性能指标和特性如下: 1、工作电压围:3.5V-5.5V 2、工作电流 :平均0.5mA 3、湿度测量围:2090RH 4、温度测量围:050 5、湿度分辨率 :5RH 8位 6、温度分辨率 :1 8位 7、采样周期 :1S 8、单总线构造 9、与TTL兼容5V1.2 管脚排列 :. z-PIN名称注释1VDD供电3-5V2DATA串行数据,单总线3NC悬空4GND电源地1.3 应用电路连接说明 DHT11数字湿温度传感器连接方法极为简单。第一脚接电源正,第四脚接电源地端。数据端为第二脚。可直接接主机单片机的I/O口。为提高稳定性,建议在数据端和电源正之间接一只1K的上拉电阻。第三脚为空脚,此管脚悬空不用。 因为DHT11是数字传感器,所以建议在电源正引脚接上滤波电容以提高稳定性。1.4 DHT11数据构造 DHT11数字湿温度传感器采用单总线数据格式。即,单个数据引脚端口完成输入输出双向传输。其数据包由5Byte40Bit组成。数据分小数局部和整数局部,具体格式在下面说明。一次完整的数据传输为40bit,高位先出。数据格式:8bit湿度整数数据+8bit湿度小数数据 +8bit温度整数数据+8bit温度小数数据 +8bit校验和. z- 校验和数据为前四个字节相加。 传感器数据输出的是未编码的二进制数据。数据(湿度、温度、整数、小数)之间应该分开处理。如果,*次从传感器中读取如下5Byte数据: byte4 byte3 byte2 byte1 byte0 00101101 00000000 00011100 00000000 01001001 整数 小数 整数 小数 校验和 湿度 温度 校验和 由以上数据就可得到湿度和温度的值,计算方法: humi (湿度)= byte4 . byte3=45.0 (RH) temp (温度)= byte2 . byte1=28.0 ( ) Jiaoyan=byte4+byte3+byte2+byte1=73(=humi+temp)(校验正确) 注意:DHT11一次通讯时间最大3ms,主机连续采样间隔建议不小于100ms。1.5 DHT11的传输时序、DHT11开场发送数据流程主机发送开场信号后,延时等待20us-40us后读取DH11T的回应信号,读取总线为低电平,说明DHT11发送响应信号,DHT11发送响应信号后,再把总线拉高,准备发送数据,每一bit数据都以低电平开场,格式见下面图示。如果读取响应信号为高电平,则DHT11没有响应,请检查线路是否连接正常。 VCC主机开场 DHT响应输出 数据0 数据1 GND 拉高并等待 准备输出 主机复位信号和DHT11响应信号 VCC 主机拉高20-40us DHT拉高40-50us GND 主机至少拉低18ms DHT拉高40-50us传送指令开场数字0信号表示方法VCC26-28us 表示 0下一位开场. z-GND12-14us1BIT开场数字1信号表示方法 VCC116-118us 表示 1下一位开场GND1BIT开场 12-14us2、诺基亚5110液晶简介PCD8544驱动特征:单芯片LCD 控制/驱动48 行,84 列输出显示数据RAM 48*84 位芯片集成:LCD 电压发生器也可以使用外部电压供给LCD偏置电压发生器振荡器不需要外接元件也可以使用外部时钟外部RES复位输入引脚串行界面最高4.0Mbits/SCMOS 兼容输入混合速率:48逻辑电压围VDD 到VSS:2.7V3.3V显示电压围VLCD 到VSS:6.08.5V LCD部电压发生器充许电压发生器6.09.0V LCD 外部电压供给电压发生器关闭低功耗,适用于电池供电系统关于VLCD 的温度补偿使用温度围:-25702.1 引脚. z-SDIN串行数据输入端SCLK串行时钟输入端D/C数据/命令SCE芯片使能RES外部复位输入端SDIN:串行数据线 输入:数据线。SCLK: 串行时钟线 输入:时钟信号: 0.0 4.0 Mbits/s.D/C: 模式选择 输入:选择命令/地址或输入数据 SCE: 芯片使能使能引脚充许输入数据,低电平有效。RES:复位此信号会复位设备,应用于初始化芯片。低电平有效。2.2 功能描述:地址计数器 (AC) 地址计数器为写入显示数据存储器指定地址。*地址 *6*0和Y地址Y2Y0 分别设置。写入操作之后,地址计数器依照V标志自动加1。显示数据存储器 (DDRAM)。DDRAM是存储显示数据的48*84位静态RAM。RAM分为6排,每排84字节6*8*84位。RAM期间,数据通过串行接口传输。这里*地址与列输出直接通信。 初始化 接电源后,部存放器和RAM的容不确定。必须应用一个RES脉冲。注意,不正确的复位是危险的,可能会损坏设备。所有部存放器在指定的时间,通过31脚的外部RES脉冲低电平复位。无论如何,RAM的容仍然不确定。复位的作用 复位后,LCD驱动器有以下状态:电源节省模式 (位 PD = 1)水平寻址 (位 V = 0)常规指令设置(位 H = 0)显示页(位 E = D = 0)地址计数器 *6 至 *0 = 0; Y2 至 Y0 = 0温度控制模式(TC1 TC0 = 0)偏置系统 (BS2 至 BS0 = 0)VLCD 等于 0, HV 发生器为关闭状态(VOP6 至 VOP0 = 0)加电后,RAM容不确定。显示控制 位 D 和 E 位 D 和 E 选择显示模式 设置RAM的 Y 地址 定义显示RAM的Y寻址向量。Y的围是0至5 设置RAM的 * 地址 * 地址指向列。*的围是0至8353H。. z-位 V 当 V = 0,选择水平寻址。数据写入DDRAM 当 V = 1,选择垂直寻址。数据写进DDRAM位 H 当 H = 0, 可以执行显示控制,设置Y地址和设置*地址; 当 H = 1,可以执行其它命令。 操作电压 VLCD 可以用软件设置,值根据液晶来选择。VLCD = a + (VOP6 to VOP0)* b V.对于PCD8544,a = 3.06 ,b = 0.06在室温下的编程围为3.0010.68。注意如果VOP 6to VOP0设为0时,会关闭负荷的吸取。例如混合比 1 : 48, 适当的液晶操作电压,Vth 是液晶的极限使用电压。警告, 在低温下增加VOP 时,在25情况下,VOP不能超过8.5V极限值。 串行接口时序 指令集 指令D/C命令字描述DB7DB6DB5DB4DB3DB2DB1DB0(H=0 or 1)NOP000000000空操作功能设置000100PDVH写数据1D7D6D5D4D3D2D1D0写数据到显示 RAMH=0保存0000000*不可使用显示控制000001D0E设置显示配置保存00001*不可使用设置RAM的Y地址001000Y2Y1Y0Y的围是0至5设置RAM的*地址01*6*5*4*3*2*1*0*的围是0至83H=1保存000000001不可使用保存00000001*不可使用温度控制0000001TC1TC0设置温度系数(TC *)保存000001*不可使用偏置系统000010BS2BS1BS0设置偏置系统. z-保存001*不可使用设置Vop01Vop6Vop5Vop4Vop3Vop2Vop1Vop0写VOP 到存放器PD芯片是活动的芯片处于掉电模式V水平寻址垂直寻址H使用根本指令集使用扩展指令集D and E00显示空白01普通模式10开所有显示段11反转映象模式TC1 and TC000VLCD 温度系数 001VLCD 温度系数 110VLCD 温度系数 211VLCD 温度系数 33 总结:通过此次课程设计,使我更加扎实的掌握了有关课本知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经历缺乏。因为在试验中,我画PCB时忘记了连接晶振电容的地引脚,导致做出板后用导线连接,降低了电路板的美观。忽略了AT89S52的第31引脚接VCC才是片存储器,也导致了我烧坏了一片DHT11传感器。实践出真知,通过亲自动手制作,使我们掌握的知识不再是纸上谈兵。. z- 辞首先感学院给了我实际动手做电路板的时机,让我对自己专业知识有更深一步的认识。让我感受到我们工科生要不断提高自己的动手能力,日后做电子作品才能更好,更快地完成。在此感教师在我写论文时给的批注和改正。让我对本科论文的编写格式有更深的理解和认识更深刻。. z-参考文献:诺基亚5110液晶中文手册奥松DHT11温湿度传感器说明书1 郭天祥.新概念51单片机C语言教程入门、提高、开发、拓展全攻略.:电子工业,20212 谭浩强.C程序设计教程.:清华大学,2007.7. z-附 录5.1 实验总框架图:DHT11采集温湿度 CPU AT89S52提取,处理实时温湿度值 液晶5110显示当前温湿度值5.2 硬件局部:由AT89S52最小系统,诺基亚5110液晶和DHT11温湿度传感器组成,电路相当简单。硬件原理图. z- 硬件PCB图 硬件所需元器件mentDesignatorFootprintQuantity10UFC1, C6, C7RB13104C2RAD0.15130pC3, C4RAD0.152100nfC5RAD0.151ledD1diode111.0592MD2晶振1JTAGJ8JTAG1Header 3*2AP1HDR2*3_CEN1Header 20P2, P4HDR1*202res10kP3HDR1*91RESR1RES11kR2, R3A*IAL0.3210kR4A*IAL0.31自锁S11SW-PB*S2sw-pb15110U151101AT89S52U2DIP401DHT11U415.3 实验效果: 上电后,5110液晶显示第二,三行分别显示温度,湿度值。接着在第一行显示学. z-号1000220620。停留1秒钟后,切换显示能剑,再停留1秒后,就动态显示基于单片机的温湿度传感器。5.4 软件程序流程图:软件流程图: 开场 5110复位 初始化5110 5110清屏 5110显示温度: 湿度: %RH 进入while1 循环 执行DHT11_ReadTempAndHumi(); 读取温湿度当前值 显示温湿度值显示名字 李能剑显示* Flag=1flag=2 判flag 动态显示 基于单片机的温 湿度传感器. z- 软件程序*include reg52.hsbit res =P27;sbit sce =P26;sbit dc =P25;sbit sdin =P24;sbit sclk =P23;sbit dht11=P20;*define OK 1*define ERROR 0*define NUMBER 20*define SIZE 5unsigned char flag=1;unsigned char status; / 存放五字节数据的数组unsigned char value_arraySIZE; /* 可在其他的文件引用温湿度值, 实际是温度的整数的10倍;*/* 如dht11读回的温度是 26,则temp_value = 260, 湿度同理*/unsigned char k=0;unsigned int code hanzi=0*82,0*82,0*FF,0*AA,0*AA,0*AA,0*AA,0*AA,0*FF,0*82,0*82,0*00,0*0A,0*09,0*0A,0*0A,0*0A,0*0F,0*0A,0*0A,0*0A,0*09,0*0A,0*00,/*基,0*/0*20,0*21,0*21,0*21,0*21,0*FF,0*21,0*21,0*21,0*21,0*20,0*00,0*00,0*00,0*00,0*08,0*08,0*0F,0*00,0*00,0*00,0*00,0*00,0*00,/*于,1*/0*00,0*7C,0*55,0*56,0*54,0*FC,0*54,0*56,0*55,0*7C,0*00,0*00,0*01,0*01,0*01,0*01,0*01,0*0F,0*01,0*01,0*01,0*01,0*01,0*00,/*单,2*/0*00,0*00,0*FE,0*90,0*90,0*90,0*90,0*9F,0*90,0*10,0*10,0*00,0*08,0*06,0*01,0*00,0*00,0*00,0*00,0*00,0*0F,0*00,0*00,0*00,/*片,3*/0*88,0*68,0*FF,0*28,0*40,0*FE,0*02,0*02,0*FE,0*00,0*00,0*00,0*00,0*00,0*0F,0*08,0*04,0*03,0*00,0*00,0*07,0*08,0*0E,0*00,/*机,4*/0*FC,0*46,0*45,0*44,0*FC,0*10,0*08,0*27,0*C4,0*04,0*FC,0*00,0*0F,0*04,0*04,0*04,0*0F,0*00,0*00,0*00,0*08,0*08,0*07,0*00,/*的,5*/. z-0*22,0*44,0*00,0*C0,0*5F,0*D5,0*55,0*D5,0*5F,0*C0,0*00,0*00,0*04,0*02,0*09,0*0F,0*08,0*0F,0*08,0*0F,0*08,0*0F,0*08,0*00,/*温,6*/0*11,0*22,0*80,0*3E,0*2A,0*EA,0*2A,0*EA,0*2A,0*3E,0*80,0*00,0*04,0*02,0*08,0*09,0*08,0*0F,0*08,0*0F,0*08,0*09,0*08,0*00,/*湿,7*/0*00,0*FE,0*0A,0*8A,0*BE,0*AA,0*AB,0*AA,0*BE,0*8A,0*0A,0*00,0*08,0*07,0*00,0*08,0*09,0*0A,0*04,0*04,0*0A,0*09,0*08,0*00,/*度,8*/0*20,0*10,0*FC,0*23,0*24,0*E4,0*BC,0*A7,0*A4,0*A4,0*20,0*00,0*00,0*00,0*0F,0*00,0*00,0*02,0*02,0*04,0*06,0*09,0*00,0*00,/*传,9*/0*00,0*FE,0*02,0*EA,0*AA,0*EA,0*02,0*9F,0*62,0*9B,0*C2,0*00,0*09,0*06,0*00,0*06,0*08,0*0A,0*0D,0*08,0*0C,0*02,0*0D,0*00,/*感,10*/0*20,0*27,0*A5,0*A5,0*67,0*38,0*67,0*A5,0*AD,0*37,0*20,0*00,0*01,0*0F,0*0A,0*0A,0*0E,0*00,0*0E,0*0A,0*0A,0*0F,0*01,0*00,/*器,11*/0*00,0*88,0*48,0*E8,0*98,0*FE,0*88,0*98,0*A8,0*48,0*C8,0*00,0*00,0*08,0*08,0*08,0*C8,0*7C,0*0A,0*09,0*09,0*08,0*08,0*00,/*,0*/0*00,0*B0,0*AC,0*A6,0*A8,0*B0,0*20,0*7E,0*48,0*48,0*64,0*00,0*00,0*FF,0*12,0*12,0*D2,0*7F,0*00,0*7F,0*44,0*46,0*62,0*00,/*能,1*/0*00,0*60,0*10,0*4C,0*46,0*48,0*10,0*00,0*F8,0*00,0*FE,0*00,0*00,0*43,0*4C,0*63,0*24,0*3E,0*21,0*00,0*0F,0*C0,0*7F,0*00,/*剑,2*/0*00,0*30,0*48,0*30,0*E0,0*10,0*10,0*08,0*10,0*30,0*00,0*00,0*00,0*00,0*00,0*00,0*1F,0*30,0*20,0*20,0*20,0*10,0*00,0*00,/*,15*/0*00,0*00,0*F8,0*88,0*78,0*00,0*80,0*60,0*10,0*08,0*00,0*00,0*00,0*00,0*20,0*18,0*04,0*03,0*00,0*1E,0*22,0*3E,0*00,0*00,/*,16*/0*00,0*70,0*34,0*B8,0*B0,0*BE,0*B0,0*B0,0*BC,0*32,0*70,0*00,0*00,0*08,0*08,0*08,0*C8,0*C8,0*7E,0*0B,0*09,0*08,0*08,0*00,/*学,17*/0*00,0*80,0*80,0*BC,0*A4,0*A4,0*A4,0*A4,0*BC,0*80,0*80,0*00,0*00,0*00,0*00,0*06,0*05,0*04,0*C4,0*44,0*74,0*0C,0*00,0*00,/*号,18*/0*00,0*20,0*FC,0*22,0*E0,0*60,0*1C,0*10,0*FE,0*10,0*10,0*00,0*00,0*43,0*. z-34,0*1F,0*30,0*43,0*43,0*43,0*7F,0*43,0*43,0*40,/*姓,19*/0*00,0*00,0*20,0*18,0*6E,0*C8,0*88,0*68,0*38,0*08,0*00,0*00,0*00,0*04,0*04,0*FE,0*22,0*23,0*22,0*22,0*22,0*FE,0*00,0*00,/*名,20*/;unsigned char code zimu=/*- 宋体9; 此字体下对应的点阵为:宽*高=6*12 -*/*- 高度不是8的倍数,现调整为:宽度*高度=6*16 -*/0*00,0*F0,0*18,0*08,0*18,0*F0,0*01,0*1F,0*30,0*20,0*30,0*1F,/*0,0*/0*00,0*20,0*20,0*F8,0*00,0*00,0*00,0*00,0*00,0*3F,0*00,0*00,/*1,1*/0*00,0*70,0*18,0*08,0*98,0*F0,0*00,0*38,0*2C,0*26,0*23,0*20,/*2,2*/0*00,0*30,0*18,0*08,0*98,0*F0,0*0C,0*1C,0*30,0*21,0*31,0*1E,/*3,3*/0*00,0*00,0*C0,0*30,0*F8,0*00,0*04,0*07,0*04,0*04,0*3F,0*04,/*4,4*/0*00,0*F8,0*88,0*C8,0*88,0*88,0*00,0*19,0*30,0*20,0*30,0*1F,/*5,5*/0*00,0*E0,0*98,0*88,0*98,0*30,0*00,0*1F,0*31,0*20,0*30,0*1F,/*6,6*/0*00,0*08,0*08,0*08,0*C8,0*78,0*00,0*00,0*20,0*3E,0*03,0*00,/*7,7*/0*00,0*F0,0*98,0*08,0*98,0*F0,0*00,0*1E,0*31,0*21,0*31,0*1E,/*8,8*/0*00,0*F0,0*18,0*08,0*18,0*F0,0*00,0*19,0*33,0*22,0*31,0*0F,/*9,9*/0*00,0*00,0*80,0*00,0*00,0*00,0*00,0*00,0*31,0*00,0*00,0*00,/*:,10*/0*00,0*00,0*00,0*00,0*00,0*00,0*00,0*00,0*0C,0*00,0*00,0*00,/*.,11*/0*00,0*00,0*00,0*00,0*00,0*00,0*00,0*00,0*00,0*00,0*00,0*00,/* ,12*/0*08,0*F8,0*08,0*08,0*F0,0*00,0*00,0*3F,0*01,0*0F,0*30,0*00,/*R,13*/0*08,0*F8,0*00,0*00,0*F8,0*08,0*00,0*3F,0*01,0*01,0*3F,0*00,/*H,14*/; void delay_ms(unsigned char t) unsigned char i,j;for(i=0;it;i+) for(j=0;j80;j+) ; void delay_us(unsigned char t) unsigned char j;for(j=0;jt;j+) ; . z-/*LCD_write_byte: 使用SPI接口写数据到LCD输入参数:dt:写入的数据;mand :写数据/命令选择;*/void LCD_write_byte(unsigned char dt, unsigned char mand)unsigned char i; sce=0;if(mand=1) dc=1; else dc=0; for(i=0;i8;i+) if(dt&0*80) sdin=1; else sdin=0;dt=dt1;sclk=0; sclk=1; delay_ms(1);dc=1;sce=1;/sdin=1;/LCD_init: 3310LCD初始化void LCD_init(void)res=0; delay_ms(1); res=1; LCD_write_byte(0*21,0);/初始化Lcd,功能设定使用扩大指令LCD_write_byte(0*d0,0);/设定液晶偏置电压LCD_write_byte(0*20,0);/使用根本指令LCD_write_byte(0*0C,0);/设定显示模式,正常显示. z-/LCD_set_*Y: 设置LCD坐标函数/输入参数:*:083 Y:05void LCD_set_*Y(unsigned char *, unsigned char Y)LCD_write_byte(0*40 | Y, 0);/ columnLCD_write_byte(0*80 | *, 0);/ row /LCD_clear: LCD清屏函数void LCD_clear(void)unsigned char t;unsigned char k;LCD_set_*Y(0,0);for(t=0;t6;t+) for(k=0;k84;k+) LCD_write_byte(0*00,1); /*LCD_write_shu: 显示8宽*16高点阵列数字字母符号等半角类输入参数:c:显示的字符;*/void Display_zimu(unsigned char row, unsigned char page,unsigned char c) /row:列 page:页 dd:字符unsigned char i; LCD_set_*Y(row*6, page);/ 列,页 for(i=0; i6;i+) LCD_write_byte(zimuc*12+i,1); LCD_set_*Y(row*6, page+1);/ 列,页 for(i=6; i12;i+) LCD_write_byte(zimuc*12+i,1); . z-void Display_hanzi(unsigned char row, unsigned char page,unsigned char c) /row:列 page:页 dd:字符unsigned char i; LCD_set_*Y(row*6, page);/ 列,页 for(i=0; i12;i+) LCD_write_byte(hanzic*24+i,1); LCD_set_*Y(row*6, page+1);/ 列,页 for(i=12; i 0; *-) for(y = 124; y 0; y-); void DHT11_Delay_10us(void) unsigned char i; i-; i-; i-; i-; i-; i-; /* 读一个字节的数据*/ . z- unsigned char DHT11_ReadValue(void) unsigned char count, value = 0, i; status = OK; /设定标志为正常状态 for(i = 8; i 0; i-) /高位在先 value = 1; count = 0; while(dht11 = 0 & count+ = NUMBER) status = ERROR; /设定错误标志 return 0; /函数执行过程发生错误就退出函数 DHT11_Delay_10us(); /26-28us的高电平表示该位是 0, 为70us 高电平表该位 1 DHT11_Delay_10us(); DHT11_Delay_10us(); if(dht11 != 0) /延时30us 后检测数据线是否还是高电平 value+; /进入这里表示该位是 1 while(dht11 != 0 & count+ = NUMBER) status = ERROR; /设定错误标志 return 0; return (value); / 读温度和湿度函数,读一次的数据, 共五字节,读出成功函数返回OK, 错误返回ERROR unsigned char DHT11_ReadTempAndHumi(void) unsigned char i = 0, check_value = 0,count = 0; dht11 = 0; /拉低数据线大于 18ms发送开场信号 . z- Delay_1ms(20); / 需大于 18 毫秒 dht11 = 1; /释放数据线, 用于检测低电平的应答信号 DHT11_Delay_10us(); /延时20-40us,等待一段时间后检测应答信号, 应答信号是从机拉低数据线80us DHT11_Delay_10us(); DHT11_Delay_10us(); DHT11_Delay_10us(); if(dht11 != 0) / 检测应答信号, 应答信号是低电平 return ERROR; /没应答信号 else /有应答信号 while(dht11 = 0 & count+ = NUMBER) /检测计数器是否超过了设定的围 dht11 = 1; return ERROR; /读数据出错, 退出函数 count = 0; dht11 = 1; /释放数据线 while(dht11 != 0 & count+ = NUMBER) dht11 = 1; return ERROR; /退出函数 for(i = 0; i SIZE; i+) /读出湿. 温度值 value_arrayi = DHT11_ReadValue(); if(i != SIZE - 1) /读出的最后一个值是校验值不需加上去 check_value += value_arrayi; /读出的五字节数据中的前四字节数据和等于第五字节数据表示成功 /end for if(check_value = value_arraySIZE - 1) /在没用发生函数调用失败时进展校验 dht11 = 1; return OK; /正确的读出 dht11输出的数据 . z- void Display_5110(unsigned char value,unsigned char h,unsigned char l) unsigned char s,g; s=value/10; g=value%10; Display_zimu(h,l,s) ; Display_zimu(h+1,l,g) ;void main() unsigned char i; res=0;delay_us(100);res=1; LCD_init(); /初始化LCD模块 LCD_clear(); /清屏幕 Display_hanzi(0,2,6) ;/显示 温度: . Display_hanzi(2,2,8) ;Display_zimu(4,2,10) ;Displ
展开阅读全文