基于单片机数字温度计

上传人:痛*** 文档编号:169241931 上传时间:2022-11-14 格式:DOC 页数:52 大小:337KB
收藏 版权申诉 举报 下载
基于单片机数字温度计_第1页
第1页 / 共52页
基于单片机数字温度计_第2页
第2页 / 共52页
基于单片机数字温度计_第3页
第3页 / 共52页
资源描述:

《基于单片机数字温度计》由会员分享,可在线阅读,更多相关《基于单片机数字温度计(52页珍藏版)》请在装配图网上搜索。

1、毕业设计论文设计题目: 基于单片机的数字温度计设计 专 业: 应用电子技术 班 级: 学 号: 姓 名: 指导教师: 二0一0年七月十日目 录摘 要1第1章 绪论2第2章 系统方案论证与比较32.1 方案比较32.2 方案论证4第3章 硬件设计63.1主控芯片介绍63.2 复位电路83.3 时钟电路93.4 矩阵电路103.5 显示电路113.6 测温电路133.6.1DS18B20单线数字温度传感器133.6.2DS18B20工作原理133.6.3 DS18B20的性能特点143.6.4DS18B20内部结构143.7 整机工作原理16第4章 软件设计17第5章仿真与调试295.1仿真与调试

2、295.2调试与运行29结论30参考文献31附录1源程序32附录2元器件名细表45附录3仿真电路图46 摘 要温度的检测与控制是工业生产过程中比较典型的应用之一,随着传感器在生产和生活中的更加广泛的应用,利用新型单总线式数字温度传感器实现对温度的测试与控制得到更快的开发。在这里介绍了一种基于DS18B20和AT89C52单片机的温度测量及控制系统的硬件结构以及C语言程序设计,该系统设计和布线简单,结构紧凑,体积小,重量轻,抗干扰能力强,性价比高,扩展方便,在大型仓库,工厂,智能化建筑等领域的多点温度检测中有广阔的应用前景。关键词DS18B20;AT89C52;温度测量;控制第1章 绪论随着人们

3、生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的。温度测控技术也在各个领域应用越来越广泛,同时温度测量也被人们异常关注,一时间涌现出大量各式各样的测试温度仪器,这些仪器的原理到底是怎样的呢?说到底也是所以温度测控的范畴,其中数字温度计就是一个典型的例子,但人们对它的要求越来越高,要为现代人工作、科研、学习、生活提供更好的更方便的设施就需要从数字单片机技术入手,一切想着数字化,智能化控制方向发展。本设计所介绍的数字温度计与传统数字温度计相比,具有读数方便,测温范围广,测量准确,其输出采用数字显示,主要用于对测温比较准确的地方,或科研实验室使用,测温传感器使

4、用DS18B20,用LCD实现温度显示。第2章 系统方案论证与比较2.1 方案比较方案一:采用热电偶温差电路测温,温度检测部分可以采用低温热偶,热电偶由两个焊接在一起的异金属导线组成(热电偶的组成如图2-1),热电偶产生的热电势由两种金属的接触电势和单一导体的温差电势组成。通过将参考结点保持在已知温度并测量该电压,便可以推测出检测结点的温度。数据采集部分则使用带有A/D通道的单片机,在将随被温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据处理了,在显示电路上就可以将北侧温度显示出来。热电偶的优点是工作温度宽,且体积小,但是也存在输出电压小,容易遭受来自导线环路噪音的影响以

5、及漂移较高的缺点并且这种电路需要用到A/D转换电路,感温电路比较麻烦。数码管报警电路复位电路晶振电路单 片 机测温电路按键防抖动图2-1方案一框图方案二:采用数字温度芯片DS18B20测量温度,输出信号全数字化。便于单片机处理和控制,省去传统的测温方法的很多外围电路。且该芯片的物理化学性质稳定,它温用作工业测温元件,此元件线性较好。在0-100摄氏度时,最大线性偏差小于1摄氏度。DS18B20的最大特点之一是采用了单总数的数据传输,由数字温度计DS18B20和微控制器AT89C52构成温度测量装置,它直接输出温度的数字信号,可直接和计算机连接。这样温度系统的结构就比较简单,体积也不大。采用51

6、单片机控制软件编程的自由度大,而且体积小,硬件实现简单,安装方便。该系统利用AT89C51芯片控制温度传感器DS18B20进行温度的实时检测并显示,能够实现快速测量环境温度,并可以根据需要设置上限报警温度。主控电路时钟电路复位电路显示电路单片机测温电路电源电路图2-2方案二框图 从以上两总方案,容易看出方案一的温测装置可测温度范围广,体积小,但是单线性误差大。方案二的温测装置电路简单,精准度较高,实现方便,软件设计也比较简单,故本次设计采用方案二。显示电路可以采用两种方案:第一种是通过单片机控制译码器将译码器输出的数据送给数码管进行显示,但是要单独增加一个显示电路,使设计比较复杂。另一种是直接

7、运用LCD液晶显示,即直接通过单片对其进行显示以及数据处理较多;因此选择第二种方案。2.2 方案论证在日常生活及工农业生产中经常要检测温度,传统的方式是采用热电偶或热电阻。其硬件电路和软件调试比较复杂,制作成本较高。近年来随着科技的飞速发展,单片机的应用正不断走向深入。所以我们选用单片机作为核心部件进行逻辑控制及信号的产生,用单片机本生的优势节约成本,使电路更简单。根据题目的要求,本次设计采用由 AT89C51单片机及DS18B20温度传感器组成数据采集电路,加上显示电路和控制电路等,根据温度数据测量,通过控制电路对温度进行控制。本系统具有快速显示、测量准确、精度高、可调温控范围、硬件结构简单

8、等优点,是一种比较经济的温度控制系统。A/D转换器将温度传感器采集的温度模拟信号转化成数字信号,送入单片机的I/O数据接口,然后通过单片机读回I/O数据进行温度的判断,最后将数据送入显示译码单元。显示时,译码电路是将单片机输出的BCD码送入译码器,通过其译码后送入LCD显示电路。第3章 硬件设计3.1主控芯片介绍单片机AT89C2051具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要,很适合便携手持式产品的设计使用系统可用二节电池供电。AT89C51是一个低电压,高性能CMOS 8位单片机,片内含4k bytes的可反复擦写的Flash只读程序存储器和128 byt

9、es的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,内置功能强大的微型计算机的AT89C51提供了高性价比的解决方案。AT89C51是一个低功耗高性能单片机,40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,2个16位可编程定时计数器,2个全双工串行通信口,AT89C51可以按照常规方法进行编程,也可以在线编程。其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。图3-1 AT89C51单片机的管脚图3-1

10、AT89C51主要功能特性:兼容MCS-51指令系统4k可反复擦写(1000次)Flash ROM32个双向I/O口可编程UARL通道两个16位可编程定时/计数器全静态操作0-24MHz1个串行中断128x8bit内部RAM两个外部中断源共6个中断源可直接驱动LED3级加密位低功耗空闲和掉电模式软件设置睡眠和唤醒功能表3-1AT89C51单片机的管脚功能。VCC:供电电压。GND:接地。P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0

11、口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或1

12、6位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。P3口:P3口是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口也可作为AT89C51的一些特殊功能口,如下所示:P3口管脚 备选功能P3.0 RXD(串行输入口)P3.1 TXD(串行输出口)P3.2 /INT0

13、(外部中断0)P3.3 /INT1(外部中断1)P3.4 T0(计时器0外部输入)P3.5 T1(计时器1外部输入)P3.6 /WR(外部数据存储器写选通)P3.7 /RD(外部数据存储器读选通)P3口同时为闪烁编程和编程校验接收一些控制信号。RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部

14、数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH

15、编程期间,此引脚也用于施加12V编程电源(VPP)。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。3.2 复位电路为确保两点间温度控制系统中电路稳定可靠工作,复位电路是必不可少的一部分,复位电路的第一功能是上电复位。一般电路正常工作需要供电电源为5V5%,即4.755.25V。复位是单片机的初始化操作,其目的是使CPU及各专用寄存器处于一个确定的初始状态。如:把PC的内容初始化为0000H,使单片机从0000H单元开始执行程序。除了进入系统的正常初始化之外,当单片机系统在运行出错或操作错误使系统处于死锁状态时,为摆脱困境,也需要复位以使其恢复正常工

16、作状态。VCCC3R110KGNDRST图 3-2 复位电路RST端的外部复位电路有两种操作方式:上电自动复位和按键手动复位。按键手动复位有电平方式和脉冲方式两种,本系统设计采用上电复位,如图2-3所示。上电复位是直接将RST端通过电阻接高电平来实现单片机的复位。3.3 时钟电路单片机的时钟信号用来提供单片机内各种微操作的时间基准,时钟电路用于产生单片机工作所需要的时钟信号。单片机的时钟信号用来提供单片机片内各种微操作的时间基准,时钟信号通常用两种电路形式得到:内部振荡和外部振荡。本系统设计采用内部振荡方式,如图2-4所示。MCS-51单片机内部有一个用于构成振荡器的高增益反向放大器,引脚XT

17、ALl和XTAL2分别是此放大电器的输入端和输出端,由于采用内部方式时,电路简单,所得的时钟信号比较稳定,实际使用中常采用这种方式。图3-3时钟电路3.4 矩阵电路按照键盘与单片机的连接方式可分为独立式键盘与矩阵式键盘。矩阵式键盘是一种常见的输入装置,在日常生活中,矩阵式键盘在计数机、电话、手机、微波炉等各式电子产品上已经被广泛应用。在键盘中按键较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连接,而是通过一个按键加以连接。这样,一个端口就可以构成4x4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多

18、加一条线就可以构成20的键盘,而直接用端口线则只能多出一键。所以本次设计采用的是矩阵式键盘,确定矩阵式键盘上的何键被按下可以采用行扫描法。判断键盘中有无键按下:将全部行线置低电平,然后检测列线的状态。只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位低于电平线与4根行线相交叉的4个按键之中。若所有列线均为高电平,则按键中无键按下。判断闭合键所在位置:在确认有键按下后,即可进入确定具体闭合键的过程。其方法是:依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。在确定某根行线位置为低电平后,在逐行检测各列线的电平状态。若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合

19、的按键。图3-4矩阵键盘3.5 显示电路在单片机应用系统中,对于系统的运行状态和运行结果,通常都需要直观交互显示出来。单片机应用系统中最常用的显示器有LED和LCD两种。这两种显示器都可以显示数字、字符及系统的状态,LED和LED数码显示最为普遍,本设计采用的是更为环保的LCD显示器。字符型液晶显示模块是一种专门用于显示字母,数字,字符等点阵式LCD,目前常用的有16x1,16x2,20x2,40x2行等模块。点阵字符型LCD的接口特性点阵字符型LCD是专门用于显示数字,字母,图形符号及少量自定义字号的液晶显示器。这类显示器把LCD控制器,点阵驱动器,字符存储器,显示体及少量的组容元件等集成一

20、个液晶显示模块,鉴于字符型液晶显示模块目前在国际上已经规范化,其电特性及接口特性是统一的。因此,只要设计出一种字号的接口电路,在指令上稍加修改即可使用各种规格的字符型液晶显示模块。字符型液晶显示模块的控制器大多数为日立公司生产的HD44780及其兼容的控制器。点阵型液晶显示模块的基本特点(1)液晶显示屏是以若干5x8或5x11点阵块组成的显示字符群。每个点阵块为一个字符位,字符间距和行距都为一个点的宽度。(2)主控电路电路为HD44780-及其他公司的全兼容电路。因此从程序员的角度来说,LCD的显示接口与编程是面向HD44780的,只要了解HD44780的编程结构即可进行LCD的显示编程。(3

21、)内部具有字符发生器ROM,可显示192种字符。(4)具有64字节的自定义字符RAM,可以定义8个5x8点阵字符或4个5x11点阵字符。(5)具有64字节的数据显示RAM,共进行显示编程时使用。(6)标准接口,与M68HC08系列MCU容易接口。(7)模块结构紧凑,轻巧,装备容易。(8)单+5V电源供电。(9)低功耗,高可靠性。(10)HD44780的引脚与时序(11)HD44780的外部接口信号一般有16条,与MCU的接口有8条数据线DB0DB7和3条控制线RS,RW,E,HD44780的引脚功能如表3-2所示。表3-2 HD47780的引脚功能表引脚符号状态功能1Vss电源地2VDD电源正

22、,接+5V3VL液晶显示偏压4RS输入寄存器选择:为1时选择数据寄存器;为0时选择指令寄存器5RW输入R/W为读写选择线:为1时进行读操作,为0时进行写操作6E输入使能信号7DB0三态数据总线(LSB)8DB1三态数据总线9DB2三态数据总线10DB3三态数据总线11DB4三态数据总线12DB5三态数据总线13DB6三态数据总线14DB7三态数据总线15A背光源正极16K背光源负极控制器HD44780的信号功能控制如表3-33-3控制器HD44780的信号功能RSR/WE功能00下降沿写指令代码01高电平读忙标志和AC值10下降沿写数据11高电平读数据图3-5 LCD显示电路3.6 测温电路3

23、.6.1DS18B20单线数字温度传感器由DALLAS半导体公司生产的DS18B20型单线智能温度传感器,属于新一代适配微处理器的智能温度传感器,可广泛用于工业、民用、军事等领域的温度测量及控制仪器、测控系统和大型设备中。它具有体积小,接口方便,传输距离远等特点。产品的主要技术指标:(1)测量范围:-55+125;(2)测量精度:0.5;(3)反应时间500ms。3.6.2DS18B20工作原理温度传感器DS18B20将被测环境温度转化成带符号的数字信号(以十六位补码形式,占两个字节)在通过单片机发出命令送给显示器。它的输出脚I/O直接与单片机相连,并接一个上拉电阻,传感器采用外部电源供电。传

24、感器控制程序是按照DS18B20的通信协议编制。系统的工作是在程序控制下,完成对传感器的读写和对温度的显示。3.6.3 DS18B20的性能特点(1) 采用单总线专用技术,既可通过串行口线,也可通过其它I/O口线与微机接口,无须经过其它变换电路,直接输出被测温度值(9位二进制数,含符号位);(2) 测温范围为-55+125,测量分辨率为0.0625;(3) 内含64位经过激光修正的只读存储器ROM;(4) 适配各种单片机或系统机;(5) 用户可分别设定各路温度的上、下限;(6) 内含寄生电源。3.6.4DS18B20内部结构DS18B20内部结构主要由四部分组成:64位光刻ROM,温度传感器,

25、非挥发的温度报警触发器TH和TL,高速暂存器。DS18B20的管脚排列如图35所示。64位光刻ROM是出厂前被光刻好的,它可以看作是该DS18B20的地址序列号。不同的器件地址序列号不同。图3-6DS18B20引脚分布图表3-4 DS18B20引脚功能序号寄存器名称作 用序 号寄存器名称0温度低字节以16位补码形式存放4、5保留字节1、21温度高字节以16位补码形式存放6计数器余值2TH/用户字节1存放温度上限7计数器/3HL/用户字节2存放温度下限8CRC指 令约定代码操 作 说 明温度转换44H启动DS18B20进行温度转换读暂存器BEH读暂存器9个字节内容写暂存器4EH将数据写入暂存器的

26、TH、TL字节复制暂存器48H把暂存器的TH、TL字节写到E2RAM中重新调E2RAMB8H把E2RAM中的TH、TL字节写到暂存器TH、TL字节读电源供电方式B4H启动DS18B20发送电源供电方式的信号给主CPU表3-5 DS18B20信号功能以12位转化为例说明温度高低字节存放形式及计算:12位转化后得到的12位数据,存储在DS18B20的两个高低两个8位的RAM中,二进制中的前面5位是符号位。如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625才能得到实际温度。3.6.5 DS18B20

27、控制方法在硬件上,DS18B20与单片机的连接有两种方法,一种是VCC接外部电源,GND接地,I/O与单片机的I/O线相连;另一种是用寄生电源供电,此时UDD、GND接地,I/O接单片机I/O。无论是内部寄生电源还是外部供电,I/O口线要接5K左右的上拉电阻。此次设计选择的是前面一种控制。表32DS18B20有六条控制命令CPU对DS18B20的访问流程是:先对DS18B20初始化,再进行ROM操作命令,最后才能对存储器操作,数据操作。DS18B20每一步操作都要遵循严格的工作时序和通信协议。如主机控制DS18B20完成温度转换这一过程,根据DS18B20的通讯协议,须经三个步骤:每一次读写之

28、前都要对DS18B20进行复位,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操做。R2 4.7KP3.7VCCDQGND+5VP3.7GND图3-7测温电路3.7 整机工作原理当接通电源以后,温度传感器正常工作,温度传感器将根据被测温度的不同来采集不同的数据,然后将所采集到的数据传送到比较器到中,然后由比较器将采集到的数据转变成高低电平,在送入单片机,单片机通过控制各个引脚电平的高低来来控制温度的显示输出,当温度显示TH为110C,TL为20C,通过矩阵键盘电路可以调节TH和TL的初始值,并且还可以调节当前的显示的温度值,按一次键盘TH和TL的值自加一或

29、自减一,当减到低于20C或高于110时,将自动返回初始值。整机电路图如图3-8所示图3-8整机电路图第4章 软件设计整个系统的功能是由硬件电路配合软件来实现的,当硬件基本定型的时候软件也基本定下拉了,从软件的功能不同,可以分为两的类:一是主程序,它是整个软件的核心,专门用来协调各个执行模块和操作者的联系。二是子程序,它是用来完成各种实质性的工作的,如测量、计算、显示、通讯等。每一个执行软件就是一个小的执行模块,这里将每一个模块一一列出来,并为每个执行模块进行功能定义和接口定义。各执行模块规划好以后,就可以规划监控软件了。首先要根据系统的总体功能选择一种最合适的主程序结构,然后根据实时性的条件,

30、合理安排监控软件和执行软件之间的调度关系。4.1主程序模块主程序主要完成硬件初始化,子程序调用等功能开始设置定时/计数器初值从DS18B20中读取数据等待数据拆字显示温度 图4-1主程序流程图主程序函数如下:Void main() setds18b20(TH,TL,RS); /设置上下限报警温度和分辨率 delay(100); while(1) pt=ReadTemperature(); temper_LCD(); user_temper_LCD(user_temper);alarm_LCD(TH,TL); LCD_Initial();LCD_Print(0,0,TempBuffer0);LC

31、D_Print(0,1,TempBuffer1); scan_full(); /看有无键按下if(key_ok) /如有键按下则看到底哪个键按下key_value=key_scan(); /调用键盘扫描程序key_command(key_value); /键盘命令处理函数 等待50us读入DQ的状态等待200usDQ置1初始化结束DS18B20初始化DQ置1D0清零,发复位脉冲延时600usDQ置1图4-2 DS18B20初始化流程图DS18B20初始化函数void Init_DS18B20(void)unsigned char x=0;DQ = 0; /单片机将DQ拉低delay_18B20

32、(80); /精确延时 大于 480usDQ = 1; /拉高总线delay_18B20(14);x=DQ;delay_18B20(20);/*ds18b20读一个字节*/unsigned char ReadOneChar(void)unsigned char i=0;unsigned char dat = 0;for (i=8;i0;i-)DQ = 0; / 给脉冲信号dat=1;DQ = 1; / 给脉冲信号if(DQ)dat|=0x80;delay_18B20(4);return(dat);温度测量的结果以二进补码形式来存放,分辨力12位的测量结果用带5个符号的16位二进制格式来表示,高

33、低8位分别存储在两个RAM单元中,前面5位S代表符号位,DS18B20函数的作用就是完成这一过程的 8位数据送完否?DS18B20写入结束延时15usDQ置1设置为恢复状态写入一位数据延时15usDQ清零,将DQ总线电平拉低设置串行位数为8DS18B20写开始N 图4-3DS18B20写字节流程图DS18B20写函数void setds18b20(unsigned char TH,unsigned char TL,unsigned char RS)Init_DS18B20();WriteOneChar(0xCC); /跳过读序号列号的操作WriteOneChar(0x4E);WriteOneC

34、har(TH); /写入想设定的温度报警上限WriteOneChar(TL); /写入想设定的温度报警下限WriteOneChar(RS); LCD上电时,都必须按照一定的时序对LCD进行初始化操作,主要任务是设置LCD的工作方式,显示状态,清屏,输入方式,光标位置等。LCD初始化程序void LCD_Initial()LcdEn=0;LCD_Write(LCD_COMMAND,0x38); /8位数据端口LCD_Write(LCD_COMMAND,0x38);LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR); /开启显示, 无光标LCD_Write(LCD_COM

35、MAND,LCD_CLEAR_SCREEN); /清屏LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE); /AC递增, 画面不动/*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+;void LCD_Print(unsigned

36、char x, unsigned char y, unsigned char *str)GotoXY(x,y);Print(str);功能设置命令调用写入指令到LCD子程序开始子程序返回调用写入指令到LCD子程调用写入指令到LCD子程设置显示状态清屏设定工作方式调用写入指令到LCD子程设置输入方式图4-3LCD初始化流程图要想把显示字符显示在某一指定位置,就必须先将显示数据写在相应的DDRAM地址中,写数据操作函数就是完成这一过程的函数开始当RS=1时,选择数据寄存器把显示数据送至P0口读/写标志位R/W=0时,进行写操作LCD使能信号E至高电平后再过两个时钟周期至低电平,产生一个下降沿信号,

37、使LCD写入显示数据图4-4LCD写数据流程图void LCD_Wait(void) LcdRs=0; /RS=0表示选择指令寄存器LcdRw=1;_nop_();/RW=1表示进行读操作LcdEn=1;_nop_(); /在EN为下降沿的时候锁存据 while(DBPort&0x80) LcdEn=0; _nop_(); _nop_() LcdEn=1;_nop_(); _nop_(); LcdEn=0;LCD要能读写数据,必须对LCD进行读写操作,读操作时,先设置RS和R/W状态,在设置E信号为高,这时从数据口读取数据,写操作时,使能E信号下降沿有效读/写标志位R/W=0时,进行写操作当R

38、S=0时,选择指令寄存器开始子程序返回调用延时子程序LCD使能信号E至高电平后再过两个时钟周期至低电平,产生一个下降沿信号,往LCD写入指令代码,LCD执行命令把指令数据送至P0口图4-5LCD读写操作流程图 LCD写指令函数#define LCD_COMMAND#define LCD_DATA#define LCD_CLEAR_SCREEN / 清屏#define LCD_HOMING / 光标返回原点void LCD_Write(bit style, unsigned char input)LcdEn=0;LcdRs=style;LcdRw=0;_nop_();DBPort=input;_

39、nop_(); LcdEn=1;_nop_(); LcdEn=0;_nop_();LCD_Wait();/设置显示模式*#define LCD_SHOW/显示开#define LCD_HIDE/显示关 #define LCD_CURSOR/显示光标#define LCD_NO_CURSOR/无光标 #define LCD_FLASH/光标闪动#define LCD_NO_FLASH/光标不闪动void LCD_SetDisplay(unsigned char DisplayMode)LCD_Write(LCD_COMMAND, 0x08|DisplayMode);#define LCD_AC_

40、UP#define LCD_AC_DOWN#define LCD_MOVE/ 画面可平移#define LCD_NO_MOVEvoid LCD_SetInput(unsigned char InputMode) LCD_Write(LCD_COMMAND, 0x04|InputMode);最常见的矩阵式键盘按键识别方法是编程扫描,这里采用的是列扫描方法。开始按键是否按下?NO YES延时按键是否按下?NO YES执行语句返回图4-5矩阵键盘流程图键盘扫描函数sfr key_port=0x90; /定义P1口为键盘扫描口/P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.数据端口b

41、it key_ok=0; /有键按下的标志/*延时子程序*调用一次用时18微秒,t每加1,用时增加6微秒*/void delay(unsigned char t) while(t-);unsigned char r_left(unsigned char x) x=1; x+; return(x);/*粗判有无键按下*有键按下则将key_ok置1*/void scan_full(void)unsigned char temp;key_port=0xf0; temp=P1;if(temp!=0xf0)key_ok=1;else key_ok=0;/*键盘扫描程序*功能:返回键值,当无键按下时,返回

42、0*/ unsigned char key_scan(void) unsigned char temp,count=0x01,key_value; unsigned char x_scan=0xfe,y_scan=0xef; unsigned char i,j,y; while(1) scan_full(); /粗判是否有键按下 if(key_ok=1) key_ok=0; delay(200); /延时去抖动 scan_full(); /再次粗判是否有键按下 if(key_ok=1) for(i=0;i4;i+) key_port=x_scan; for(j=0;j4;j+) temp=ke

43、y_port; temp=temp&0xf0; y=y_scan&0xf0; if(temp=y) while(key_ok!=0) /等待按键松开 scan_full(); key_value=count; return(key_value); else count+; y_scan=r_left(y_scan); y_scan=0xef; x_scan=r_left(x_scan); return(key_value); 第5章仿真与调试5.1仿真与调试此设计的电路在Proteus软件中进行仿真,运行 Proteus 的 ISIS 程序后,进入该仿真软件的主界面。主界面由菜单栏、工具栏、预

44、览窗口、元件选择按钮、元件列表窗口、原理图绘制窗口和仿真进程控制按钮组成(如图7-2所示)。通过元件选择按钮 P (从库中选择元件命令) 命令,在弹出的 Pick Devices 窗口中选择电路所需的元件,放置元件并调整其相对位置,对元件参数设置及元器件间连线,完成单片机系统的硬件原理图绘制。仿真电路图见附录35.2调试与运行(1)首先启动KEIL C51软件的集成开发环境,从桌面上双击uVision图标以启动软件。(2)建立工程文件。通常单片机应用系统软件包含多个源程序文件,KEIL C51使用工程这一概念,将这些参数设置和所需的所有文件都加在一个工程中。因此,需要建立一个工程文件,并为这个

45、工程选择CPU,确定编译,汇编,连接的参数,指定调试的方式。(3)建立并添加源文件。使用菜单或者单击工具栏的新建文件按钮,出现文本便捷窗口,在该窗口中输入新编制的源程序并保存该文件。然后,我打开已经画好的仿真图,再将生成的HEX文件导入单片机里,点击开始按钮,电路正常工作,并且能够实现预先设想的所有功能,而且效果很好,从而验证了我的程序的正确性。结论在我的毕业设计中,主要是以AT89C51单片机为核心的,对温度的检测与显示进行了简单的设计与阐述。本次设计可以说是软硬结合,又以硬件为主。当今科技发展迅速,单片机嵌入式开发有着光明的前景。由于单片机经济实用、开发简便等特点依然在工业控制、家电等领域

46、占据了广泛的市场。所以我选择这样的毕业设计课题,并且能通过此次设计来提高自己软件编制和硬件电路设计的能力。在我完成这次毕业设计的过程中,当看到自己将专业知识用于解决实际的问题时,那份成就感和喜悦感是难以形容的。但是,在实际的编程以及调试程序过程中,我发现自己应该学的太多太多。光靠自己在书本上所学过的这点知识是远远不够的,真正地认识到了工作就是学习的道理。由于我以前对51单片机的C语言没有认真钻研过,所以感觉毕业设计的任务十分紧迫。通过对本系统的设计,我学习到了硬件开发和软件开发的基本流程并有了一定的驾御此开发过程的能力。编程的过程中,虽然不乏辛苦,但更多的是程序调试成功后的喜悦。总之,这次毕业

47、设计对我来说是一次比较全面的、富有创造性和探索性的锻炼,完成了我选题时的心愿。令我深有感触,对于我今后的学习、工作和生活都将是受益非浅的!参考文献1 王静霞.单片机应用技术.电子工业出版社,20092 何立民.单片机高等教程.北京航空航天大学出版社,2000 3 雄建云.Protel99 se EDA技术及应用.北京机械工业出版社,20074 华永平,陈松编著.电子线路课程设计.东南大学出版社5 林春方电子线路学习指导与实训.北京电子工业出版社,20046 杨宝清,宋文贵主编.实用电路手册.机械工业出版社 20027 张存礼,韩爱娟主编.电子技术综合实训.北京师范大学出版社附录1源程序/#in

48、clude /用AT89C51时就用这个头文件#include /用华邦W78E58B时必须用这个头文件sbit DQ = P37;/定义DQ引脚为P3.7/*ds18b20延迟子函数(晶振12MHz )*/ /*DS18B20对时间要求很严,但只能长不能短*在11.0592M下也行,因为时间长些*/void delay_18B20(unsigned int i)while(i-);/*ds18b20初始化函数*/void Init_DS18B20(void) unsigned char x=0; DQ = 0; /单片机将DQ拉低 delay_18B20(80); /精确延时 大于 480u

49、s DQ = 1; /拉高总线 delay_18B20(14); x=DQ; delay_18B20(20);/*ds18b20读一个字节*/ unsigned char ReadOneChar(void)unsigned char i=0;unsigned char dat = 0;for (i=8;i0;i-) DQ = 0; /给脉冲信号 dat=1; DQ = 1; /给脉冲信号 if(DQ) dat|=0x80; delay_18B20(4); return(dat);/*ds18b20写一个字节*/ void WriteOneChar(unsigned char dat) unsi

50、gned char i=0; for (i=8; i0; i-) DQ = 0; DQ = dat&0x01; delay_18B20(5); DQ = 1; dat=1; /*设置DS18B20工作状态*TH和TL分别是上限报警和下限报警温度,RS是显示分辨率的设置*/void setds18b20(unsigned char TH,unsigned char TL,unsigned char RS)Init_DS18B20();WriteOneChar(0xCC); /跳过读序号列号的操作WriteOneChar(0x4E); WriteOneChar(TH);/写入想设定的温度报警上限W

51、riteOneChar(TL);/写入想设定的温度报警下限WriteOneChar(RS);/写配置寄存器,格式为0 R1 R0 1,1 1 1 1/R1R0=00分辨率娄9位,R1R0=11分辨率为12位/*读取ds18b20当前温度*/unsigned char *ReadTemperature(void)unsigned char tt2;Init_DS18B20();WriteOneChar(0xCC); / 跳过读序号列号的操作WriteOneChar(0x44); / 启动温度转换delay_18B20(70); / 温度转化要一段时间Init_DS18B20();WriteOne

52、Char(0xCC); /跳过读序号列号的操作WriteOneChar(0xBE); /读取温度寄存器等(共可读9个寄存器) 前两个就是温度/delay_18B20(70);tt0=ReadOneChar(); /读取温度值低位tt1=ReadOneChar(); /读取温度值高位return(tt);/#include /用AT89C51时就用这个头文件#include /用华邦W78E58B时必须用这个头文件/#include /#include /#include /#include /#include #include /测温头文件#include /液晶显示头文件#include /键盘扫描头文件sbit alarm=P26;/报警信号/sbit DQ = P37;/定义DQ引脚为P3.7unsigned char key_value; /存放键盘扫描值bit up_one,down_one; /加1和减1标志bit alarm_up_flag,alarm_down_flag;/上限报警和下限报警设置标志bit set_temper_flag;/设置控制标志温度标志bit alarm_switch;/报警开关unsigned char user_temper; /用户标定温度unsigned char TH=110,TL=-20,RS=0x3f; /上

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