AT89S52单片机的温度湿度计论文33785

上传人:沈*** 文档编号:78146464 上传时间:2022-04-21 格式:DOC 页数:28 大小:633.53KB
收藏 版权申诉 举报 下载
AT89S52单片机的温度湿度计论文33785_第1页
第1页 / 共28页
AT89S52单片机的温度湿度计论文33785_第2页
第2页 / 共28页
AT89S52单片机的温度湿度计论文33785_第3页
第3页 / 共28页
资源描述:

《AT89S52单片机的温度湿度计论文33785》由会员分享,可在线阅读,更多相关《AT89S52单片机的温度湿度计论文33785(28页珍藏版)》请在装配图网上搜索。

1、本 科 生 毕 业 设 计 论 文 基于AT89S52单片机的温度湿度计的设计目 录1 绪论21.1 问题的提出与意义21.2 国内外的发展现状21.3 研究的目的与方向22 设计分析32.1 设计方案32.2 系统组成32.3 工作原理43 总体设计43.1 主要器件简介43.2 主要电路模块63.3 软件设计编程84 调试13结束语14致谢14参考文献14附录16基于AT89S52单片机的温度湿度计的设计摘要:采用MSC-51系列单片机中的AT89S51和温湿度传感器DHT11的低成本设计温湿度的检测系统。由DHT11温湿度传感器及LCD1602字符型液晶模块构成系统显示模块,该系统电路简

2、单、工作稳定、集成度高、调试方便、测量精准度高,具有一定的实用价值与意义。其中测温湿度监测电路由温湿度传感器和预设温度值比较报警电路组成,用户根据需要预先输入预设值,当实际测量的温湿度大于预设的温湿度数值时,发出报警信号(蜂鸣器蜂鸣)。关键词:单片机; 温湿度传感器; 温湿度检测系统; AT89S52; DHT11Based on the Design of Temperature Humidity Indicator of AT89S52 SinglechipWang Wei(Department of Electronic Information Engineering Superviso

3、r: Shen Wenlong)Abstract:This design is the use of MSC-51 Series MCU AT89S51 and DHT11 in the low-cost temperature and humidity detection system.The DHT11 temperature and humidity sensor and 1602 constitute a system of character LCD module display module, the system circuit is simple, stable, high l

4、evel of integration, commissioning convenient, accurate, has some practical value and significance. Temperature and humidity Monitor circuit in which the temperature and humidity sensors and compare the value of the preset temperature alarm circuit, the user input required pre-default value, when th

5、e actual temperature and humidity measurements of temperature and humidity is greater than the preset value, an alarm signal (bee Buzzer beep).Keywords: microcontroller; temperature and humidity sensor; detection system; AT89S52; DHT111 绪论1.1 问题的提出与意义1.1.1 问题的提出为了更加有效的保证人们生活环境的安逸和舒适,同时也为了人们生活的更加健康,人

6、们已不满于目前的居住环境,对家庭提出了更高的要求,智能化被引进了家庭,并且迅速在全国乃至世界范围内普遍发展开来,由于自然环境污染越来越严重,城市人口越来越多等,适宜人们生活的温度以及湿度越来越难以达到标准,常见的南北气候差异,北方冬天异常干燥,南方却阴冷潮湿,而对于我们来说,如何有效地在合适的时间内对环境作出相应的举措却始终难以把握,因此我们需要选取有效的方法,以满足人们的要求。1.1.2 研究的意义环境是人们安居乐业的基础。特别是现在生活水平的提高、生活节奏的加快,而空气中温湿度的变化与人体的情绪、舒适度以及生理代谢都有很大的影响1,所以对温度、湿度的检测就非常有意义了,对于当下每个家庭中来

7、说也变得不容忽视了。因此为了满足最适宜人们生活的最佳温度和湿度,我们需要研究一种便于监测和提醒温湿度的装置,人们可以根据不同季节以及个人的需要进行自我调整,以便达到最佳的居住环境,这不仅仅是对于环境要求的进步,同时也体现了现代文明的发达与先进。1.2 国内外的发展现状最近几年,国内外温湿度传感器测量系统正向着集成化、智能化发展,随着科研人员的不断努力,该类型系统取得的巨大的成就。现代温湿度传感器测量系统技术主要以数据采集为依据。伴随电子科学技术的进一步发展,数据采集系统也发生了日新月异的变化,其整体的性能、实用性方面都有所改进。因此,依托于数据采集结构而发展的温湿度传感器测量系统在实际应用中也

8、发挥这越来越重要的作用2。目前,许多外国大型企业都很重视传感器的研发工作,例如,日本的Figaro公司、芬兰的Vaisala公司等,都致力于传感器的发展和完善,以保障其在整个销售市场的竞争力。在九十年代,先后出现了集成温度湿度测量套件和应用于湿度传感器的测试系统,这个新技术的产生都大大刺激了传感器的进一步发展。与此同时,国内许多机构也在传感器测试装置的研发上不断探索、研发。例如通过采用传统电子仪器进行设计研发而成的多种动态测试系统、动进样装置的气体传感器智能测试系统等等。当然,随着科技的进步,传统的温湿度测试技术在稳定性、精度等方面已经无法满足市场的需求,因此,针对新一代传感器的探究显得尤为重

9、要。1.3 研究的目的与方向1.3.1 研究的目的为满足现代家庭对于居住环境温湿度的不同需求,我们可以随时进行调节,对于不利情况能够及时的作出显示,并能够采取相应的措施提醒用户进行调整,以达到最适宜的温湿度。1.3.2 研究的主要内容首先我们必须了解温湿度控制对于家庭对于现代人们的重要性,其次我们才能够对此作出更好的判断,以求更好的解决用户所需要的问题。数字化温湿度检测的方法为一旦环境中的温湿度发生变化时,湿度传温度感器和湿度传感器随着温湿度的变化而变化,然后将变化的电阻通过转换电路和转换信号检测为与之对应变化的电压,然后把模拟电压信号由A/D转换器转换为数字信号并送入到单片机中3,通过单片机

10、芯片控制显示该温湿度值。该系统通过键盘设定最适宜的温度和湿度,传感器向中央控制系统输送监测信息,超过预设值的话,蜂鸣器就会报警提醒,用户即可作出调整。2 设计分析2.1 设计方案2.1.1 系统功能温湿度监测:对环境温湿度进行准确测量。实时显示:同时显示当前温湿度值。阀值预设:用户可以自行设置温湿度报警范围。阀值报警:当环境温度或湿度超出预设范围时,发出报警信号,以示提醒。2.1.2 实现措施 温度和湿度可以通过温湿度传感器进行采集信号。 采用单片机作为中央控制装置,可对采集的信号进行数据处理以及实现按键、报警功能控制。 使用LCD显示屏可以直观显示温度湿度。 利用三极管驱动的蜂鸣器响和指示灯

11、闪烁可做到报警提示。2.2 系统组成元器件是系统组成的基础,可行性是系统设计的依据。经过上面的总体方案和实施措施的讨论后可以开始设计系统的组成。由于设计要实现的功能是:实时显示当前环境的温湿度,并且允许用户设定温湿度阈值,当环境温湿度超过阈值时,系统会以蜂鸣器鸣响指示灯亮的方式进行报警提示。所以依据功能设定与实现措施,系统主要设计可分为以下图1所示三个模块:数据处理模块温湿度采集模块用户交互模块图1 系统模块图其中温湿度采集模块使用的是DHT11数字温湿度传感器,它使用单总线方式,接口简单,而且无需另外校准。分辨率为8bit,测量范围为湿度20-90%RH,温度050;测量精度为湿度5%RH,

12、温度1完全能够满足日常环境温湿度的检测要求4。数据处理模块使用的是AT89S52单片机,其完成温湿度数据的处理与控制的功能。用户交互模块主要由按键、LCD1602点阵液晶、蜂鸣器以及指示灯构成。其中按键用于用户设定温湿度阈值,LCD1602用于数据显示,蜂鸣器和指示灯用于提示用户。2.3 工作原理按照系统的设计功能所要求的,温湿度监测系统原理图如下图2所示:LCD温湿度显示温湿度传感器蜂鸣器、指示灯单片机按键图2 温湿度监控系统原理图单片机作为主控制器,主要负责处理由温湿度传感器送来数据,并把处理好的数据送向显示器模块,数据温湿度传感器主要用来采集周围的环境参数,并把所采集到得数据送向单片机5

13、,按键电路主要是用来完成单片机的复位操作和温湿度初始值的设定。蜂鸣器电路就是用三极管来实现的,用来判断周围的温度或者湿度是否超出设定数值,显示电路主要用来显示当前的温湿度。3 总体设计3.1 主要器件简介3.1.1 温湿度传感器DHT11测量采用一款数字温湿度传感器芯片DHT11,温湿度传感器DHT11集温度传感器和湿度传感器于一体,内置A/D转换器,数字信号输出,具有高度集成,精准度高,传输可靠性高,抗干扰等特点6。DHT11有4个引脚,其引脚说明,如表1所示,典型应用电路如图3所示:表1 DHT11引脚说明表pin 名称注释1VDD供电35.5V2DATA串行数据,单总线3NC空脚,悬空4

14、GND接地,电源负极图3 典型的应用电路3.1.2 单片机AT89S52根据实现系统功能需要的单片机硬件资源,在性能指标满足的情况下,选择SAT89S52单片机为该系统的总控芯片,因为AT89S52单片机可把由温度、湿度检测电路检测出的信号数据传输到LCD显示模块,实现温度、湿度的显示;通过键盘设定温湿度报警值,超过温度、湿度上下限由蜂鸣器实现温度、湿度的报警。作为系统控制部分时钟电路由一个频率为11.0592MHz的晶振和两个30pF的电容组成,复位电路由一个10uF的电容和一个10k的电阻组成7。其单片机的内部结构框架示意图,如图4所示。图4 51单片机的内部结构框图3.1.3 LCD16

15、02液晶显示显示部分采用一种专门用于显示数字、字母、符号等点阵式的字符型液晶LCD1602,所谓1602是指显示的内容为16*2,即可以显示两行,每行16个字符,符合同时显示温度值、湿度值这一要求。1602LCD的特性如下表2所示:表2 1602LCD的特性表+5V电压,对比度可调内含复位电路提供各种控制命令有80字节显示数据存储器DDRAM内建有160个5X7点阵的字型的字符发生器CGROM8个可由用户自定义的5X7的字符发生器CGRAM其LCD1602液晶显示接口模块如下图5所示: 图5 LCD接口模块1602采用标准的16脚接口,其引脚功能说明如下表3:表3 1602引脚功能说明表编号符

16、号引脚说明1VDD正极2VSS接地3VL液晶显示偏压4RS数据/命令选择5R/W读/写选择6E使能信号7D0数据8D1数据9D2数据10D3数据11D4数据12D5数据13D6数据14D7数据15BLA背光源正极16BLK背光源负极3.2 主要电路模块3.2.1 主控制电路和测温时控制电路本次硬件的核心就是AT89S52,其他的外围电路都是围绕它所设计的。数字温湿度传感器的DHT11的DATA口连接单片机AT89S52的P3.0口。显示电路就是把LCD1602和单片机的P0口分别相连8,当温度或湿度高于预设值的时候蜂鸣器蜂鸣报警,增加单片机的输出能力,增加单片机的输出电流,故使用电阻排来完成。

17、本系统采用的是上电复位,充电之后,RST被拉至高电平,单片机进入工作状态9。总的系统控制原理图如图6所示:图6 电路原理图3.2.2 其他主要模块电路 蜂鸣器电路微型计算机控制系统中,为了安全起见,对于一些重要的参数或系统,都设定有紧急状态报警系统,于以提醒,本设计采用峰鸣音报警电路。如图7所示。蜂鸣器额定电流30Ma,而对于AT89S52单片机,P3口的灌电流为15mA,由此可见,仅靠单片机的P3口电流是不能驱动蜂鸣器的,必须使用晶体管放大电路,为了使单片机的功率更小,所以使用PNP型晶体管,当外部环境的温度或者湿度超过预设值的时候,基级变为低电平,蜂鸣器导通鸣叫。 显示电路显示模块选用LC

18、D1602字符型液晶模块,它是目前工控系统中使用最广泛的液晶屏之一,由于它显示人性化,可视性高,电路图如图8所示,LCD1602字符型液晶模块是点阵型液晶,驱动方便,经过编程后显示内容多样化。 图7 蜂鸣器电路 图8 显示电路 传感器电路DHT11是数字型温湿度传感器,可直接以数字方式传输所采集的当前环境温湿度,DHT11采用的是单总线通信,因此只需将单片机的一个IO端口与DHT11的通信接口连接就可以实现数据的采集和传送,相对于其他电路来说比较简单。如图9所示: 复位电路本次设计采用的是上电复位,而AT89S52单片机采用的都是高电平复位,当RST引脚上出现了两个周期以上的高电平就会触发内部

19、复位,这里的EA端与复位电路无关,由于数据都放在了内部存储器,所以连接EA只是直接拉高引脚,如图10所示: 图9 传感器电路 图10 复位电路3.3 软件设计编程系统软件程序基于Keil uvsion2开发平台,采用C语言编写。原理图画图工具用Protel SE99。C语言的运算符丰富,它包括的范围相当广泛,并且表达方式的类型多样化,能够实现在高级语言中不能实现的运算,它能够对于位,字节和地址进行操作;并且数据类型很丰富,能实现各种复杂的数据类型,同时还加入了指针的概念,使得效率更高。Protel99 SE具有很强的编辑功能以及分析功能,用户可以分析电路的各个方面,能够提供交流小信号、瞬态分析

20、、传输函数分析等;同时具有庞大的仿真模型库,拥有20多个模拟和数字期间仿真元件库,同时还有大量的数字器件和其他的集成电路器件10。此次设计主要是能够实时显示出当前确切的温湿度,并且在高于预设值的时候能够发出蜂鸣。一旦接通电源,LCD初始化,采用八位的数据端口,两行显示,其中第一行显示的湿度预设值,第二行显示的是实时的温湿度值,在程序设计中,分别定义温湿度参数,根据数据转换过来的数值,判断是否超过了预设值,等待传送的数值超过预设值的话,蜂鸣器便会蜂鸣警报,LCD1602显示当前的温湿度值,再次循环判断,如果没有超过预设值,蜂鸣器不会蜂鸣,LCD1602正常显示,也同样再次循环。其系统总的流程图如

21、下图11所示:图11 主程序流程图该系统控制核心是对单片机8052,其工作过程是:系统通电后,单片机8052进入监控状态,同时完成对各扩展端口的初始化工作。在没有外部控制信息输入的情况下,系统自动采集温湿度传感器数据,最后产生的数据在LCD显示器上显示和蜂鸣器报警。 设计中采用模块化程序方法,主要分为以下几个模块: LCD初始化显示模块,流程如下图12所示:LCD初始化延时调用LCD显示模块调用DHT11模块图12 LCD初始化显示流程图主要程序如下:LCD_Initial(); /液晶初始化while(1) RH();temp_t=U8T_data_H;temp_h=U8RH_data_H;

22、 zhuanhuan(); key();/ 按键检测 kongzhi(); GotoXY(0,0);/显示起始位置 Y=0,第一行,Y=1 第二行/显示第一行 Print(temp);/ 内容 GotoXY(0,1);/显示起始位置 Y=0,第一行,Y=1 第二行显示第二行 Print(temp_s);/ 内容 delay(1); /getdate= GetADCResult(0)*3.9; DHT11数据采集模块,流程如下图13所示:图13 DHT11数据采集流程图主要程序如下:前面需要定义void COM(void); void Delay2(U16 j) /延时函数 U8 i; for(

23、;j0;j-) for(i=0;i27;i+); void Delay_10us(void) /延时10us的延时函数. U8 i; i-; i-; i-; i-; i-; i-; void COM(void) U8 i; for(i=0;i8;i+) U8FLAG=2; while(!DQ)&U8FLAG+);Delay_10us(); Delay_10us();Delay_10us(); U8temp=0; if(DQ)U8temp=1; U8FLAG=2; while(DQ)&U8FLAG+); /超时则跳出for循环 if(U8FLAG=1)break; /判断数据位是0还是1 / 如

24、果高电平高过预定0高电平值则数据位为 1 U8comdata0) shangxian-; else( shangxian=255); if(sw2=0) /上限 加功能 delay(50); if(sw2=0) /while(sw2=0) ; if(shangxian=shangxian)|(temp_t32) /此处 设定预设温度 /led=1; num1+; if(num1=20) num1=0; baojing=baojing; else baojing=1; 4 调试此部分的任务是在系统连接好后,调试各个组件能否正常工作,能否实现软件设计的预期目标。根据说明书,了解各个组件的工作原理,

25、把各个功能模块编写成单独的源文件进行调试,调试成功以后,再将各部分联合在一起。再按照系统设计,将系统需要的各个组件连接好,进行综合调试。其步骤如下: 按照系统设计,将系统需要的各个组件连接好。 根据说明书,了解各个组件的工作原理,开始着手调试芯片。 调用AT89S52程序,运行,观察现象。现象正确,说明AT89S52芯片正常,可以使用。 调用DHT11程序,运行,观察现象。现象正确,说明DHT11芯片正常,可以使用。 调用LCD1062程序,运行,观察现象。现象正确,说明LCD1062芯片正常,可以使用。 调用KEY程序,运行,观察现象。功能正确,说明按键正常,可以使用。在把各个功能模块编写成

26、单独的源文件进行调试,调试成功以后,再将各部分联合在一起。除了以上所提到的模块之外,还有一些模块也很重要,也都需要认真的调试,如报警模块等。调试了各模块之后,接下来的工作就是将各源程序段连接起来,进行综合调试了,综合调试需要我们特别注意细节部分,这样才能尽可能的减少错误的产生。最后,在硬件全部组件全部完成后,装上电池,我们采用的是3节5号普通电池,4.5V的电压,指示灯亮,仪器工作,一段时间显示屏显示出数值,温度28,湿度36%。如下图15所示,而根据所有的精确仪器测得目前室内温度温度为27.6,湿度36.2%。可计算其误差分别为1.45%、0.55%,能达到设计要求,测试通过。图15 仪器显

27、示画面结束语:大学的学习中,毕业设计是一个很重要的环节,是我们步入社会参与社会实践的很好锻炼,从最初的选题,开题构思,绘图,编程,仿真直到完成设计,这中间,查找资料,老师指导,同学交流,编写程序,直至仿真调试,以及硬件焊接,每一个过程都是一次成长和对自己的一次的检验。本次设计是基于单片机的温湿度设计,包括硬件电路和软件两部分。设计初对于单片机的应用并不是很了解,本科学习中初步接触过C语言,由于本次设计需要硬件和软件两部分,因此我是从软件部分先开始的,然后才开始硬件电路的设计,是由于软件的不完美影响了硬件电路设计的不是很美观。在软件设计过程中,我基本是一步步开始学起的,在学习中遇到很多问题,经过

28、张老师的指点和同学的讨论,我学到了很多编程技巧,同时也掌握了一些编程思想。由于原器件的局限性,硬件电路不是很美观,其中一些电容和电阻并不是原理图中设计的大小,但是这并不影响结果,再画原理图的过程中我又进一步掌握了Protel的基本应用,并有了较为深入的了解。由于电路设计比较简单,所以并没有涉及PCB板,直接手动焊接完成电路。通过本次设计,对于主要芯片8051有了基本的了解,基本掌握了该芯片的基本功能。经过软件在硬件电路的挑时候,基本功能均能实现,如果把手放在传感器上面,温度和湿度会立即发生变化。致谢:四年的大学生活接近尾声,我的毕业设计也顺利的完成了,这里首先向我的指导老师表示最诚挚的感谢,同

29、时也感谢那些帮助过我的同学们。在毕业设计的过程中,指导老师不厌其烦的为我们讲解了毕业设计中可能出现的问题,同时他每周与我们见面讨论一次,要求我们详解上周所做的东西以及自己下周要做的东西,并督促我们抓紧时间完成毕业设计,及时加以指导。老师认真负责的态度让我倍受感激。同时在此也感谢某同学,在我设计过程中帮助解决了许多我遇到的问题,特别是单片机和编程,他给了我很大的帮助。在此向所有毕业设计的过程中给予我帮助的老师和同学最诚挚的谢意。参考文献:1 张冬林,李鑫,戴梅.基于DHT11的低成本蚕室温湿度自动控制系统设计J.现代农业科技,2010,(18):14-15.2 徐春河.浅谈AT89S51J.制造

30、业自动化,2010,(12):80-82.3 吴汉清.常用的典型单片机资料J.无线电,2007,(11):72-80.4 叶健斌.基于单片机嵌入式系统的GPS应用J.电子质量,2008,(7):16-24.5 刘宝元,张玉虹,姜旭,段存丽.基于单片机的温湿度监控系统设计J.国外电子测量技术,2009,(12):77-80,83.6 王静.通用库房温湿度测控系统D.中国海洋大学,2009.7 陈汝全.实用微机与单片机控制技术M.电子科技大学出版社.1995,7,12.8 李建民.单片机在温度控制系统中的应用J.江汉大学学报,1996.6:210-215.9 薛玲,孙曼,张志会,夏莉丽,魏希文.基

31、于单片机AT89S51的温湿度控制仪J.2010:66-69.10 王剑,朱涛,李冬.Protel 99se电路仿真在电子实验教学中的应用J.2010(5):62-64.11 汤武辉.Proteus仿真软件与单片机实验教学J.长江大学学报(自然版),2010,07(3):408-409.附录:系统原理电路图:源程序:#include #include #define uint unsigned int #define uchar unsigned char#include1602.h#includeuchar temp =RH_SET:00% 0; /设置 的湿度值显示uchar temp_s

32、 =RH:00% TEMP:00 0;/实时湿度显示sbit sw3=P15; /按键定义sbit sw1=P13;sbit sw2=P14;sbit baojing=P33;/sbit led=P35;uchar set;/变量定义uchar num1;uchar getdata=55;uint shangxian=34;uchar temp_h,temp_t;void conv();yunxing();void key();void kongzhi();void zhuanhuan()/扫描数据转换 temp7=shangxian/10%10+0x30; temp8=shangxian%1

33、0+0x30; temp_s3=temp_h/10%10+0x30; temp_s4=temp_h%10+0x30; temp_s3=temp_h/10%10+0x30; temp_s4=temp_h%10+0x30; temp_s12=temp_t/10%10+0x30; temp_s13=temp_t%10+0x30; temp_s14=0xdf; temp_s15=C; /-main() baojing=0;delay(500); baojing=1;/ led=0;LCD_Initial(); /液晶初始化while(1) RH();temp_t=U8T_data_H;temp_h=U

34、8RH_data_H; zhuanhuan(); key();/ 按键检测 kongzhi(); GotoXY(0,0);/显示起始位置 Y=0,第一行,Y=1 第二行/显示第一行 Print(temp);/ 内容 GotoXY(0,1);/显示起始位置 Y=0,第一行,Y=1 第二行显示第二行 Print(temp_s);/ 内容 delay(1); /getdate= GetADCResult(0)*3.9; void key() /按键检测程序if(set=1)/上限设置 if(sw1=0) /上限 减功能 delay(50); if(sw1=0) /while(sw1=0); if(s

35、hangxian0) shangxian-; else( shangxian=255); if(sw2=0) /上限 加功能 delay(50); if(sw2=0) /while(sw2=0) ; if(shangxian=shangxian)|(temp_t32) /此处 设定预设温度 /led=1; num1+; if(num1=20) num1=0; baojing=baojing; else baojing=1; DHT11传感器接受和发送信息,然后将接收来的信息作出相应的判断和处理,然后反馈到显示器。#include #include / aemtypedef unsigned c

36、har U8; /* defined for unsigned 8-bits integer variable 无符号8位整型变量 */typedef signed char S8; /* defined for signed 8-bits integer variable 有符号8位整型变量 */typedef unsigned int U16; /* defined for unsigned 16-bits integer variable 无符号16位整型变量 */typedef signed int S16; /* defined for signed 16-bits integer

37、variable 有符号16位整型变量 */typedef unsigned long U32; /* defined for unsigned 32-bits integer variable 无符号32位整型变量 */typedef signed long S32; /* defined for signed 32-bits integer variable 有符号32位整型变量 */typedef float F32; /* single precision floating point variable (32bits) 单精度浮点数(32位长度) */typedef double F

38、64; /* double precision floating point variable (64bits) 双精度浮点数(64位长度) */#define uchar unsigned char#define uint unsigned int#define Data_0_time 4 /相当于用Data_0_time代替4./-/-IO口定义区-/-/sbit DQ = P30 ; /-/-定义区-/-/U8 U8FLAG,k;U8 U8count,U8temp;U8 U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;U

39、8 U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;U8 U8comdata;U8 outdata5; /定义发送的字节数 U8 indata5;U8 count, count_r=0;U16 U16temp1,U16temp2;/以上为变量的定义.void COM(void); void Delay2(U16 j) /延时函数 U8 i; for(;j0;j-) for(i=0;i27;i+); void Delay_10us(void) /延时10us的延时函数. U8 i

40、; i-; i-; i-;i-; i-; i-; void COM(void) U8 i; for(i=0;i8;i+) U8FLAG=2; while(!DQ)&U8FLAG+);Delay_10us(); Delay_10us();Delay_10us(); U8temp=0; if(DQ)U8temp=1; U8FLAG=2; while(DQ)&U8FLAG+); /超时则跳出for循环 if(U8FLAG=1)break; /判断数据位是0还是1 / 如果高电平高过预定0高电平值则数据位为 1 U8comdata=1; /左移1位 U8comdata|=U8temp; /U8comd

41、ata与U8temp相或,结果保存在U8comdata中. /-/-湿度读取子程序 -/-/-以下变量均为全局变量-/-温度高8位= U8T_data_H-/-温度低8位= U8T_data_L-/-湿度高8位= U8RH_data_H-/-湿度低8位= U8RH_data_L-/-校验 8位 = U8checkdata-/-调用相关子程序如下-/- Delay();, Delay_10us();,COM(); /- void RH(void) /主机拉低18ms DQ=0; Delay2(180); DQ=1; /总线由上拉电阻拉高 主机延时20us Delay_10us(); Delay_

42、10us(); Delay_10us(); Delay_10us(); /主机设为输入 判断从机响应信号 DQ=1; /判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行 if(!DQ) /T ! U8FLAG=2; /判断从机是否发出 80us 的低电平响应信号是否结束 while(!DQ)&U8FLAG+); U8FLAG=2; /判断从机是否发出 80us 的高电平,如发出则进入数据接收状态 while(DQ)&U8FLAG+); /数据接收状态 COM(); /调用COM函数 U8RH_data_H_temp=U8comdata; COM(); U8RH_data_L_tem

43、p=U8comdata; COM(); U8T_data_H_temp=U8comdata; COM(); U8T_data_L_temp=U8comdata; COM(); U8checkdata_temp=U8comdata; DQ=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

44、_H=U8T_data_H_temp; U8T_data_L=U8T_data_L_temp; U8checkdata=U8checkdata_temp; /对数据作出相应的处理与运算. LCD1602#include#include #define uint unsigned int define uchar unsigned char void delay(uint z) /延时函数 uint a,b; for(a=z;a0;a-) for(b=120;b0;b-);sbit LcdRs= P10;sbit LcdRw= P11;sbit LcdEn = P12;sfr DBPort =

45、0x80; /端口定义,LcdRs就代表P10口,以下同./P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.数据端口unsigned char LCD_Wait(void) /内部等待函数,LCD的显示需要一定的延迟时间.LcdRs=0;LcdRw=1;_nop_();LcdEn=1;_nop_(); LcdEn=0;return DBPort;/向LCD写入命令或数据#define LCD_COMMAND 0 / Command#define LCD_DATA 1 / Data#define LCD_CLEAR_SCREEN0x01 / 清屏#define LCD_HOMIN

46、G 0x02 / 光标返回原点/以上4行为宏定义,以后出现LCD_HOMING的地方就可以用0x02来代替.void LCD_Write(bit style, unsigned char input) /LCD写入子函数,形参为数据类型和无符号字符型输入.LcdEn=0;LcdRs=style; /数据类型传递给LcdRSLcdRw=0;_nop_();DBPort=input;_nop_();/写入的数据传递给DBPortLcdEn=1;_nop_();/注意顺序LcdEn=0;_nop_();LCD_Wait(); /调用内部等待函数./设置显示模式*#define LCD_SHOW0x0

47、4 /显示开#define LCD_HIDE0x00 /显示关 #define LCD_CURSOR0x02 /显示光标#define LCD_NO_CURSOR0x00 /无光标 #define LCD_FLASH0x01 /光标闪动#define LCD_NO_FLASH0x00 /光标不闪动void LCD_SetDisplay(unsigned char DisplayMode) /LCD显示设置子函数LCD_Write(LCD_COMMAND, 0x08|DisplayMode);/设置输入模式*#define LCD_AC_UP0x02#define LCD_AC_DOWN0x00

48、 / default#define LCD_MOVE0x01 / 画面可平移#define LCD_NO_MOVE0x00 /defaultvoid LCD_SetInput(unsigned char InputMode)LCD_Write(LCD_COMMAND, 0x04|InputMode);/初始化LCD*void LCD_Initial() /初始化函数.LcdEn=0;LCD_Write(LCD_COMMAND,0x38); /8位数据端口,2行显示,5*7点阵delay(5);LCD_Write(LCD_COMMAND,0x38);delay(5);LCD_SetDisplay

49、(LCD_SHOW|LCD_NO_CURSOR); /开启显示, 无光标delay(5);LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); /清屏delay(5);LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE); /AC递增, 画面不动delay(5);/液晶字符输入的位置*void GotoXY(unsigned char x, unsigned char y)if(y=0)LCD_Write(LCD_COMMAND,0x80|x);if(y=1)LCD_Write(LCD_COMMAND,0x80|(x-0x40);/将字符输出到液晶显示void Print(unsigned char *str)while(*str!=0)LCD_Write(LCD_DATA,*str);str+;delay(1);26

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!