基于单片机的数字温度计课程设计报告_第1页
基于单片机的数字温度计课程设计报告_第2页
基于单片机的数字温度计课程设计报告_第3页
基于单片机的数字温度计课程设计报告_第4页
基于单片机的数字温度计课程设计报告_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目录一 .课程设计目的 4二 设计任务 4三 .设计要求 4四 . 设计方案及比较(设计可行性分析) 4五 .系统设计总体思路 6六 .系统原理框图及工作原理分析 61.温度计设计系统流程图 62.数字温度计应用系统的硬件设计 8(1).单片机小系统的基本组成及其选择 8(2).电源 8(3).晶振控制 8(4).I/O口&接口 9(5).主要芯片及其功能 10AT89S52 10DS18B20 121602液晶显示屏 18七 .系统软件程序的设计 191.软件流程框图 192.C语言程序 21八 .系统仿真调试 251.仿真器的介绍 27.keil软件的开发运用 27.Keil C51单片机软件开发系统的整体结构 27.使用独立的Keil仿真器时,注意事项 28.proteus软件的开发运用 .28.Protues 软件介绍 . 28.proteus 的工作过程 .282.系统整体调试28.仿真调试结果28.仿真结果分析29九 .PCB板制作以及成品制作调试29十 .实验结果30十一 .结论(设计分析)30十二 .课程设计心得体会 30一 课程设计目的1、 加强学生理论联系实际的能力,提高学生的动手能力;2、 学会基本电子元器件的识别和检测;3、 学会应用EDA软件Proteus, Multisim进行电路的设计和仿真;4、 基本掌握单片机的基本原理,并能将其应用于系统的设计:5学会运用AltiumDesignercb进行板制作; 6通过实训,提高学生的学习兴趣,激发自主学习能力,培养创新意识。二 设计任务先焊制一个单片机最小系统,并以制作的单片机最小系统为核心,设计并制作一个数字温度计应用系统。三 设计要求1 采用DS18B20作为温度传感器进行温度检测;2 对采集温度进行显示,采用两路设计(显示温度分辨率0.1);3 采集温度数值应采用数字滤波措施,保证显示数据稳定;4 显示数据,无数据位必须消隐。四、设计方案及比较(设计可行性分析)该系统主要由温度测量和数据采集两部分电路组成,实现的方法有很多种,下面将列出两种在日常生活中和工农业生产中经常用到的实现方案。 方案一采用热电偶温差电路测温,温度检测部分可以使用低温热偶,热电偶由两个焊接在一起的异金属导线所组成(热电偶的构成如图 3.1),热电偶产生的热电势由两种金属的接触电势和单一导体的温差电势组成。通过将参考结点保持在已知温度并测量该电压,便可推断出检测结点的温度。数据采集部分则使用带有A/D 通道的单片机,在将随被测温度变化的电压或电流采集过来,进行A/D 转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来。热电偶的优点是工作温度范围非常宽,且体积小,但是它们也存在着输出电压小、容易遭受来自导线环路的噪声影响以及漂移较高的缺点,并且这种设计需要用到A/D 转换电路,感温电路比较麻烦。图 3.1热电偶电路图系统主要包括对A/D0809 的数据采集,自动手动工作方式检测,温度的显示等,这几项功能的信号通过输入输出电路经单片机处理。此外还有复位电路,晶振电路,启动电路等。故现场输入硬件有手动复位键、A/D 转换芯片,处理芯片为51 芯片,执行机构有4 位数码管、报警器等。方案二采用数字温度芯片DS18B20 测量温度,输出信号全数字化。便于单片机处理及控制,省去传统的测温方法的很多外围电路。且该芯片的物理化学性很稳定,它能用做工业测温元件,此元件线形较好。在0100 摄氏度时,最大线形偏差小于1 摄氏度。DS18B20 的最大特点之一采用了单总线的数据传输,由数字温度计DS18B20和微控制器AT89C51(52)构成的温度测量装置,它直接输出温度的数字信号,可直接与计算机连接。这样,测温系统的结构就比较简单,体积也不大。采用51 单片机控制,软件编程的自由度大,可通过编程实现各种各样的算术算法和逻辑控制,而且体积小,硬件实现简单,安装方便。既可以单独对多DS18B20控制工作,还可以与PC 机通信上传数据,另外AT89S51(52) 在工业控制上也有着广泛的应用,编程技术及外围功能电路的配合使用都很成熟。该系统利用AT89C51(52)芯片控制温度传感器DS18B20进行实时温度检测并显示,能够实现快速测量环境温度,并可以根据需要设定上下限报警温度。该系统扩展性非常强,它可以在设计中加入时钟芯片DS1302以获取时间数据,在数据处理同时显示时间,并可以利用AT24C16芯片作为存储器件,以此来对某些时间点的温度数据进行存储,利用键盘来进行调时和温度查询,获得的数据可以通过MAX232芯片与计算机的RS232接口进行串口通信,方便的采集和整理时间温度数据。系统框图如图1602显示器单片机芯片AT89S52晶振控制第一路温度检测电DS18B20第二路温度检测电DS18B20从以上两种方案,容易看出方案一的测温装置可测温度范围宽、体积小,但是线性误差较大。方案二的测温装置电路简单、精确度较高、实现方便、软件设计也比较简单,还可以进行各种功能的扩展,例如报警系统,时间显示等,故本次设计采用了方案二,并采用两路设计。五 系统设计总体思路设计方案及其总体设计框图单片机芯片AT89S521602显示器晶振控制第一路温度检测电DS18B20第二路温度检测电路DS18B20六 系统原理框图及工作原理分析1.温度计设计系统流程图系统设计原理:本次课程设计是基于单片机的数字温度计设计,在开始课程设计的时候我们要理解并掌握对单片机的开发,学会使用KEIL及Proteus, Multisim等仿真软件。根据设计任务要求选择好器件,编写好程序运行成功之后进行软件联调,验证系统是否正确。通过筛选,我们组选用单片机AT89S52作为主控制系统;用1602液晶显示模块芯片作为温度数据显示装置;智能温度传感器采用DS18B20器件作为测温电路主要组成部分。 开始进入缓冲区初始化复位DS18B20发跳过ROM命令温度转换命令延时复位DS18B20,跳过ROM命令读存储器命令读温度命令更新数据缓冲区将温度转换为BCD码2、数字温度计应用系统的硬件设计(1)、单片机小系统的基本组成及其选择单片机选型参考 AT89S51、AT89S52 :具备ISP下载功能 ,可以使用USBASP程序下载线或者并口下载 STC89C51、STC89C52:使用串口线+MAX232烧写程序。 AT89C51、AT89C52 :可以在最小系统板上使用,但需要另外用编程器烧写程序 本次课程设计选用AT89S52型号单片机进行操作。AT89S52是一个低功耗,高性能CMOS 8位单片机,片内含8k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS -51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S52可为许多嵌入式控制应用系统提供高性价比的解决方案。 AT89S52具有如下特点:40个引脚,8k Bytes Flash片内程序存储器,256 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个 全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。 AT89S52引脚图 此外,AT89S52设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断 系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。同时该芯片还具有PDIP、TQFP和PLCC等三 种封装形式,以适应不同产品的需求。 AT89S52引脚图 此外,AT89S52设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断 系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。同时该芯片还具有PDIP、TQFP和PLCC等三 种封装形式,以适应不同产品的需求。(2)电源 电源适配器供电:DC座(三个管脚) usb供电:(3) 晶振控制晶振控制电路结构原理如右图所示 (4)I/O口&接口 所有I/O用排针引出 串行通信口:P3.0,p3.1 ISP:p1.6,p1.7单片机共有4个8位双向并行I/O通道口,每位均有自己的锁存器、输出驱动器和输入缓冲器组成。这种结构,在数据输出时可以锁存,及输出新的数据以前,通道口上的原始数据不变。但对输入信息是不锁存的,所以从外部输入的信息必须保持到取数指令执行完为止。(5)主要芯片及其功能AT89S52(也可以用AT89S51)引脚说明AT89S52 是一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程AT89S52引脚图 DIP封装Flash存储器。使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完 全兼容。片上Flash允许程序存储器在系统可编程,亦适于 常规编程器。在单芯片上,拥有灵巧的8 位CPU 和在系统 可编程Flash,使得AT89S52为众多嵌入式控制应用系统提 供高灵活、超有效的解决方案。 AT89S52具有以下标准功能: 8k字节Flash,256字节RAM, 32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位 定时器/计数器,一个6向量2级中断结构,全双工串行口, 片内晶振及时钟电路。另外,AT89S52 可降至0Hz 静态逻 辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工 作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。P0 口:P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻 辑电平。对P0端口写“1”时,引脚用作高阻抗输入。 当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。在这种模式下, P0不具有内部上拉电阻。 在flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。程序校验 时,需要外部上拉电阻。P1 口:P1 口是一个具有内部上拉电阻的8 位双向I/O 口,p1 输出缓冲器能驱动4 个 TTL 逻辑电平。对P1 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入 口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。此外,P1.0和P1.1分别作定时器/计数器2的外部计数输入(P1.0/T2)和定时器/计数器2 的触发输入(P1.1/T2EX)。 在flash编程和校验时,P1口接收低8位地址字节。引脚号第二功能:P1.0 T2(定时器/计数器T2的外部计数输入),时钟输出P1.1 T2EX(定时器/计数器T2的捕捉/重载触发信号和方向控制)P1.5 MOSI(在系统编程用)P1.6 MISO(在系统编程用)P1.7 SCK(在系统编程用)P2 口:P2 口是一个具有内部上拉电阻的8 位双向I/O 口,P2 输出缓冲器能驱动AT89S52引脚图 PLCC封装4 个 TTL 逻辑电平。对P2 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入 口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。 在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX DPTR) 时,P2 口送出高八位地址。在这种应用中,P2 口使用很强的内部上拉发送1。在使用 8位地址(如MOVX RI)访问外部数据存储器时,P2口输出P2锁存器的内容。 在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。P3 口:P3 口是一个具有内部上拉电阻的8 位双向I/O 口,p3 输出缓冲器能驱动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 T1(定时/计数器1)P3.6 WR(外部数据存储器写选通)P3.7 RD(外部数据存储器读选通)此外,P3口还接收一些用于FLASH闪存编程和程序校验的控制信号。RST:复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将是单片机复位。ALE/PROG:当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲。对FLASH存储器编程期间,该引脚还用于输入编程脉冲(PROG)。如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。该位置位后,只有一条MOVX和MOVC指令才能将ALE激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE禁止位无效。PSEN:程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89S52由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲,在此期间,当访问外部数据存储器,将跳过两次PSEN信号。EA/VPP:外部访问允许,欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端必须保持低电平(接地)。需注意的是:如果加密位LB1被编程,复位时内部会锁存EA端状态。如EA端为高电平(接Vcc端),CPU则执行内部程序存储器的指令。FLASH存储器编程时,该引脚加上+12V的编程允许电源Vpp,当然这必须是该器件是使用12V编程电压Vpp。XTAL1:振荡器反相放大器和内部时钟发生电路的输入端。XTAL2:振荡器反相放大器的输出端。DS18B20DS18B20DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9-12位的数字值读数方式。 TO92封装的DS18B20的引脚排列见下图,其引脚功能描述见表3-3。(底视图)图3-3 DS18B20引脚图表3-3DS18B20详细引脚功能描述序号名称引脚功能描述1GND地信号2DQ数据输入/输出引脚。开漏单总线接口引脚。当被用着在寄生电源下,也可以向器件提供电源。3VDD可选择的VDD引脚。当工作于寄生电源时此引脚必须接地。DS18B20的性能特点如下:独特的单线接口仅需要一个端口引脚进行通信;多个DS18B20可以并联在惟一的三线上,实现多点组网功能;无须外部器件;可通过数据线供电,电压范围为3.05.5;零待机功耗;温度以或位数字;用户可定义报警设置;报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作;DS18B20采用3脚PR35封装或脚SOIC封装,其内部结构框图如图3-4所示。I/OC64位ROM和单线接口高速缓存存储器与控制逻辑温度传感器高温触发器TH低温触发器TL配置寄存器8位CRC发生器Vdd 图3-4 DS18B20内部结构64位ROM的结构开始8位是产品类型的编号,接着是每个器件的惟一的序号,共有48位,最后8位是前面56位的CRC检验码,这也是多个DS18B20可以采用一线进行通信的原因。温度报警触发器和,可通过软件写入户报警上下限。DS18B20温度传感器的内部存储器还包括一个高速暂存RAM和一个非易失性的可电擦除的EERAM。高速暂存RAM的结构为8字节的存储器,结构如图3-4所示。头2个字节包含测得的温度信息,第3和第4字节和的拷贝,是易失的,每次上电复位时被刷新。第5个字节,为配置寄存器,它的内容用于确定温度值的数字转换分辨率。DS18B20工作时寄存器中的分辨率转换为相应精度的温度数值。该字节各位的定义如图3-5所示。低5位一直为1,TM是工作模式位,用于设置DS18B20在工作模式还是在测试模式,DS18B20出厂时该位被设置为0,用户要去改动,R1和R0决定温度转换的精度位数,来设置分辨率.温度 LSB温度 MSBTH用户字节1TL用户字节2配置寄存器保留保留保留CRC图3-5 DS18B20字节定义DS18B20温度转换的时间比较长,而且分辨率越高,所需要的温度数据转换时间越长。因此,在实际应用中要将分辨率和转换时间权衡考虑。高速暂存RAM的第6、7、8字节保留未用,表现为全逻辑1。第9字节读出前面所有8字节的CRC码,可用来检验数据,从而保证通信数据的正确性。当DS18B20接收到温度转换命令后,开始启动转换。转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第1、2字节。单片机可以通过单线接口读出该数据,读数据时低位在先,高位在后,数据格式以0.0625LSB形式表示。当符号位S=0时,表示测得的温度值为正值,可以直接将二进制位转换为十进制;当符号位S=1时,表示测得的温度值为负值,要先将补码变成原码,再计算十进制数值。表2是一部分温度值对应的二进制温度数据。表3-4 DS18B20温度转换时间表R1R0分辨率/位温度最大转换时间/ms00993.750110187.510113751112750DS18B20完成温度转换后,就把测得的温度值与RAM中的TH、TL字节内容作比较。若TH或TTL,则将该器件内的报警标志位置位,并对主机发出的报警搜索命令作出响应。因此,可用多只DS18B20同时测量温度并进行报警搜索。在64位ROM的最高有效字节中存储有循环冗余检验码(CRC)。主机ROM的前56位来计算CRC值,并和存入DS18B20的CRC值作比较,以判断主机收到的ROM数据是否正确。DS18B20的测温原理是这这样的,器件中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器1;高温度系数晶振随温度变化其振荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入。器件中还有一个计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲进行计数进而完成温度测量。计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将55所对应的一个基数分别置入减法计数器1、温度寄存器中,计数器1和温度寄存器被预置在55所对应的一个基数值。 减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时,温度寄存器的值将加1,减法计数器1的预置将重新被装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器计数到0时,停止温度寄存器的累加,此时温度寄存器中的数值就是所测温度值。其输出用于修正减法计数器的预置值,只要计数器门仍未关闭就重复上述过程,直到温度寄存器值大致被测温度值。表3-5一部分温度对应值表温度/二进制表示十六进制表示+1250000 0111 1101 000007D0H+850000 0101 0101 00000550H+25.06250000 0001 1001 00000191H+10.1250000 0000 1010 000100A2H+0.50000 0000 0000 00100008H00000 0000 0000 10000000H-0.51111 1111 1111 0000FFF8H-10.1251111 1111 0101 1110FF5EH-25.06251111 1110 0110 1111FE6FH-551111 1100 1001 0000FC90H另外,由于DS18B20单线通信功能是分时完成的,它有严格的时隙概念,因此读写时序很重要。系统对DS18B20的各种操作按协议进行。操作协议为:初使化DS18B20(发复位脉冲)发ROM功能命令发存储器操作命令处理数据。DS18B20温度传感器与单片机的接口电路DS18B20可以采用两种方式供电,一种是采用电源供电方式,此时DS18B20的1脚接地,2脚作为信号线,3脚接电源。另一种是寄生电源供电方式,如图4 所示单片机端口接单线总线,为保证在有效的DS18B20时钟周期内提供足够的电流,可用一个MOSFET管来完成对总线的上拉。当DS18B20处于写存储器操作和温度A/D转换操作时,总线上必须有强的上拉,上拉开启时间最大为10us。采用寄生电源供电方式时VDD端接地。由于单线制只有一根线,因此发送接口必须是三态的。由于DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。该协议定义了几种信号的时序:初始化时序、读时序、写时序。所有时序都是将主机作为主设备,单总线器件作为从设备。而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。数据和命令的传输都是低位在先。DS18B20的复位时序 DS18B20的读时序对于DS18B20的读时序分为读0时序和读1时序两个过程。对于DS18B20的读时隙是从主机把单总线拉低之后,在15秒之内就得释放单总线,以让DS18B20把数据传输到单总线上。DS18B20在完成一个读时序过程,至少需要60us才能完成。DS18B20的写时序对于DS18B20的写时序仍然分为写0时序和写1时序两个过程。对于DS18B20写0时序和写1时序的要求不同,当要写0时序时,单总线要被拉低至少60us,保证DS18B20能够在15us到45us之间能够正确地采样IO总线上的“0”电平,当要写1时序时,单总线被拉低之后,在15us之内就得释放单总线。1602液晶显示屏调用子程序设置第二行显示位置与内容调用子程序设置第一行显示位置与内容 1602液晶显示流程图:延时初始化1602开始 工业字符型液晶,能够同时显示16x02即32个字符。(16列2行)注:为了表示的方便 ,后文皆以1表示高电平,0表示低电平。1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。目前市面上字符液晶绝大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。管脚功能LCD1602引脚图1602采用标准的16脚接口,其中:第1脚:VSS为电源地第2脚:VCC接5V电源正极第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会 产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。第4脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。第5脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。第6脚:E(或EN)端为使能(enable)端。第714脚:D0D7为8位双向数据端。第1516脚:空脚或背灯电源。15脚背光正极,16脚背光负极。七 系统软件程序的设计 1 软件流程框图:发DS18B20复位命令初始化 发跳过ROM命令调用显示子程序N发读取温度命令是否正确读取操作并进行校验NY初次上串YN字节是否读完N读出温度值,温度计算,处理显示,数据刷新YN校验是否正确发温度转换开始命令移入温度暂存器主程序流程图读温度流程图结束计算温度子程序将RAM中读取值进行BCD码的转换运算,并进行温度值正负的判定,其程序流程图如下图。开始温度零下?温度值取补码置“”标志计算小数位温度BCD值 计算整数位温度BCD值 结束置“+”标志NY 计算温度流程图显示数据刷新子程序主要是对显示缓冲器中的显示数据进行刷新操作,当最高显示位为0时将符号显示位移入下一位。程序流程图如下图。温度数据移入显示寄存器十位数0?百位数0?十位数显示符号百位数不显示百位数显示数据(不显示符号) 结束NNYY显示数据刷新流程图2 C语言程序 #include/ 包含头文件 /#include #include /浮点数处理#include #define uchar unsigned char#define uint unsigned intsbit LCD_Busy = P2 7;/ 定义LCM2402的测忙线(与LCM2402_DB0_DB7关联)/*LCD1602端口定义*/sbit LCD_E=P05;sbit RW=P06;sbit RS=P07;uint temp,temp2;float f_temp,f_temp2;sbit ds=P37; sbit ds2=P36;void delay(uint z) /延时z MS uint x,y; for(x=z;x0;x-) for(y=110;y0;y-); void LCD_TestBusy(void) P2 = 0xff;/设备读状态 RS = 0; RW = 1; LCD_E = 1; while(LCD_Busy);/等待LCM不忙 LCD_E = 0;/void write_com(uchar com) LCD_TestBusy(); P2 = com; RS = 0; RW = 0; LCD_E = 1; LCD_E = 0;void write_dat(uchar dat) LCD_TestBusy();P2 = dat; RS = 1; RW = 0; LCD_E = 1; LCD_E = 0; void print(uchar a,uchar *str)write_com(a | 0x80);while(*str != 0)write_dat(*str+);*str = 0;void print_sfm(uchar add,uint t)uchar a,b,c;a=t/100;b=t%100/10;c=t%100%10;write_com(0x80+0x40+add);write_dat(0x30+a);write_dat(0x30+b); write_dat(0x30+c); void init() RW=0; write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01); void dsreset(void)/DS18B20复位,初始化 uint i; ds=0; i=103; while(i0)i-; ds=1; i=4; while(i0)i-;bit tempreadbit(void) /读一位数据 uint i; bit dat; ds=0;i+; ds=1;i+;i+; dat=ds; i=8;while(i0)i-; return(dat);uchar tempread(void) /读一字节(8位) uchar i,j,dat; dat=0; for(i=1;i=8;i+) j=tempreadbit();dat=(j1); /读出的最低位在最前面,刚好一字节在dat里 return (dat); void tempwritebyte(uchar dat)/向DS18B20写一个字节数据 uint i; uchar j; bit testb; for(j=1;j1;if(testb) ds=0; i+;i+; ds=1; i=8;while(i0)i-; else ds=0; i=8;while(i0)i-; ds=1; i+;i+; void tempchange(void) / 开始获取温度并转换 dsreset(); delay(1); tempwritebyte(0xcc);/ 写跳过读ROM指令 tempwritebyte(0x44);/ 写温度转换指令uint get_temp() uchar a,b; dsreset(); delay(1); tempwritebyte(0xcc); tempwritebyte(0xbe); a=tempread();/ 读低八位 b=tempread();/ 读高八位if(b&0x80) / 判断正负temp=b+1; else temp=b; temp0)i-; ds2=1; i=4; while(i0)i-;bit tempreadbit2(void) /读一位数据 uint i; bit dat; ds2=0;i+; ds2=1;i+;i+; dat=ds2; i=8;while(i0)i-; return(dat);uchar tempread2(void) /读一字节(8位) uchar i,j,dat; dat=0; for(i=1;i=8;i+) j=tempreadbit2();dat=(j1); /读出的最低位在最前面,刚好一字节在dat里 return (dat); void tempwritebyte2(uchar dat)/向DS18B20写一个字节数据 uint i; uchar j; bit testb; for(j=1;j1;if(testb) ds2=0; i+;i+; ds2=1; i=8;while(i0)i-; else ds2=0; i=8;while(i0)i-; ds2=1; i+;i+; void tempchange2(void) / 开始获取温度并转换 dsreset2(); delay(1); tempwritebyte2(0xcc);/ 写跳过读ROM指令 tempwritebyte2(0x44);/ 写温度转换指令uint get_temp2() uchar a,b; dsreset2(); delay(1); tempwritebyte2(0xcc); tempwritebyte2(0xbe); a=tempread2();/ 读低八位 b=tempread2();/ 读高八位 temp2=b; temp2=8; / 两个字节组合成一个字 temp2=temp2|a; f_temp2=temp2*0.0625; / temp2=f_temp2*10+0.5; / f_temp2=f_temp2+0.05; return temp2;/返回temp是整型void main() uint i,j; init(); print(0x80,T is); /第一行地址 tempchange(); delay(1000); tempchange(); tempchange2(); delay(1000); tempchange2(); while(1) tempchange();i=get_temp(); print_sfm(4,i); tempchange2(); j= get_temp2(); print_sfm(10,j);八 系统仿真调试1、仿真器的介绍Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。运行Keil软件需要WIN98、NT、WIN2000、WINXP等操作系统。如果使用C语言编程,那么Keil几乎就是不二之选,即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。keil软件的开发运用 Keil C51单片机软件开发系统的整体结构 C51工具包的整体结构,uVision与Ishell分别是C51 for Windows和for Dos的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。然后分别由C51及C51编译器编译生成目标文件(.OBJ)。目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。使用独立的Keil仿真器时,注意事项 l 仿真器标配11.0592MHz的晶振,但用户可以在仿真器上的晶振插孔中换插其他频率的晶振。 l 仿真器上的复位按钮只复位仿真芯片,不复位目标系统。 l 仿真芯片的31脚(/EA)已接至高电平,所以仿真时只能使用片内ROM,不能使用片外ROM;但仿真器外引插针中的31脚并不与仿真芯片的31脚相连,故该仿真器仍可插入到扩展有外部ROM(其CPU的/EA引脚接至低电平)的目标系统中使用。 proteus软件的开发运用 Protues 软件介绍Proteus 是目前最好的模拟单片机外围器件的工具,它可以仿真51系列、AVR,PIC 等常用的MCU 及其外围电路。本文基于Proteus 6.9 和Keil uVision3 软件。Proteus 与其它单片机仿真软件不同的是,它不仅能仿真单片机CPU 的工作情况,也能仿真单片机外围电路或没有单片机参与的其它电路的工作情况。因此在仿真和程序调试时,关心的不再是某些语句执行时单片机寄存器和存储器内容的改变,而是从工程的角度直接看程序运行和电路工作的过程和结果。对于这样的仿真实验,从某种意义上讲,是弥补了实验和工程应用间脱节的矛盾和现象。 proteus 的工作过程运行proteus 的ISIS 程序后,进入该仿真软件的主界面。在工作前,要设置view 菜单下的捕捉对齐和system 下的颜色、图形界面大小等项目。通过工具栏中的p 命令,在pick devices 窗口中选择电路所需的元件,放置元件并调整其相对位置,元件参数设置,元器件间连线,编写程序;在source 菜单的Define code generation tools 菜单命令下,选择程序编译的工具、路径、扩展名

温馨提示

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

评论

0/150

提交评论