单片机课程设计报告 - 温度报警器 - 图文

更新时间:2024-07-08 05:42:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

单片机原理与应用 课程设计报告

课程设计名称: 温度报警器设计

专业班级: 13计转本 学生姓名: 张朝柱 肖娜 学 号: 20130566140 20130566113 指导教师: 高玉芹 设计时间: 2016-11—2017-12 成 绩:

信 电 工 程 学 院

徐州工程学院单片机原理及应用课程设计

摘 要

2009年6月14日随着时代的进步和发展,单片机技术已经普及到我们生活、工作、科研、各个领域,已经成为一种比较成熟的技术。

本文主要介绍了一个基于AT89C52单片机的测温系统,详细描述了利用液晶显示器件传感器DS18B20开发测温系统的过程,重点对传感器在单片机下的硬件连接,软件编程以及各模块系统流程进行了详尽分析,特别是数字温度传感DS18B20的数据采集过程。对各部分的电路也一一进行了介绍,该系统可以方便的实现实现温度采集和显示,并可根据需要任意设定上下限报警温度,它使用起来相当方便,具有精度高、量程宽、灵敏度高、体积小、功耗低等优点,适合于我们日常生活和工、农业生产中的温度测量,也可以当作温度处理模块嵌入其它系统中,作为其他主系统的辅助扩展。DS18B20与AT89C52结合实现最简温度检测系统,该系统结构简单,抗干扰能力强,适合于恶劣环境下进行现场温度测量,有广泛的应用前景。

关键词: 单片机AT89C51;DS18B20温度传感器;液晶显示LCD1602。

I

徐州工程学院单片机原理及应用课程设计

目 录

1绪论 .............................................................................................................................................. 1 1.1温度报警器简介 ................................................................................................................... 1 1.2温度报警器的背景与研究意义 ........................................................................................... 1 1.3温度报警器的现状及发展趋势 ........................................................................................... 1 2 系统整体方案设计 ................................................................................................................... 2 2.1 设计目标 ............................................................................................................................ 2 2.2系统的基本方案 ................................................................................................................... 2 2.2.1 系统方案选择 .............................................................................................................. 2 2.2.2 各模块方案选择 .......................................................................................................... 3 2.3主要元器件介绍 ................................................................................................................... 3 2.3.1 STC89C52的简介 ......................................................................................................... 3 2.3.2 DS18B20的简介 ........................................................................................................... 4 3 系统的硬件设计与实现 ............................................................................................................. 5 3.1 系统硬件概述 ...................................................................................................................... 5 3.2主要单元电路的设计 ........................................................................................................... 5 3.2.1键盘扫描模块电路的设计 ............................................................................................ 5 3.2.2单片机控制模块电路的设计 ........................................................................................ 5 3.2.3报警模块电路的设计 .................................................................................................... 6 3.2.4 LCD1602显示模块电路的设计 .................................................................................... 7 4 系统的软件设计与实现 ............................................................................................................. 8 4.1 KEIL软件介绍 ...................................................................................................................... 8 4.2系统程序设计流程图 ............................................................................................................ 8 4.2.1 主程序软件设计 ............................................................................................................ 8 4.2.2 按键软件设计 ................................................................................................................ 9 4.2.3 密码设置软件设计 ........................................................................................................ 9 4.2.4 开锁软件设计 .............................................................................................................. 10 5 系统仿真设计 ........................................................................................................................... 12 5.1 Proteus 软件介绍 ............................................................................................................. 12 5.2 Proteus 仿真图 ................................................................................................................. 12 5.3 硬件调试 ............................................................................................................................. 13 5.4 调试结果 ............................................................................................................................. 13 6 结论 ........................................................................................................................................... 14

I

徐州工程学院单片机原理及应用课程设计

参考文献 ....................................................................................................................................... 15 附录 ............................................................................................................................................... 16 附录1硬件实物图 ....................................................................................................................... 16 附录2 C语言源程序 ................................................................................................................... 16

II

徐州工程学院单片机原理及应用课程设计

1绪论

1.1温度报警器简介

温度报警器是一种通过DS18B20采集周围温度,单片机来处理数据来报警的一种电子产品。它的种类很多,有简易的电路产品,也有基于芯片的性价比较高的产品。现在应用较广的温度报警器是以芯片为核心,通过编程来实现的。

1.2温度报警器的背景与研究意义

在日常生活中,温度对于我们并不陌生,它是一个时时刻刻存在的物理量在我们的日常生活中占据了十分重要的地位。温度的大小时刻与我们的生产、生命、安全息息相关。因此对温度的测量与控制对各个行业领域有着很及其重要的作用尤其是在金属冶炼、化学研究、建材生产、食品加工、机械制作、石油提炼等工业领域,占据不可忽视的作用。众所周知,当我们进行陶瓷烧烤,制作陶瓷工艺时,必须很精确的控制其烧烤温度,只要我们控制好其温度,这样才能创造出完美的、无瑕疵的艺术品,一旦温度控制不佳,将会一件次品;另外当我们进行酿酒时,同样也需要对温度进行合理适当的控制,只有这样,我们才能够生产出大家公认的好酒。如此可见,对于温度的检测与把控在我们日常生活以及工业生产占据着举足轻重的地位。

目前,在日新月异的生活变化中,工业和农业领域得到了快速的发展与进步,人们的需求也是不断地扩张,对于电子工业领域,自动化的产品无疑是得到大家的欢迎,随着微型处理器功能的不断强大,单片机无疑成了人们心目中最美好的选择,它的出现为人民的生活带来了不可否认利益,对于工业领域,提高了生产效率,方便了人民的生活。然而随着人们的要求越来越高,对现代科学研究,工作,生活,提供更便利的设施需要从单片机技术开始,向着数字控制系统,智能控制方向不断地发展。

目前,我们在科技迅速发展的现在社会中不断成长,信息技术已经不知不觉的渗透到我们生活的各个方面。为了确保这些科技产品的安全,减少其对我们生命和财产造成损失,我们首先需要控制它们的温度,确保它们在正常的温度之间正常运行,因研究兼备经济实用为一体的温度报警装置具有重要的意义

1.3温度报警器的现状及发展趋势

在现代社会中,由于工业过程控制系统的不断发展,特别是计算机领域中微电子技术以及自动控制理论和设计方法的快速发展,相对中国而言,国外一些发达国家在温度监控系统研究中已经成功取得了超前的成绩,具体的表现其自适应、智能化、参数自整定的特点。以德国、日本、美国等发达国家为例,在上个世纪,他们已经成功生产出了一批商业化的、性能优异的温度监控器以及仪表设备,并且已经投入市场,在工业、家庭等领域得到了广泛的应用,而中国才处于研究的初级阶段。

1

徐州工程学院单片机原理及应用课程设计

2 系统整体方案设计

2.1设计目标

本设计采用STC89C52单片机为主控芯片,结合外围电路矩阵键盘、液晶显示器LCD1602等部分组成。其中矩阵键盘用于输入数字密码和进行各种功能的实现。由用户通过连接单片机的矩阵键盘输入密码,后经过单片机对用户输入的密码与自己保存的密码进行对比,从而判断密码是否正确,然后控制引脚的高低电平传到开锁电路或者报警电路控制开锁还是报警,组成的温度报警器系统,能够实现:

1. DS18B20不断采集周围环境温度; 2. 单片机处理温度的数据显示在DS18B20; 3. 用户设定温度报警的上限和下限; 系统整体设计框图如图2-1所示:

时钟振荡 报警模块 单片机复位 LCD1062主 显示 控 制 温 器度传感器图2-1 系统整体设计框图

2.2系统的基本方案

2.2.1 系统方案选择

采用单总线数字温度传感器DS18B20测量温度,直接输出数字信号。便于单片机处理及控制,节省硬件电路。且该芯片的物理化学性很稳定,此元件线形性能好,在0—100摄氏度时,最大线形偏差小于1摄氏度。DS18B20的最大特点之一采用了单总线的数据传输,由数字温度计DS18B20和微控制器AT89C51构成的温度装置,它直接输出温度的数字信号到微控制器。每只DS18B20具有一个独有的不可修改的64位序列号,根据序列号可

2

徐州工程学院单片机原理及应用课程设计

访问不同的器件。这样一条总线上可挂接多个DS18B20传感器,实现多点温度测量,轻松的组建传感网络。

2.2.2 各模块方案选择

2.2.2.1 单片机的选择

采用STC89C52单片机,它是一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash 存储器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。 2.2.2.2 温度传感器的选择

DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。DS18B20的性能特点如下:

●独特的单线接口仅需要一个端口引脚进行通信;

●多个DS18B20可以并联在惟一的三线上,实现多点组网功能; ●无须外部器件;

●可通过数据线供电,电压范围为3.0~5.5V; ●零待机功耗; ●温度以9或12位数字; ●用户可定义报警设置;

●报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件; ●负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作; DS18B20内部结构主要由四部分组成:64位光刻ROM,温度传感器,非挥发的温度报警触发器TH和TL,高速暂存器。DS18B20的管脚排列如图3.5所示。64位光刻ROM是出厂前被光刻好的,它可以看作是该DS18B20的地址序列号。不同的器件地址序列号不同。 2.2.2.3 显示模块的选择

液晶显示采用LCD 液晶显示,显示的位数多,由单片机驱动。此方案有美观、显示清晰多样的优点。 2.2.2.4 报警模块的选择

采用有源蜂鸣器来报警(需要一定的频率才可以驱动),可以发出声音报警且降低了成本。

2.3主要元器件介绍

2.3.1 STC89C52的简介

3

徐州工程学院单片机原理及应用课程设计

STC89C52是一种带8K字节闪烁可编程可檫除只读存储器的低电压,高性能COMOS8的微处理器,俗称单片机。该器件采用ATMEL搞密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。 STC89C52具体介绍如下: ① 主电源引脚(2根)

VCC(Pin40):电源输入,接+5V电源 GND(Pin20):接地线 ②外接晶振引脚(2根)

XTAL1(Pin19):片内振荡电路的输入端 XTAL2(Pin20):片内振荡电路的输出端 ③控制引脚(4根)

RST/VPP(Pin9):复位引脚,引脚上出现2个机器周期的高电平将使单片机复位。 ALE/PROG(Pin30):地址锁存允许信号 PSEN(Pin29):外部存储器读选通信号

EA/VPP(Pin31):程序存储器的内外部选通,接低电平从外部程序存储器读指令,如果接高电平则从内部程序存储器读指令。 ④可编程输入/输出引脚(32根)

STC89C52单片机有4组8位的可编程I/O口,分别位P0、P1、P2、P3口,每个口有8位(8根引脚),共32根。

P0口(P39~P32):8位双向I/O口线,名称为P0.0~P0.7 P1口(P1~P8):8位准双向I/O口线,名称为P1.0~P1.7 P2口(P21~P28):8位准双向I/O口线,名称为P2.0~P2.7 P3口(P10~P17):8位准双向I/O口线,名称为P3.0~P3.7

2.3.2 LCD1602的简介

本设计所使用的是不带字库的LCD1602液晶显示屏,因为其可以在proteus中仿真,便于设计 ,其引脚表如2-3所示。

表2-3 12864引脚

4

徐州工程学院单片机原理及应用课程设计

3 系统的硬件设计与实现

3.1 系统硬件概述

本系统是通过键盘扫描模块,既能够显示数据并且还能修改密码,开锁密码,具有强大的功能,通过键盘扫描模块输入到单片机控制系统STC89C52 中。然后通过LCD显示模块来显示我们所要有数据,还有一个就是报警模块,当输入的密码相同时,则显示模块的灯点亮,当输入的密码是错误时,重新输入,三次出错蜂鸣器响,发出报警。为了达到设定的功能,本装置键盘扫描模块、单片机控制模块、LCD显示模块,报警模块等4 模块组成。

3.2主要单元电路的设计

3.2.1温度采集模块电路的设计 3.2.2单片机控制模块电路的设计

单片机作为本装置的核心器件,在系统中起到控制报警、以及LCD显示的作用,其中采用的是STC89C52是标准的40 引脚双列直插式集成电路芯片,有4 个八位的并行双向I/O 端口,分别记作P0、P1、P2、P3。第20 引脚为接地端;第40引脚为电源端;第31 引脚需要接高电位使单片机选用内部程序存储器;第18、19 脚之间接上一个12MHz 的晶振为单片机提供时钟信号;第9 脚为复位脚,当其接高电位时,单片机停止工作。P1 口接LCD控制引脚,P0 口连接一LCD1602显示屏数据输入端,P3 口与12 个阵列式按键相连实现对键盘的扫描。如图3-2所示。

5

徐州工程学院单片机原理及应用课程设计

图3-2主控电路图

3.2.3报警模块电路的设计

本模块的作用是当开锁按钮被按下时,如果LCD当前显示值相同,则红灯点亮,当输入的数与密码不同时,则蜂鸣器立刻发出声音报警。如图3-3所示。

图3-3 报警电路图

3.2 LCD1602显示模块电路的设计

本模块主要用于显示指示用户密码输入要求。根据管脚要求连接电路,P0口接上拉电阻,并与LCD数据输入端口连接,控制管脚与P1口连接。如图3-4所示。

6

徐州工程学院单片机原理及应用课程设计

3-4显示模块电路图

7

徐州工程学院单片机原理及应用课程设计

4 系统的软件设计与实现

4.1 KEIL软件介绍

Keil 是美国Keil公司的C51编译器,它被嵌入到了Keil uVision集成开发环境中。Keil是目前最常用的编译器,支持浮点等到类型,支持多维数组,能生成对应的汇编代码,能直接编译汇编代码程序和内嵌多种工具,可以方便的链接,生成可执行文件。Keil uVision 2 IDE 是Keil software 公司的产品,它集项目管理、编译工具、代码编写工具、代码调试以及完全仿真于一体,适合个人开发或人数少、对开发过程的管理还不成熟的开发团体。这一功能强大的软件提供简易的开发平台,可以让开发者在开发过程中集中精力于项目本身,加快开发速度。

4.2系统程序设计流程图

4.2.1 主程序软件设计

通过上述原理,已对密码锁整体运行环境有了充分认识,绘制主程序和子程序流程图,利用Keil软件,对单片机进行编程,如图4-1为主程序功能流程图:

8

徐州工程学院单片机原理及应用课程设计

4-1主程序功能流程图

4.2.2温度采集的软件设计

如图4-2为温度采集的软件设计,主要功能是完成DS18B20的初始化工作,并进行读温度,将温度转化成为压缩BCD码 并在显示器上显示传感器所测得的实际温度。读出温度子程序的主要功能是读出RAM中的9字节,在读出时需要进行CRC校验,校验有错时不进行温度数据的改写。

9

徐州工程学院单片机原理及应用课程设计

DS18B20复位 跳过ROM命令 读取温度命令 读取操作CRC检验 9字节完? N Y CRC检验正确? N Y 移入温度寄存器 返回

4-2温度采集的软件设计流程图

4.2.3 温度采集算法软件设计

如图4-3为温度采集算法流程图,计算温度子程序将RAM中读取值进行BCD码的转换运算,并进行温度值正负的判定,其程序流程图。

10

徐州工程学院单片机原理及应用课程设计

开始 温度零下? Y N 温度取值补码置“—”标志 置“+”标志 计算小数位温度 计算整数位温度 返回

4-3温度采集算法流程图

4.2.4温度转换命令子程序软件设计

如图4-4为温度转换命令子程序流程图,温度转换命令子程序主要是发温度转换开始命令,当采用12位分辩率时转换时间约为750ms,在本程序设计中采用1s显示程序延时法等待转换的完成。

4-4温度转换命令子程序流程图

11

徐州工程学院单片机原理及应用课程设计

5 系统仿真设计

5.1 Proteus 软件介绍

Proteus软件是英国Labcenter electronics公司出版的EDA工具软件。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。在PROTEUS绘制好原理图后,调入已编译好的目标代码文件:*.HEX,可以在PROTEUS的原理图中看到模拟的实物运行状态和过程。

PROTEUS不仅可将许多单片机实例功能形象化,也可将许多单片机实例运行过程形象化。 使用Proteus 软件进行单片机系统仿真设计,是虚拟仿真技术和计算机多媒体技术相结合的综合运用,有利于培养学生的电路设计能力及仿真软件的操作能力;在单片机课程设计和全国大学生电子设计竞赛中,我们使用 Proteus 开发环境对学生进行培训,在不需要硬件投入的条件下,学生普遍反映,对单片机的学习比单纯学习书本知识更容易接受,更容易提高。实践证明,在使用 Proteus 进行系统仿真开发成功之后再进行实际制作,能极大提高单片机系统设计效率。因此,Proteus 有较高的推广利用价值。

5.2 Proteus 仿真图

图5-1为正常温度界面图,图5-2为报警温度界面,实现实时显示和温度报警。

12

徐州工程学院单片机原理及应用课程设计

图5-1 正常温度界面图

图5-2 报警温度界面

5.3 硬件调试

硬件调试主要是测试各硬件部分能否完成设计功能。

系统的性能调试以主程序为主。硬件调试比较简单,直接插上电,软件调试可以先编写显示程序并进行硬件的正确性检验,然后分别进行主程序、从程序的编写和调试,由于DS18B20与单片机采用串行数据传送,因此对DS18B20进行编程时必须严格地保证读写时序,否则将无法读取测量结果。

在焊接的过程中,每接一根线都用万用表测试是否短路或开路。这样焊接完了之后,就不必怀疑线路不通的问题了,由于线路很繁琐也免去了大量排查的工作。最初焊接最小系统,查看二极管能否正常闪烁,以此判断单片机是否正常工作。整体电路焊接完后,通电测试所有硬件芯片的输入输出电压是否在设计要求的范围内,判断单片机的工作与否。

5.4 调试结果

在调试中出现的很多问题,开始显示屏不显示,经排查是一处地线没连接,导致显示屏供不上电。连接后显示屏正常亮了,但是显示不出想要的结果,调节可变电阻,改变背光度,依然不显示。经过和班级同学的讨论,我们知道是程序的问题。于是我们修改了程序,并最终调试出想要的效果。

13

徐州工程学院单片机原理及应用课程设计

6结论

本次的课程设计共一周时间,分别进行了BS18D20电路原理图的设计,电路仿真图的设计以及实物电路板的演示三个过程。经过这次的课程设计,我们不仅加深了对 Proteus仿真软件的了解和使用,还学到了许多课本上没有涉及知识,练习了电路原理图的设计和仿真运行,同时对上学期学习的单片机课程进行了一次全面的复习和巩固,收益很大。

我们知道,课程设计一般强调能力培养为主,在独立完成设计任务的同时,还要注意其他几方面能力的培养与提高,如独立工作能力与创造力;综合运用专业及基础知识的能力,解决实际工程技术问题的能力;查阅图书资料、产品手册和各种工具书的能力;工程绘图的能力;书写技术报告和编制技术资料的能力。在专业知识与研究方法方面为日后的毕业设计乃至毕业后的工作奠定良好的基础

这次课设让我对单片机有了进一步的了解,而且对Proteus仿真软件的有了一定了解。体会到了Proteus仿真软件的强大。

通过本次课设,能够使我们熟练掌握单片机控制电路的设计、程序编写和系统调试,从而全面地提高我们对单片机的软件、硬件等方面的理解,进而增强我们在实践环节的动手操作能力。譬如,我们可以根据实验指导书的要求,完成DS18B20电路的硬件设计、电路器件的选择、单片机软件的运行、以及整体系统调试,并写出完善的设计报告。在进行课设之前,要求我们具备数字电路、模拟电路、电路基础、微机原理、电力电子、电机学和单片机等相关课程的知识,并具备一些基本的实践操作水平,为以后的就业打好一定的基础。

总的来说,这次的课程设计自己还是很满意的,感觉收获了不少东西,相信此次学到的知识在以后的生活和学习中对我会有很大的帮助!

14

徐州工程学院单片机原理及应用课程设计

参考文献

[1] 高玉芹.单片机原理及应用及C51编程技术.北京:机械工业出版社,2011.6 [2] 赵文博,刘文涛.单片机语言C51程序设计[M].北京:人民邮电出版社,2005, 10. [3] 孙育才. MCS-51系列单片微型计算机及其应用[M]. 东南大学出版社, 2004,6. [4] 沈红卫. 单片机应用系统设计实力与分析[M]. 北京:北京航空航天大学出版社,2003. [5] 徐爱钧, 彭秀华. 单片机高级语言C51应用程序设计[M].北京航空航天大学出版社,2006. [6] 曾一江. 单片微机原理与接口技术[M]. 北京:科技出版社,2009,12. [7] 康华光. 电子技术基础(模拟部分)[M]. 北京:高等教育出版社, 2004,4. [8] 江晓安, 董秀峰. 模拟电子技术[M]. 西安电子科技大学出版社,2001.10 [9] 戴佳,苗龙,陈斌.51单片机应用系统开发典型实例[M]. 中国电力出版社,2005.9 [10] 荣贵.电子制作[M].科学技术文献出版社, 2003

[11] 刘建清. 轻松玩转51单片机:魔法入门·实例解析·开发揭秘全攻略[M]. 北京航空航天大学出版社,2011

15

徐州工程学院单片机原理及应用课程设计

附录

附录1硬件图

附录2 C语言源程序

主函数:

/**************************************************************************** * 实 验 名

: 18B20温度显示试验

* 实验说明 : LCD1602显示温度值。 * 连接方式 : 见连接图 * 注 意

:

****************************************************************************/

#include #include\#include\void LcdDisplay(int);

16

徐州工程学院单片机原理及应用课程设计

sbit Beep = P1^5 ;

void delay(unsigned int i) ;

void delay(unsigned int i) {

char j;

for(i; i > 0; i--)

for(j = 200; j > 0; j--); }

/*******************************************************************************

* 函数名 : main * 函数功能

: 主函数

* 输入 : 无 * 输出 : 无

*******************************************************************************/

void main() {

TMOD = 0x01; TH0 = 60536/256; TL0 = 60536%6; EA=1; ET0=1; LcdInit();

//初始化LCD1602

//写地址 80表示初始地址

LcdWriteCom(0x88); LcdWriteData('C'); while(1) {

17

徐州工程学院单片机原理及应用课程设计

LcdDisplay(Ds18b20ReadTemp()); if(Ds18b20ReadTemp()>=400) //25 {

TR0=1;

}else{ }

Delay1ms(1000);//1s钟刷一次

TR0=0;

// }

}

/*******************************************************************************

* 函数名 : 定时器0 中断服务程序 * 函数功能

:

* 输入 : v * 输出 : 无

*******************************************************************************/

void Timer0(void) interrupt 1 { }

/*******************************************************************************

* 函数名 : LcdDisplay() * 函数功能

: LCD显示读取到的温度

TH0 = 60536/256;

TL0 = 60536%6; //产生发声100Hz的平率 Beep = ~Beep;

* 输入 : v * 输出 : 无

18

徐州工程学院单片机原理及应用课程设计

*******************************************************************************/

void LcdDisplay(int temp) //lcd显示 {

unsigned char datas[] = {0, 0, 0, 0, 0}; //定义数组

float tp; if(temp< 0)

//当温度值为负数

{

LcdWriteCom(0x80);

//写地址 80表示初始地址 //显示负

LcdWriteData('-');

//因为读取的温度是实际温度的补码,所以减1,再取反求出原码 temp=temp-1; temp=~temp; tp=temp;

temp=tp*0.0625*100+0.5;

//留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点

//后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就 } else {

//写地址 80表示初始地址 //显示正

//算由?.5,还是在小数点后面。

LcdWriteCom(0x80);

LcdWriteData('+');

tp=temp;//因为数据处理有小数点所以将温度赋给一个浮点型变量 //如果温度是正的那么,那么正数的原码就是补码它本身 temp=tp*0.0625*100+0.5;

//留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点

19

徐州工程学院单片机原理及应用课程设计

//后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就 }

LCD1602显示程序文件: #include\

20

}

//算加上0.5,还是在小数点后面。

datas[0] = temp / 10000; datas[1] = temp % 10000 / 1000; datas[2] = temp % 1000 / 100; datas[3] = temp % 100 / 10; datas[4] = temp % 10;

LcdWriteCom(0x82); //写地址 80表示初始地址

LcdWriteData('0'+datas[0]); //百位

LcdWriteCom(0x83);

//写地址 80表示初始地址

LcdWriteData('0'+datas[1]); //十位

LcdWriteCom(0x84); //写地址 80表示初始地址

LcdWriteData('0'+datas[2]); //个位

LcdWriteCom(0x85); //写地址 80表示初始地址 //显示 ‘.’

LcdWriteData('.');

LcdWriteCom(0x86); //写地址 80表示初始地址

LcdWriteData('0'+datas[3]); //显示小数点

LcdWriteCom(0x87); //写地址 80表示初始地址

LcdWriteData('0'+datas[4]); //显示小数点

徐州工程学院单片机原理及应用课程设计

/*******************************************************************************

* 函 数 名 : Lcd1602_Delay1ms * 函数功能

: 延时函数,延时1ms

* 输 入 : c * 输 出 : 无

* 说 名 : 该函数是在12MHZ晶振下,12分频单片机的延时。

*******************************************************************************/

void Lcd1602_Delay1ms(uint c) //误差 0us {

uchar a,b;

for (; c>0; c--) { }

for (b=199;b>0;b--) {

for(a=1;a>0;a--); }

}

/*******************************************************************************

* 函 数 名 : LcdWriteCom * 函数功能

: 向LCD写入一个字节的命令

* 输 入 : com * 输 出 : 无

*******************************************************************************/

#ifndef LCD1602_4PINS //当没有定义这个LCD1602_4PINS时 void LcdWriteCom(uchar com) //写入命令

21

徐州工程学院单片机原理及应用课程设计

*******************************************************************************/

void Ds18b20WriteByte(uchar dat) {

for(j=0; j<8; j++) {

DSPORT = 0; i++;

DSPORT = dat & 0x01; //然后写入一个数据,从最低位开始 i=6;

while(i--); //延时68us,持续时间最少60us

//然后释放总线,至少1us给总线恢复时间才能接着写入第二个 //每写入一位数据之前先把总线拉低1us

uint i, j;

DSPORT = 1; 数值 }

}

dat >>= 1;

/*******************************************************************************

* 函 数 名 : Ds18b20ReadByte * 函数功能

: 读取一个字节

* 输 入 : com * 输 出 : 无

*******************************************************************************/

uchar Ds18b20ReadByte() {

uchar byte, bi; uint i, j;

27

徐州工程学院单片机原理及应用课程设计

}

for(j=8; j>0; j--) {

DSPORT = 0;//先将总线拉低1us i++;

DSPORT = 1;//然后释放总线 i++;

i++;//延时6us等待数据稳定

bi = DSPORT; //读取数据,从最低位开始读取

/*将byte左移一位,然后与上右移7位后的bi,注意移动之后移掉那位补0。*/ byte = (byte >> 1) | (bi << 7); i = 4;

//读取完之后等待48us再接着读取下一个数

while(i--);

}

return byte;

/****************************************************************************

***

* 函 数 名 : Ds18b20ChangTemp * 函数功能

: 让18b20开始转换温度

* 输 入 : com * 输 出 : 无

*******************************************************************************/

void Ds18b20ChangTemp() {

Ds18b20Init(); Delay1ms(1);

Ds18b20WriteByte(0xcc);

//跳过ROM操作命令

Ds18b20WriteByte(0x44); //温度转换命令

//等待转换成功,而如果你是一直刷着的话,就不用这个延时了

// Delay1ms(100); }

28

徐州工程学院单片机原理及应用课程设计

/*******************************************************************************

* 函 数 名 : Ds18b20ReadTempCom * 函数功能

: 发送读取温度命令

* 输 入 : com * 输 出 : 无

*******************************************************************************/

void Ds18b20ReadTempCom() { }

/*******************************************************************************

* 函 数 名 : Ds18b20ReadTemp * 函数功能

: 读取温度

Ds18b20Init(); Delay1ms(1);

Ds18b20WriteByte(0xcc); //跳过ROM操作命令 Ds18b20WriteByte(0xbe); //发送读取温度命令

* 输 入 : com * 输 出 : 无

*******************************************************************************/

int Ds18b20ReadTemp() {

int temp = 0; uchar tmh, tml; Ds18b20ChangTemp(); Ds18b20ReadTempCom();

//先写入转换命令

//然后等待转换完后发送读取温度命令

tml = Ds18b20ReadByte(); //读取温度值共16位,先读低字节

29

徐州工程学院单片机原理及应用课程设计

}

tmh = Ds18b20ReadByte(); temp = tmh; temp <<= 8; temp |= tml; return temp;

//再读高字节

30

本文来源:https://www.bwwdw.com/article/9hh.html

Top