ImageVerifierCode 换一换
格式:DOC , 页数:45 ,大小:297KB ,
资源ID:4518338      下载积分:5 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/4518338.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(基于-单片机超温报警设计.doc)为本站上传会员【二***】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

基于-单片机超温报警设计.doc

1、 - 学校代码: 序 号: 本 科 毕 业 论文 题目:基于单片机的超温报警设计 学

2、 院: 姓 名: 学 号: 专 业:电子信息工程 年 级: 指导教师: 二O 年 月 - word.zl -

3、 - 基于单片机的超温报警设计 摘要 本设计设计了一款以AT89S52、DS18B20芯片为核心的温度数字显示报警系统。系统采用AT89S52单片机进展智能控制,利用DS18B20芯片实现对温度的测量,通过单片机处理进展报警点的设置,用液晶显示器LCD1602显示以串口传送数据,显示实时温度,通过三个按键的按键次数来决定温度阈值,按键1按一次设置上限温度,按键1按两次设置下限温度,按键1按三次温度设置完成,按键2按下是当前温度值加1,按键3按下是当时温度减1。当DS18B20测量的温度值不在设定温度阈值围,单片机将驱动蜂鸣器

4、报警。 关键词:AT89S52,超温报警,DS18B20,LCD显示器 Microcontroller-based over-temperature alarm design Abstract The design designs to AT89S52 and DS18B20 chip as the core temperature digital display and alarm system.The system uses the AT8952 microcontroller for intelligent

5、control,using DS18B20 chip implement temperature measurement,setting the alarm pointbymicrocontroller,using with theLCD1602 displaysdata with serial transmission,andLCD1602 displaysthe real-time temperature,number of times by three keys to determine temperature threshold,setting the maximum temperat

6、ure by keying Button 1 once,setting the minimum temperature Key Button 1 twice, pleting the setment of temperature by key Button 1 three times.when the button 2 key once,the temperature value plus 1;when the button 3 key once,the current temperature value minus 1.when the measured temperature by DS1

7、8B20 is not within the value of the temperature threshold,the microcontroller will drive the buzzer alarm. Key words:AT89S52,Over-temperature alarm,DS18B20,LCD Monitor 目录 1概述1 2 系统原理设计2 2.1 超温报警控制原理2 2.2 系统功能方框图2 3 系统硬件原理及其设计3 3.1 单片机与各模块连接工作原理3 3.2 复位电路8 3.

8、3 晶振电路8 3.4 DS18B20数据采集电路9 3.5 温度显示模块10 3.6 报警模块11 3.7 温度设置模块11 4 系统软件设计12 4.1 程序流程图12 4.2 程序12 5 结论26 参考文献27 致28 附录:超温报警系统总图29 - word.zl -

9、 - 1 概述 温度是一种最根本的环境参数,人们的生活环境与温度息息相关,温度测量也被人们所异常关注因此,研究温度的测量方法和装置具有重要意义,温度测控技术也在各个领域应用越来越广泛采用单片机对温度进展控制,不仅具有控制方便和组态简单的优点,而且可以提高被控温度的技术指标。本设计介绍了一款由单片机AT89S52和新型的智能集成温度传感器DS18B20以及LCD1602显示

10、器等部件实现的温度测量及报警系统同时在设计方面做了功能的扩展,开关按键是用来调节温度,功能较强,可以设置上下限报警温度,且测量准确误差小,单片机可把由DS18B20读来的数据利用软件来进展处理,从而把数据传输到显示模块,实现实时温度显示,还有语音报警功能对温度实施监测,即当温度超过设置的最高温度或者低于给定的最低温度时,系统将驱动蜂鸣器发声报警。 2系统原理设计 2.1 超温报警控制原理 系统是对温度的监控。首先,用户预先通过温度设定模块按键输入温度报警值到程序中,该值作为系统阈值。温度传感器DS18B20将监测值传输给

11、AT89S52单片机,单片机将DS18B20测量的温度值与预先设定的温度值T进展比拟,当单片机比拟监测到的数值超出所设定阈值时,驱动蜂鸣器报警。 2.2 系统功能方框图 超温报警器原理框图如图2-1所示。整个系统由AT89S52单片机、温度设置模块、温度显示模块、DS18B20数据采集模块、报警器模块组成。单片机主要负责承受来自DS18B20数据,对数据进展比照处理,通过单片机处理控制温度显示模块和报警器模块。温度显示模块和报警器模块是执行来自单片机指令并反应结果给用户。 单 片 机 温度设置模块 DS18B20 温度显示 报警器 图2-1原理框图

12、 3系统硬件原理及其设计 3.1 单片机与各模块连接工作原理 3.1.1 AT89S52单片机 1. 主要性能 与MCS-51单片机产品兼容、8K字节在系统可编程Flash存储器、1000次擦写周期、全静态操作:0Hz~33Hz、三级加密程序存储器、32个可编程I/O口线、三个16位定时器/计数器八个中断源、全双工UART串行通道、低功耗空闲和掉电模式、掉电后中断可唤醒、看门狗定时器、双数据指针、掉电标识符。 图3-1 AT89S52双列直插封装方式引脚图 2. 功能特性描述 AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器

13、使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。AT89S52具有以下标准功能:8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断构造,全双工串行口,片晶振及时钟电路。另外,AT89S52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停顿工作,允许RAM、定时器/

14、计数器、串口、中断继续工作。掉电保护方式下,RAM容被保存,振荡器被冻结,单片机一切工作停顿,直到下一个中断或硬件复位为止。8位微控制器8K字节在系统可编程Flash。   〔1〕P0口:P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻辑电平。对P0端口写“1〞时,引脚用作高阻抗输入。当外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。在这种模式下,P0具有部上拉电阻。在flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。程序校验时,需要外部上拉电阻。   〔2〕P1口:P1口是一个具有部上拉电阻的8位双向I/O口,P1输出缓冲器能

15、驱动4个TTL 逻辑电平。对P1端口写“1〞时,部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于部电阻的原因,将输出电流〔IIL〕。此外,P1.0和P1.2分别作定时器/计数器2的外部计数输入〔P1.0/T2〕和时器/计数器2的触发输入〔P1.1/T2EX〕,具体如下所示。在flash编程和校验时,P1口接收低8位地址字节。   引脚号第二功能   P1.0 T2〔定时器/计数器T2的外部计数输入〕,时钟输出   P1.1 T2EX〔定时器/计数器T2的捕捉/重载触发信号和方向控制〕   P1.5 MOSI〔在系统编程用〕   P1.6 M

16、ISO〔在系统编程用〕 P1.7 SCK〔在系统编程用〕 〔3〕P2口:P2口是一个具有部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL逻辑电平。对P2端口写“1〞时,部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于部电阻的原因,将输出电流〔IIL〕。在外部程序存储器或用16位地址读取外部数据存储器〔例如执行MOVX DPTR〕时,P2口送出高八位地址。在这种应用中,P2口使用很强的部上拉发送1。在使用8位地址〔如MOVX RI〕外部数据存储器时,P2口输出P2锁存器的容。在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。

17、   〔4〕P3口:P3口是一个具有部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL逻辑电平。对P3端口写“1〞时,部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于部电阻的原因,将输出电流〔IIL〕。P3口亦作为AT89S52特殊功能〔第二功能〕使用,如下所示。在flash编程和校验时,P3口也接收一些控制信号。   端口引脚第二功能   P3.0 RXD(串行输入口)   P3.1 TXD(串行输出口)   P3.2 INTO(外中断0)   P3.3 INT1(外中断1)   P3.4 TO(定时/计数器0)   P3.5

18、 T1(定时/计数器1)   P3.6 WR(外部数据存储器写选通)   P3.7 RD(外部数据存储器读选通)   此外,P3口还接收一些用于FLASH闪存编程和程序校验的控制信号。   〔5〕RST——复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将是单片机复位。   〔6〕ALE/PROG——当外部程序存储器或数据存储器时,ALE〔地址锁存允许〕输出脉冲用于锁存地址的低8位字节。一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当外部数据存储器时将跳过一个ALE脉冲。   对FLASH存储器编程期间

19、该引脚还用于输入编程脉冲〔PROG〕。   如有必要,可通过对特殊功能存放器〔SFR〕区中的8EH单元的D0位置位,可制止ALE操作。该位置位后,只有一条MOVX和MOVC指令才能将ALE激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE制止位无效。   〔7〕PSEN——程序储存允许〔PSEN〕输出是外部程序存储器的读选通信号,当AT89S52由外部程序存储器取指令〔或数据〕时,每个机器周期两次PSEN有效,即输出两个脉冲,在此期间,当外部数据存储器,将跳过两次PSEN信号。   〔8〕EA/VPP——外部允许,欲使CPU仅外部程序存储器〔地址为0000H-FFFFH

20、〕,EA端必须保持低电平〔接地〕。需注意的是:如果加密位LB1被编程,复位时部会锁存EA端状态。   如EA端为高电平〔接Vcc端〕,CPU那么执行部程序存储器的指令。 FLASH存储器编程时,该引脚加上+12V的编程允许电源Vpp,当然这必须是该器件是使用12V编程电压Vpp。 〔9〕电源引脚——Vcc和Vss引脚。 Vcc接+5V电源,Vss接地。 〔10〕时钟引脚——XTAL1和XTAL2引脚。 XTAL1接外部晶体的1个引脚,该引脚部是1个反相放大器的输入端,这个反相放大器构成了片振荡器,如果采用外接晶体振荡器时,此引脚应接地。 XTAL2接外部晶体的另一端,该引脚部接至

21、部反相放大器的输出端,假设采用外部时钟振荡时,该引脚接收时钟振荡的信号,即把此信号直接接到部时钟发生器的输入端。 3.1.2 单片机与各模块连接 AT89S52单片机P3.7引脚与温度传感器DS18B20的DQ引脚相连,作为温度信号的输入/输出,其P2.0引脚与报警电路的连接进展信号的通讯,其P0.0~P0.7引脚与显示电路的主芯片1602的D0~D7数据线相连来控制LED显示,其P1.0与P1.1引脚与温度设置模块相连接,以便用来控制系统的温度设置。系统原理图如图3-2所示。 图3-2 系统原理图 3.2复

22、位电路 复位电路的根本功能是:系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。为可靠起见,电源稳定后还要经一定的延时才撤销复位信号,以防电源开关或电源插头分-合过程中引起的抖动而影响复位。 本系统的复会电路电平方式的按键手动复位方式,是通过RST端经电阻与电源Vcc接通而实现的。C取10uF,R取10KΩ。其复位电路与单片机连接图如图3-3所示。 图3-3复位电路 3.3 晶振电路 AT89S52部有一个用于构成振荡器的高增益反相放大器,该高增益反相放大器的输入端为芯片引脚XTAL1,输出端为引脚XTAL2。这两个引脚跨接石英晶体振荡器和微调电容,就构成一个稳定的自己振

23、荡器,如图3-4所示是AT89S52部时钟方式的振荡器电路。取C1=C2=30pF,晶振为12MHz。 图3-4晶振电路 3.4DS18B20数据采集电路 DS18B20是由美国DALLAS半导体公司生产最新单线数字式温度传感器,主要特性如下:可实现对-55℃到+125℃围的温度测量,并且测量温度的误差在±0.5℃,实际系统的分辨率可单独设定,并且保存在EEPROM中,即使断电也能够保存;现场温度的测量值通过串行通信的方式传输,即“单线总线〞的数字方式传输;系统供电电压容许围大,可在3V到5.5V的围波动。DS18B20总共三个引脚,一个引脚为电源地GND,另一个为外接电源端VDD,

24、剩下一个DQ为数字信号输入/输出端。 DS18B20的部构造如图3-5所示,主要包括寄生电源电路、64位只读存储器ROM和单线接口、存储器和控制逻辑、存放中间数据的高速暂存存储器、温度传感器、报警上限存放器TH、报警下限存放器TL、配置存放器和8位CRC循环冗余校验码发生器。 图3-5DS18B20根本组成 与传统的热敏电阻相比,DS18B20能过直接读出被测温度并且可根据实际要去通过简单的编程实现9~12位的数字值读数方式。可以分别在93.75ms和750ms完成9位和12位的数字量,并且从DS18B20读出的信息或写入DS18B20的信息仅需一个口线〔单线接口〕读写。温度变换功率

25、来源于数据总线,总线本身也可以向所挂接的DS18B20供电,而无需额外电源。因而使用DS18B20可是系统构造更趋简单,可靠性更高。由于DS18B20采用单总线接口方式,所以它与单片机只需一根接口线即可,即只需要把DS18B20的DQ线与单片机的一根接口线即可,系统DQ线与单片机P3.7口连接。 3.5温度显示模块 选用1602字符型液晶模块,它是目前功控系统中使用最为广泛的液晶屏之一。1602字符型液晶模块是点阵型液晶,驱动方便,经编码后显示容多样化。系统的输入模块采用中断扫描4×4矩阵键盘,相比定时扫描方式,提高了MCU的使用效率。 液晶显示模块具有体积小、功耗低、显示容丰富、超薄轻

26、巧等优点,在袖珍式仪表和低功耗应用系统中得到广泛的应用。目前字符型液晶显示模块已经是单片机应用设计中最常用的信息显示器件。LCD1602液晶显示模块可以显示两行,每16个字符,采用单+SV电源供电,外围电路配置简单,价格廉价,具有很高的性价比。 表3-1 LCD1602的主要技术参数: 显示容量 16×2个字符 芯片工作电压 4.5~5.5V 工作电流 2.0mA(5.0V) 模块最正确工作电压 5.0V 字符尺寸 2.95×4.35(WXH)mm 表3-2 LCD1602接口信号说明: 编号 符号 引脚说明 编号 符号 引脚说明 1 VSS 电源地

27、 9 D2 Data I/O 2 VDD 电源正极 10 D3 Data I/O 3 VL 液晶显示偏压信号 11 D4 Data I/O 4 RS 数据/命令选择端〔H/L〕 12 D5 Data I/O 5 R/W 读/写选择端〔H/L〕 13 D6 Data I/O 6 E 使能信号 14 D7 Data I/O 7 D0 Data I/O 15 BLA 背光源正极 8 D1 Data I/O 16 BLK 背光源负极 D0~D7为1602的数据线,它与单片机的P0口相连,R6~R13为上拉电阻

28、R14为LCD比照度调节电阻。RS、R/W、E为控制口线,分别与AT89S52的P2.4、P2.3、P2.2相连接,实时显示温度。 3.6 报警模块 本设计中所设计的报警电路较为简单,由一个自我震荡型蜂鸣器和PNP型晶体管组成。蜂鸣器额定电流IB≤30mA,而对于AT89S52单片机,P2.0口的灌电流为1.6mA,拉电流为60μA,由此可见,仅靠单片机的P2.0口电流是不能驱动蜂鸣器的,必须使用集晶体管放大电路,为了使单片机消耗的功率更小,所以使用PNP型晶体管9012。 3.7 温度设置模块 为了使系统更具有通用性,系统通过温度设置模块设定用户所需要的报警上限和下限报警温度值,其

29、原理是通过三个按键的按键次数来决定温度值,当S1按下时,系统开场设置温度,当S2按下一次那么使报警温度值加1,直到用户所需的温度值为止,S3的作用与S2相反,它用于设置下限报警温度值。 4系统软件设计 4.1 程序流程图 程序启动后,首先调用DS18B20和LCD1602模块初始化程序,然后调用温度采集模块,借用DS18B20部模数转换的时间,调用温度值转换模块,将温度值转换成BCD码,送入AT89S52单片机处理,驱动LCD实时显示温度和超温报警。程序流程图如图4-1所示。 开场 LCD1602初始化DS18B

30、20初始化 温度采集 送AT89S52处理 LED显示 报警 是否超温 N Y 图4-1程序流程图 4.2 程序 #include //包含reg52.h文件 #include //包含intrins.h文件 #define uchar unsigned char //定义uchar代替unsigned char #define uint unsigned int //定义uint代替unsigned int sbit DQ=P3^

31、7;//DQ定义为P3口位7 sbit lcden=P2^2;//lcden定义为P2口位2 sbit lcdrs=P2^4;//lcdrs定义为P2口位4 sbit lcdrw=P2^3;//lcdrw定义为P2口位3 sbit beep=P2^0;//beep定义为P2口位0 sbit set=P1^0;//set定义为P1口位0 sbit up=P1^1;//up定义为P1口位1 sbit down=P1^2;//down定义为P1口位2 uint temp,a,b;//定义temp,a,b为无符号整型 uchar num;//定义num为无符号字符型 uchar k

32、ey=0;//定义key为无符号字符型,key的初始值为0 uchar g;//定义g为无符号字符型 uchar bai,shi,ge,maxshi,maxge,minshi,minge;//定义变量 uchar data temp_data[2]={0x00,0x00};//读出温度暂放 uchar data display[5]={0x00,0x00,0x00,0x00,0x00};//显示单元数据,共4个数据和一个运算暂用 uchar code ditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0

33、x07,0x08,0x08,0x09,0x09};//定义数组ditab[16] uint data data1[2]={0x32,0x00}//无符号数组uint data1[ ]被定义为data存储类型 uchar code table1[ ] = {" WEN KONG "} ;//定义数组table1[ ] uchar code table2[ ] = {" WENDU: . C "} ;//定义数组table2[ ] uchar code table3[ ]={"Set Temperature"} ;//定义数组table3[ ] uchar co

34、de table4[]={"SANGXIAN: . C"} ;//定义数组table4[ ] uchar code table5[]={"XIAXIAN: . C"} ;//定义数组table5[ ] uchar code warn[]={"WARNING WARNING "}; //定义数组table6[ ] // /*****************11us延时函数*************************/ void delay(uint t) { for(;t>0;t--); } /*****************1ms延时函数******

35、/ void delaylcd(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void write_(uchar ) //定义函数write_,给LCD写命令 { lcdrs=0; //低电平写命令 P0=; //写入命令 delaylcd(2); //延时2ms lcden=1;

36、 //LCD使能端置高电平 delaylcd(2); //延时2ms lcden=0; //LCD使能端置低电平 } void write_data(uchar date) //定义函数write_data,写LCD数据 { lcdrs=1; //高电平写数据 P0=date; //写入数据 delaylcd(2); //延时2ms lcden=

37、1; //LCD使能端置高电平 delaylcd(2); //延时2ms lcden=0; //LCD使能端置低电平 } void displayminmax() //定义函数displayminmax,第1行显示温度上下阈值 { uchar i; write_(0x80); //设置光标位置为第1行第1位 maxshi=data1[0]/10; // maxshi为上限温度十位 maxge=data1[0]%

38、10; // maxge为上限温度个位 minshi=data1[1]/10; // minshi为下限温度十位 minge=data1[1]%10; // minge为下限温度个位 write_data(0x30+minshi); //显示下限温度的十位 write_data(0x30+minge); //显示下限温度的个位 write_data(0xdf); //显示下限温度℃--->上限温度℃ write_data(0x43); write_data(0x2d); write_d

39、ata(0x2d); write_data(0x2d); write_data(0x3e); write_data(0x30+maxshi); //显示上限温度的十位 write_data(0x30+maxge); //显示上限温度的个位 write_data(0xdf); write_data(0x43); for(i=0;i<4;i++) { write_data(0x20); //显示四个空格 } } void initdisplay() //定义函数initdisplay,显示2行字符 { d

40、isplayminmax(); //调用displayminmax函数 write_(0x80+0x40); //设置光标位置,从第2行第1位开场写 for(num=0;num<16;num++) //显示十六位字符,即 WENDU: . C { write_data(table2[num]); delaylcd(1); } } void init()//LCD初始化 { lcden=0; //LCD使能端为低电平 lcdrw=0; //LCD读写端为低电平 wri

41、te_(0x38); //设置数据总线为8位,字符字体为5×7,显示2行 write_(0x0c); //开显示 write_(0x06); //读写一个字符后,地址指针及光标加一,且光标加一整屏显示不移动 write_(0x01); //清屏 initdisplay(); //调用函数initdisplay(),显示温度 } /****************DS18B20复位函数************************/ ow_reset(void) { char presence=1; while(presence) { wh

42、ile(presence) { DQ=1;_nop_();_nop_();//从高拉倒低 DQ=0; //单片机将DQ拉低电平 delay(50); //550 us DQ=1;//拉高总线 delay(6); //66 us presence=DQ; //presence=0 复位成功,继续下一步 } delay(45); //延时500 us presence=~DQ; } DQ=1;

43、//拉高电平 } // // /****************DS18B20写命令函数************************/ //向1-WIRE 总线上写1个字节 void write_byte(uchar val) { uchar i; for(i=8;i>0;i--) //从18B20移出一个字节 { DQ=1;_nop_();_nop_(); //从高拉到低 DQ=0;_nop_();_nop_();_nop_();_nop_();//延时5

44、us DQ=val&0x01;//最低位移出,向其间写一位 delay(6);//延时66 us val=val/2;//右移1位,准备写下一位数据 } DQ=1; delay(1); } // /****************DS18B20读1字节函数************************/ //从总线上取1个字节 uchar read_byte(void) //读DS18B20的字节 { uchar i; uchar value=0; for(i=8;i>0;i--) {

45、 DQ=1;_nop_();_nop_();//2us value>>=1; //移位,准备存放下一次数据 DQ=0;_nop_();_nop_();_nop_();_nop_();//4 us DQ=1;_nop_();_nop_();_nop_();_nop_();//4 us if(DQ)//读取数据 value|=0x80; //读取到的数据为1 delay(6); //66 us } DQ=1; return(value); //返回value值 } // /*******

46、读出温度函数************************/ // read_temp() //DS18B20读取温度 { ow_reset(); //总线复位 delay(200); //延时220us write_byte(0xcc); //发命令,跳过读序列号的操作 write_byte(0x44); //发转换命令, 启动温度转换 ow_reset();

47、 //复位 delay(1); //延时 write_byte(0xcc); //发命令 write_byte(0xbe); //读取温度存放器等〔共可读9个存放器〕前两个就是温度 temp_data[0]=read_byte(); //读温度值的低字节 temp_data[1]=read_byte(); //读温度值的高字节 temp=temp_data[1]; temp<<=8;

48、 temp=temp|temp_data[0]; // 两字节合成一个整型变量。 return temp; //返回温度值 } work_temp(uint tem) //温度处理函数 { uchar n=0; if(tem>6348) //温度值正负判断 {tem=65536-tem;n=1;} //负温度求补码,标志位置1 display[4]=tem&0x0f; //取小数局部的

49、值 display[0]=ditab[display[4]]; //存入小数局部显示值 display[4]=tem>>4;// 取中间八位,即整数局部的值 display[3]=display[4]/100; // 取百位数据暂存 display[1]=display[4]%100; // 取后两位数据暂存 display[2]=display[1]/10; // 取十位数据暂存 display[1]=display[1]%10; // 取各位数据暂存 } void write_1602()

50、 //温度写给LCD1602 { write_(0x80+0x40+8); //设置光标位置,第2行第9位 if(display[3]==1) //假设百位数为1那么显示百位 write_data(0x30+display[3]); else write_(0x80+0x40+9);//否那么设置光标位置为第2行第10位 write_data(0x30+display[2]);//写十位数据 write_data(0x30+display[1]);//写个位数据 write_(0x80+0x40+12

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服