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

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/8516434.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。

注意事项

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

环境温度监控报警系统.docx

1、 大学生电子竞赛设计报告 项目名称: 环境温度监控报警系统 组 长: 王伟涛 组 员: 王塨、张峰 系 别: 物理系 专 业: 光电器件及其应用方向 指导教师: 李清贵 完成时间: 2015年7月25日 摘要:本着熟悉单片机编程,系统设计的目的,增强动手合作能力,选择了做单片机实时温度监控报警系统这个实验项目。本开放性实验主要由AT89C52芯片、160

2、2液晶显示器、DS18B20数字式温度传感器、蜂鸣器等组成。通过温度传感器实时采集环境温度显示在液晶屏上,并经过单片机处理,设置两个上限温度报警值,本系统可用于智能家居温控报警,车间温控等,具有一定推广价值。 关键字:温度报警 温度上下限 AT89C52单片机 液晶LCD1602 温度传感器DS18B20 Abstract: In the design of the single chip microcomputer programming, system design, enhance the a

3、bility to work, the choice of real-time temperature monitoring and control system of single-chip microcomputer. This open experiment is mainly made up of AT89C52 chip, 1602 LCD, DS18B20 digital temperature sensor, buzzer and so on. Through the temperature sensors to collect the environmental tempera

4、ture display on the LCD screen, and through the SCM processing, set two upper limit temperature alarm value, the system can be used for the intelligent home control alarm, workshop temperature control, with certain value of popularization. Key words: temperature alarm Upper and lower limits of

5、temperature temperatureAT89C52 microcontroller LCD LCD1602 temperature sensor DS18B20 一、课程设计任务 1 1.1、功能介绍 1 二、系统整体设计方案 1 2.1、系统组成及功能 1 2.2、系统框架 2 三、硬件电路设计 2 3.1、单片机模块 3 3.1.1、AT89C52简介 3 3.1.2、AT89C52的资源: 4 3.1.3、引脚说明 4 3.1.4、单片机模块电路设计 7 3.2传感器模块 7 3.2.1、DS18B20简介 7 3.2.

6、2、DS18B20引脚说明 8 3.3、液晶显示模块 9 3.3.1、1602LCD液晶显示屏简介 9 3.3.2、1602引脚说明 9 3.3.3、1602电路设计 10 四、软件模块设计 10 4.1、主程序流程框图 10 4.2、显示模块 12 4.2.1程序编写说明 12 4.2.2、显示子程序 12 4.3、温度传感器模块 13 4.3.1、程序编写说明 13 4.3.2、温度传感器读取温度以及显示温度的子程序: 15 五、结论 18 六、致谢 20 七、参考文献 21 八、附录 22 8.1、实物图 22 8.2、仿真图 23 8.3、总程序

7、24 一、课程设计任务 1.1、功能介绍 本环境温度监控报警系统以STC89C52单片机为核心,通过单线数字温度传感器DS18B20来进行收集当前环境温度,用矩阵键盘输入设置两个上线环境温度值,用1602液晶显示屏显示当前温度值和设置好的两个上线环境温度值,用蜂鸣器和LED灯作为警报,从而可以实现以下功能: (1)可以对当前环境温度进行测量温度测量范围:0~90摄氏度,误差≤0.1摄氏度 (2)可通过1602LCD液晶显示屏显示出来当前环境温度值和设置的两个上线温度值,并且数值可以达到小数点后一位。 (3)可以通过矩阵键盘实时对两个上线环境温度值调控 (4)当环境温度大于

8、上限的较小值时会亮绿灯并且蜂鸣器会做频率较低的长声报警,当大于较大值时两灯都会亮并且蜂鸣器会做频率较高的报警。 (5)通过定时器编一个时钟实时显示当前时间,当环境温度大于上限温度时会停止时间,记下事故发生时间。 二、系统整体设计方案 2.1、系统组成及功能 本系统共分为六个模块。 (1)单片机模块,这部分主要实现数据的处理,输出执行,报警设置功能(主要模块) (2)液晶显示模块可以分别显示实时温度值,温度上下限。(主要模块) (3)温度传感模块的主要功能是通过DS18B20的强大功能实现对温度的采集。(主要模块) (4)蜂鸣器模块可以发出报警声。 (5)按键可以设置时间和上

9、限的两个温度值 (6)LED灯模块可以显示报警信号 2.2、系统框架 温度读取 液晶显示 AT89C52控制器 键盘扫描并设置 蜂鸣器 LED灯 图1 三、硬件电路设计 本系统由温度传感器DS18B20模块、单片机AT89C52模块、LCD液晶显示1602模块、蜂鸣器模块、LED灯模块、键盘模块六大模块组成, 3.1、单片机模块 3.1.1、AT89C52简介 该环境温度监控报警系统所用的单片机是AT89C52单片机,又图2为AT89C52单片机引脚图,AT89C

10、52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,该型号的单片机是应用量最多最普遍的单片机,它具有性能稳定、抗干扰能力强、性价比高、适应温度范围广、功耗低、体积小的特点广泛应用于各种复杂环境及各电子行业中。 AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2 个读写口

11、线,AT89C52可以按照常规方法进行编程,也可以在线编程。其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的 Flash存储器可有效地降低开发成本因此我们选择了AT89C52单片机。 3.1.2、AT89C52的资源: (1)兼容MCS51指令系统 (2)8kB可反复擦写(大于1000次)Flash ROM; (3)32个双向I/O口; (4)256x8bit内部RAM; (5)3个16位可编程定时/计数器中断; 图2 (6)时钟频率0-24MHz; (7)2个串行中断,可编程UART串行通道; (8)2个外部中断源,共8个中断源; (9)2个读

12、写中断口线,3级加密位; (10)低功耗空闲和掉电模式,软件设置睡眠和唤醒功能; (11)有PDIP、PQFP、TQFP及PLCC等几种封装形式,以适应不同产品的需求。 3.1.3、引脚说明 (1)P0口 P0 口是一组8 位漏极开路型双向I/O 口, 也即地址/数据总线复用口。作为输出口用时,每位能吸收电流的方式驱动8 个TTL逻辑门电路,对端口P0 写“1”时,可作为高阻抗输入端用。在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8 位)和数据总线复用,在访问期间激活内部上拉电阻。在Flash编程时,P0 口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接

13、上拉电阻。 (2)P1口 P1 是一个带内部上拉电阻的8 位双向I/O 口, P1 的输出缓冲级可驱动(吸收或输出电流)4 个TTL 逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。与AT89C51 不同之处是,P1.0 和P1.1 还可分别作为定时/计数器2 的外部计数输入(P1.0/T2)和输入(P1.1/T2EX)。(3)P2口 P2 是一个带有内部上拉电阻的8 位双向I/O 口,P2 的输出缓冲级可驱动(吸收或输出电流)4 个TTL 逻辑门电路。对端口P2 写“

14、1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。在访问外部程序存储器或16 位地数据存储器(例如执行MOVX @DPTR 指令)时,P2 口送出高8 位地址数据。在访问8 位地址的外部数据存储器(如执行MOVX@RI 指令)时,P2 口输出P2锁存器的内容。 (4)P3口 P3 口是一组带有内部上拉电阻的8 位双向I/O 口。P3 口输出缓冲级可驱动(吸收或输出电流)4 个TTL 逻辑门电路。对P3 口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。此时,被外部拉低的P3 口将用上拉电阻

15、输出电流(IIL),P3 口除了作为一般的I/O 口线外,更重要的用途是它的第二功能,P3 口还接收一些用于Flash闪速存储器编程和程序校验的控制信号。 (5)RST 复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位. (6)ALE/PROG 当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8 位字节。一般情况下,ALE 仍以时钟振荡频率的1/6 输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE 脉冲。 (7)PSEN 程序储存允许(PSEN)输出是外部程序存

16、储器的读选通信号,当AT89C52 由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN 有效,即输出两个脉冲。在此期间,当访问外部数据存储器,将跳过两次PSEN信号。 (8)EA/VPP 外部访问允许。欲使CPU 仅访问外部程序存储器(地址为0000H—FFFFH),EA 端必须保持低电平(接地)。需注意的是:如果加密位LB1 被编程,复位时内部会锁存EA端状态。如EA端为高电平(接Vcc端),CPU 则执行内部程序存储器中的指令。Flash存储器编程时,该引脚加上+12V 的编程允许电源Vpp,当然这必须是该器件是使用12V编程电压Vpp。 (9)XTAL1 振荡器反相放大

17、器及内部时钟发生器的输入端。 (10)XTAL2 振荡器反相放大器的输出端。 图3 3.1.4、单片机模块电路设计 AT89C52单片机接线图如下图2 P0接液晶数据口,P2.2和P2.3接2个发光二极管,P3接8个按钮,P2.4接蜂鸣器,P2.5接继电器,P2.6接液晶的RS,P2.7接液晶的EN,P1.2接温度传感器,其他按单片机最小系统连接。 3.2传感器模块 3.2.1、DS18B20简介 采用DALLAS最新单线数字温度传感器DS18B20。新的“一线器件”体积更小、适用电压更宽、更经济。一线总线独特而且经济的特点,使用户可轻松地组建

18、传感器网络,为测量系统的构建引入全新概念。DS18B20“一线总线”数字化温度传感器也支持“一线总线”接口,测量温度范围为 -55°C~+125°C,在-10~+85°C范围内,精度为±0.5°C。现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。适合于恶劣环境的现场温度测量,如:环境控制、设备或过程控制、测温类消费电子产品等。DS18B20的特性:DS18B20可以程序设定9~12位的分辨率,精度为±0.5°C。可选更小的封装方式,更宽的电压适用范围。分辨率设定,及用户设定的 图4 报警温度存储在EEPROM中,掉电后依然保存。DS18B20的性能是新

19、一代产品中最好的!性能价格比也非常出色!继“一线总线”的早期产品后,DS1820开辟了温度传感器技术的新概念。DS18B20使电压、特性及封装有更多的选择,让我们可以构建适合自己的经济的测温系统。 3.2.2、DS18B20引脚说明 DQ:数字信号输入/输出端。 GND:电源地端。 VDD:外接供电电源输入端(在寄生电源接线时此脚应接地)。 3.2.3 DS18B20引脚电路设计 图5 3.3、液晶显示模块 3.3.1、1602

20、LCD液晶显示屏简介 采用LCD1602液晶显示模块,有体积小、功耗低、显示内容丰富、超薄轻巧等优点,在袖珍式仪表和低功耗应用系统中得 图6 到广泛的应用。目前字符型液晶显示模块已经是单片机应用设计中最常用的信息显示器件。它可以显示两行,每行16个字符,采用单+5V电源供电,外围电路配置简单,价格便宜,具有很高的性价比。 3.3.2、1602引脚说明 1602采用标准的16脚接口 (1)第1脚:VSS为电源地 (2)第2脚:VDD接5V电源正极 (3)第3脚:V0为液晶显示器对比度调整端,接正极时对比度最弱,接地电源时对比度最高。

21、 (4)第4脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。 (5)第5脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。 (6)第6脚:E(或EN)端为使能(enable)端。 (7)第7~14脚:D0~D7为8位双向数据端。 (8)第15~16脚:空脚或背光电源,15脚背光正极,16脚背光负极。 3.3.3、1602电路设计 图7 四、软件模块设计 4.1、主程序流程框图 开始

22、 液晶、定时器、变量初始化 键盘扫描、按键处理 时钟显示、温度转化并显示 Yes 温度小于较低温度值 正常工作 No Yes 温度大于较低且小于温度值 绿灯亮,有长报警声 No 温度大于较高温度值 红绿灯亮,有短报警声,继电器控制开关断开,停止时钟 Yes No 结束 单片机温度实时监控报警系统流程图 图8 4.2、显示模块 4.2.1程

23、序编写说明 寄 图9 图10 寄存器选择控制表 RS R/W 操作说明 0 0 写入指令寄存器(清除屏等) 0 1 读busy flag(DB7),以及读取位址计数器(DB0~DB6)值 1 0 写入数据寄存器(显示各字型等) 1 1 从数据寄存器读取数据 注:关于E=H脉冲——开始时初始化E为0,然后置E为1,再清0. 4.2.2、显示子程序 void write_com(uchar com) {//写液晶命令函数 rs=0; lcden=0; P0=com

24、 delay(3); lcden=1; delay(3); lcden=0; } void write_date(uchar date) {//写液晶数据函数 rs=1; lcden=0; P0=date; delay(3); lcden=1; delay(3); lcden=0; } void write_sfm(uchar add,char date) //1602液晶刷新时分秒函数1为时,4为分,7为秒 { char shiwei,gewei;

25、 shiwei=date/10; gewei=date%10; write_com(0x80+add); write_date(0x30+shiwei); write_date(0x30+gewei); } void write_nyr(uchar add,char date) {//1602液晶刷新年月日函数3为年,6为分,9为秒 char shiwei,gewei; shiwei=date/10; gewei=date%10; write_com(0xc0+add); write_date(0x30+shiwei); write_date(

26、0x30+gewei); } 4.3、温度传感器模块 4.3.1、程序编写说明 图11 图12 初始化 (1) 先将数据线置高电平“1”。 (2) 延时(该时间要求的不是很严格,但是尽可能的短一点) (3) 数据线拉到低电平“0”。 (4) 延时750微秒(该时间的时间范围可以从480到960微秒)。 (5) 数据线拉到高电平“1”。 (6) 延时等待(如果初始化成功则在15到60微秒时间之内产生一个由DS18B20所返回的低电平“0”。据该状态可以来确定它的存在,但是应注意不能无限的进行等待,不然会使程序进入死循环,所以要进行超时控制)

27、 (7) 若CPU读到了数据线上的低电平“0”后,还要做延时,其延时的时间从发出的高电平算起(第(5)步的时间算起)最少要480微秒。 (8) 将数据线再次拉高到高电平“1”后结束。 写操作 (1) 数据线先置低电平“0”。 (2) 延时确定的时间为15微秒。 (3) 按从低位到高位的顺序发送字节(一次只发送一位)。 (4) 延时时间为45微秒。 (5) 将数据线拉到高电平。 (6) 重复上(1)到(6)的操作直到所有的字节全部发送完为止。 (7) 最后将数据线拉高。 读操作 (1)将数据线拉高“1”。 (2)延时2微秒。 (3)将数据线拉低“0”。 (4)延时

28、3微秒。 (5)将数据线拉高“1”。 (6)延时5微秒。 (7)读数据线的状态得到1个状态位,并进行数据处理。 (8)延时60微秒。 4.3.2、温度传感器读取温度以及显示温度的子程序: void dsreset(void) //18B20复位,初始化函数 { uint i; ds=0; i=103; while(i>0)i--; ds=1; i=4; while(i>0)i--; } bit tempreadbit(void) //读1位函数 { uint i; bit dat; ds=0;i++

29、 //i++ 起延时作用 ds=1;i++;i++; dat=ds; i=8;while(i>0)i--; return (dat); } uchar tempread(void) //读1个字节 { uchar i,j,dat; dat=0; for(i=1;i<=8;i++) { j=tempreadbit(); dat=(j<<7)|(dat>>1); //读出的数据最低位在最前面,这样刚好一个字节在DAT里 } return(dat); } void tempw

30、ritebyte(uchar dat) //向18B20写一个字节数据 { uint i; uchar j; bit testb; for(j=1;j<=8;j++) { testb=dat&0x01; dat=dat>>1; if(testb) //写 1 { ds=0; i++;i++; ds=1; i=8;while(i>0)i--; } else { ds=0; //写 0 i=

31、8;while(i>0)i--; ds=1; i++;i++; } } } void tempchange(void) //DS18B20 开始获取温度并转换 { dsreset(); delay(1); tempwritebyte(0xcc); // 写跳过读ROM指令 tempwritebyte(0x44); // 写温度转换指令 } uint get_temp() //读取寄存器中存储的温度数据 { uchar a,b; dsreset(); delay(1);

32、tempwritebyte(0xcc); tempwritebyte(0xbe); a=tempread(); //读低8位 b=tempread(); //读高8位 temp=b; temp<<=8; //两个字节组合为1个字 temp=temp|a; f_temp=temp*0.0625; //温度在寄存器中为12位 分辨率位0.0625° temp=f_temp+0.5; //加0.5是四舍五入 return temp; //temp是浮点型 }

33、 五、结论 紧紧张张的电子大赛培训也有一周之久了,首先给我们的感觉就是有好多东西都不懂,但这未必是一件坏事,就像王老师说的一样,你越是不懂就说明你要学的东西很多,你的提升空间也就越大。 我们组每天都是起早贪黑的工作者早上7:40准时在实验室坐着中午不休息一直到晚上10:40才回去,因为再晚回到宿舍就要关门了,当东西做不完时我们都有一种冲动晚上不回了,正是因为这种执着拼搏的精神使我们收获很多,每天我们都会感觉脑子里都是满满的不管是懂得的收获还是不懂得烦恼。 从刚开始的什么也不懂到现在的protel画电路图、proteus仿真、腐蚀、打板,焊接、调试等一些东西基本上动能很好的掌握了,可以说这

34、是一个巨大的进步,调试是一个复杂而漫长的过程,需要我们不断地去做,有一次我们的仿真也做出来了,但是在实物上就是不行,结果总是不对,经过一上午的检查调试终于知道了是我们的一根线接反了,开始的时候我们还以为是在焊接时由于高温而把与器件烧了呢,于是我们有万能表一个一个的检查电路。从这可以看出这是一个看似简单而最容易出错的过程,需要我们的耐心和细心。 现在我们的环境温度监控报警系统已经做出来了,它可以收集环境的温度并在显示屏上显示出来,我们可以用矩阵键盘设置两个上线温度值,当检测到的环境温度值大于最小上线温度时二极管会闪烁并且蜂鸣器会做频率较低的报警,当环境温度大于较大上线温度值时二极管会闪烁并且蜂

35、鸣器会做频率较高的报警。它具有一定的使用价值可以用于仓库、实验室、机房以及军事等设备上。 该系统的整体设计还是有很大的提升空间的,比如让它也可以监控低温,当温度低于设置温度值时也能够做出一些指示报警。另一方面,该系统只是报警这是不够的,最终还是需要人去做出反应,我们可以让它自动切断电源,从而保护设备,这样使其更具有自动化,从而会有更大的推广应用范围。 六、致谢 本次项目从开始设计到最后完工涉及到大量的知识应用,我们的指导老师李清贵老师一直孜孜不倦的指导我们,给我们提供帮助,特别是当遇到单片机上的问题。在此我们感谢李清贵老师。

36、在项目设计的过程中有杨彦伟老师、李浩平老师和王晓军老师的监督管理以及在知识、器材、元件方便对我们的帮助,在此我们一并表示致谢! 对当我们遇到问题时给我们提供帮助的同学们在此我们同样便是感谢。 感谢一路上有你们的陪伴,真心的感谢你们! 七、参考文献 [1]、唐颖.单片机技术及C51程序设计.电子工业出版社.2012 [2]、黄智伟.全国大学生电子设计竞赛训练教程.电子工业出版社.2010 [3]、郭天祥.51单片机C语言教程.电子工业出版社.2009 [4] 李朝清.单片机原理及接口技术.北京航空航天大学出版社,1996.8 [5] 于

37、永权.89系列(MCS-51兼容)Flash单片机原理及应用.北京:电子工业出版社,1997 [6] 百度文库 [7] 宋文续,扬帆.传感器与检测技术.北京:高等教育出版社,2005.4 [8] 常健生.检测与转换技术.北京:机械工业出版社,2004.6 [9] 凌志浩.智能仪表原理与设计技术.上海:华东理工大学出版社,2003.8 八、附录 8.1、实物图 8.2、仿真图 8.3、总程序 #include #define uchar unsigne

38、d char #define uint unsigned int sbit rs=P2^6; sbit lcden=P2^7; sbit jidianqi=P2^5; sbit s1=P3^0;//功能键 sbit s2=P3^1;//增加键 sbit s3=P3^2;//减小键 sbit beep=P1^5;//蜂鸣器 sbit led1=P1^0; sbit led2=P1^1; sbit ds=P3^7; //温度传感器 uint warnl=33; //下限温度 uint warnh=35; //上限温度 uint temp; //整形温度

39、数据 float f_temp; //浮点型温度数据 uchar count,stop,s1num,s2num;//其它变量定义 char miao,shi,fen; uchar code table[]=" : : ";//液晶固定显示内容 uchar code table1[]=" L H: "; void delay(uint z)//延时函数 { uint x,y; for(x=z;x>0;x--) for(y=124;y>0;y--); } void di() //蜂鸣器报警声音 { beep=

40、0; delay(100); beep=1; } /*================液晶操作============*/ void write_com(uchar com) {//写液晶命令函数 rs=0; lcden=0; P0=com; delay(3); lcden=1; delay(3); lcden=0; } void write_date(uchar date) {//写液晶数据函数 rs=1; lcden=0; P0=date; delay(3); lcden=1; delay(3);

41、lcden=0; } void write_sfm(uchar add,char date) //1602液晶刷新时分秒函数1为时,4为分,7为秒 { char shiwei,gewei; shiwei=date/10; gewei=date%10; write_com(0x80+add); write_date(0x30+shiwei); write_date(0x30+gewei); } void write_sfm1(uchar add,int temp) { c

42、har shiwei,gewei,xswei; shiwei=temp/100; gewei=temp%100/10; xswei=temp%100%10; write_com(0x80+add); write_date(0x30+shiwei); write_date(0x30+gewei); write_date(0x2e); write_date(0x30+xswei); } void write_nyr(uchar add,char date) {//1602液晶刷新年月日函数3为年,6为分,9为秒 char shiwei,gewei; s

43、hiwei=date/10; gewei=date%10; write_com(0xc0+add); write_date(0x30+shiwei); write_date(0x30+gewei); } /*==================================================*/ /*==============ds18B20程序=========================*/ void dsreset(void) //18B20复位,初始化函数 { uint i; ds=0; i=103;

44、while(i>0)i--; ds=1; i=4; while(i>0)i--; } bit tempreadbit(void) //读1位函数 { uint i; bit dat; ds=0;i++; //i++ 起延时作用 ds=1;i++;i++; dat=ds; i=8;while(i>0)i--; return (dat); } uchar tempread(void) //读1个字节 { uchar i,j,dat; dat=0; for(i=1;i<=

45、8;i++) { j=tempreadbit(); dat=(j<<7)|(dat>>1); //读出的数据最低位在最前面,这样刚好一个字节在DAT里 } return(dat); } void tempwritebyte(uchar dat) //向18B20写一个字节数据 { uint i; uchar j; bit testb; for(j=1;j<=8;j++) { testb=dat&0x01; dat=dat>>1; if(testb) //写 1 {

46、 ds=0; i++;i++; ds=1; i=8;while(i>0)i--; } else { ds=0; //写 0 i=8;while(i>0)i--; ds=1; i++;i++; } } } void tempchange(void) //DS18B20 开始获取温度并转换 { dsreset(); delay(1); tempwritebyte(0xcc); // 写跳过读ROM指令

47、 tempwritebyte(0x44); // 写温度转换指令 } uint get_temp() //读取寄存器中存储的温度数据 { uchar a,b; dsreset(); delay(1); tempwritebyte(0xcc); tempwritebyte(0xbe); a=tempread(); //读低8位 b=tempread(); //读高8位 temp=b; temp<<=8; //两个字节组合为1个字 temp=temp|a;

48、 f_temp=temp*0.625; //温度在寄存器中为12位 分辨率位0.0625° temp=f_temp+0.5; //加0.5是四舍五入 return temp; //temp是浮点型 } /*=========================================================================*/ /*========================温度处理========================*/ void deal(uint t) { if (t

49、>warnh*10) { jidianqi=1; TR0=0; led1=0; delay(100); led1=1; delay(100); led2=0; delay(100); led2=1; delay(100); di(); delay(150); di(); delay(100); } if (t>warnl*10&&t<=warnh*10) { led2=0; delay(100); led2=1; delay(100); di(); delay(400); di(); delay(100); } } /*=========================液晶处理=============*/ void init() {//初始化函数 uchar num; s1num=0; count=0; fen=0; miao=0; shi=0; lcden=0; jidianqi=1; led1=1; led2=1; write_com(0x38);//1602液晶初始化 write_com(0x0c); write_com(0x06

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

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

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

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

gongan.png浙公网安备33021202000488号   

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

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

客服