收藏 分享(赏)

18B20温度采集LCD12864显示.doc

上传人:weiwoduzun 文档编号:2845148 上传时间:2018-09-28 格式:DOC 页数:20 大小:1.58MB
下载 相关 举报
18B20温度采集LCD12864显示.doc_第1页
第1页 / 共20页
18B20温度采集LCD12864显示.doc_第2页
第2页 / 共20页
18B20温度采集LCD12864显示.doc_第3页
第3页 / 共20页
18B20温度采集LCD12864显示.doc_第4页
第4页 / 共20页
18B20温度采集LCD12864显示.doc_第5页
第5页 / 共20页
点击查看更多>>
资源描述

1、 基于单片机 STC89C51 的温度显示系统的设计引言随着电子技术,特别是随大规模集成电路的产生而出现的微型计算机技术的飞速发展,人类生活发生了根本性的改变。如果说微型计算机的出现使现代科学研究得到了质的飞跃,那么可以毫不夸张地说,单片机技术的出现则是给现代工业测控领域带来了一次新的技术革命。目前,单片机以其体积小、重量轻、抗干扰能力强、对环境要求不高、高可靠性、高性能价格比、开发较为容易,在工业控制系统、数据采集系统、智能化仪器仪表、办公自动化等诸多领域得到极为广泛的应用,并已走人家庭,从洗衣机、微波炉到音响、汽车,到处都可见到单片机的踪影。因此,单片机技术开发和应用水平已逐步成为一个国家

2、工业发展水平的标志之一。本课题研究的内容就是以单片机为主要控制元件,通过温度传感器 DS18B20 实现对温度的测量,并通过LCD12864 直接显示所测温度。1、设计任务用温度传感器 DS18b20 检测空气中的温度,STC89C51 采集 DS18B20 的数据并通过 LCD12864显示实时温度。2、系统硬件设计2.1 系统方框图见图2-1.温度传感器L C D 1 2 8 6 4 显示温度值单片机S T C 8 9 C 5 1图 3-1 系统方框图2.2 各模块方案的选择2.2.1 温度检测方案选择方案一:采用热电偶或热敏电阻作感温元件,但热电偶需冷端补偿,电路设计复杂,热敏电阻虽然精

3、度较高,但需要标准稳定电阻匹配才能使用,而且重复性、可靠性都比较差。 方案二:采用集成温度传感器 DS18B20 。该传感器结构简单,不需外接电路,数据传输采用 one-wire。总线,可用一根 I/O 数据线即供电又传输数据,在-10 -+85范围内精度为0.5,分辨率较高,重复性和可靠性好。故采用方案二。12.2.2 显示模块方案的选择方案一:采用数码管显示。数码管亮度高、体积小、重量轻,但其显示信息简单、有限,在本题目中应用受到很大的限制。 方案二:采用液晶显示。液晶显示功耗低,轻便防震。采用液晶显示界面友好清晰,操作方便,显示信息丰富。故采用方案二2.3 单片机控制系统单片机作为整个硬

4、件系统的核心,它既是协调整机工作的控制器,又是数据处理器。它由单片机、时钟电路、复位电路等组成。为了简化电路、降低成本、提高可靠性,本系统采用STC89C51 作为主控制器,它是一款与 MCS51 完全兼容且内部自带有 4KB 的 Flash 存储器及 256KB RAM 单元的芯片,因此可以不需另外扩展 EEPROM 及静态 RAM 就可以实现所需功能。单片机最小系统是软硬件系统连接的桥梁。它包括: 单片机 89C51,LCD12864 液晶模块 ,DS18B20 温度采集模块。单片机的时钟信号用来提供单片机片内各种微操作的时间基准,时钟信号通常用两种电路形式得到:内部振荡和外部振荡。MCS

5、-51 单片机内部有一个用于构成振荡器的高增益反向放大器,引脚 XTALl 和 XTAL2 分别是此放大电器的输入端和输出端,由于采用内部方式时,电路简单,所得的时钟信号比较稳定,实际使用中常采用这种方式,如图所示在其外接晶体振荡器(简称晶振)或陶瓷谐振器就构成了内部振荡方式,片内高增益反向放大器与作为反馈元件的片外石英晶体或陶瓷谐振器一起可构成一个自激振荡器并产生振荡时钟脉冲。下图中外接晶体以及电容 C2 和 C1 构成并联谐振电路,它们起稳定振荡频率、快速起振的作用,其值均为 30P 左右,晶振频率选 6MHz。为了初始化单片机内部的某些特殊功能寄存器,必须采用复位的方式,复位后可使 CP

6、U 及系统各部件处于确定的初始状态,并从初始状态开始正常工作。单片机的复位是靠外电路来实现的,在正常运行情况下,只要 RST 引脚上出现两个机器周期时间以上的高电平,即可引起系统复位,但如果 RST 引脚上持续为高电平,单片机就处于循环复位状态。复位操作有两种情况,即上电复位和手动(开关)复位。本系统采用上电复位方式。图 2-2 中 R9 和 Cl 组成上电复位电路,其值 R取为 1K, C 取为 22F.2图 3-2 单片机最小系统2.4 温度检测模块由 DALLAS 半导体公司生产的 DS18B20 型单线智能温度传感器,属于新一代适配微处理器的智能温度传感器,可广泛用于工业、民用、军事等

7、领域的温度测量及控制仪器、测控系统和大型设备中。它具有体积小,接口方便,传输距离远等特点。 DS18B20 性能特点 2.4.1 DS18B20 的性能特点:采用单总线专用技术,既可通过串行口线,也可通过其它 I/O 口线与微机接口,无须经过其它变换电路,直接输出被测温度值(9 位二进制数,含符号位)。测温范围为-55-+125,测量分辨率为 0.0625。内含 64 位经过激光修正的只读存储器 ROM。适配各种单片机或系统机。用户可分别设定各路温度的上、下限。内含寄生电源。 2.4.2 DS18B20 内部结构 DS18B20 内部结构主要由四部分组成:64 位光刻 ROM,温度传感器,非挥

8、发的温度报警触发器TH 和 TL,高速暂存器。64 位光刻 ROM 是出厂前被光刻好的,它可以看作是该 DS18B20 的地址序列号。64 位 ROM 结构图如图 2 所示。不同的器件地址序列号不同。 DS18B20 的管脚排列如图 5-1 所示。3图 3-4-2 DS18B20 引脚分布图2.4.3 DS18B20 高速暂存器DS18B20 高速暂存器共 9 个存储单元,如表所示:序号 寄存器名称 作 用 序号 寄存器名称 0 温度低字节 4 配置寄存器 1 温度高字节 以 16 位补码形式存放 5、6、7 保留 2 TH/用户字节 1 存放温度上限 8 CRC 3 HL/用户字节 2 存放

9、温度下限 表 3-4-3 DS18B20 高速暂存器以 12 位转化为例说明温度高低字节存放形式及计算:12 位转化后得到的 12 位数据,存储在 18B20 的两个高低两个 8 位的 RAM 中,二进制中的前面 5 位是符号位。如果测得的温度大于0,这 5 位为 0,只要将测到的数值乘于 0.0625 即可得到实际温度;如果温度小于 0,这 5 位为1,测到的数值需要取反加 1 再乘于 0.0625 才能得到实际温度。 高 8 位 S S S S S 26 25 24 低 8 位 23 22 21 20 2-1 2-2 2-3 2-4 2.4.4 DS18B20 控制方法 DS18B20 有

10、六条控制命令,如表所示: 指 令 约定代码 操 作 说 明 温度转换 44H 启动 DS18B20 进行温度转换 读暂存器 BEH 读暂存器 9 个字节内容 写暂存器 4EH 将数据写入暂存器的 TH、TL 字节 复制暂存器 48H 把暂存器的 TH、TL 字节写到 E2RAM 中 重新调 E2RAM B8H 把 E2RAM 中的 TH、TL 字节写到暂存器 TH、TL 字节 读电源供电方式 B4H 启动 DS18B20 发送电源供电方式的信号给主 CPU 表 3-4-4 DS18B20 控制命令2.4.5 DS18B20 的通信协议DS18B20 器件要求采用严格的通信协议,以保证数据的完整

11、性。该协议定义了几种信号类型:4复位脉冲,应答脉冲时隙;写 0,写 1 时隙;读 0,读 1 时隙。与 DS18B20 的通信,是通过操作时隙完成单总线上的数据传输。发送所有的命令和数据时,都是字节的低位在前,高位在后。 复位和应答脉冲时隙每个通信周期起始于微控制器发出的复位脉冲,其后紧跟 DS18B20 发出的应答脉冲,在写时隙期间,主机向 DS18B20 器件写入数据,而在读时隙期间,主机读入来自 DS18B20 的数据。在每一个时隙,总线只能传输一位数据。时序图见图图3-4-5-1 DS18B20 复位时序图 写时隙当主机将单总线 DQ 从逻辑高拉到逻辑低时,即启动一个写时隙,所有的写时

12、隙必须在60120us 完成,且在每个循环之间至少需要 1us 的恢复时间。写 0 和写 1 时隙如图所示。在写0 时隙期间,微控制器在整个时隙中将总线拉低;而写 1 时隙期间,微控制器将总线拉低,然后在时隙起始后 15us 之释放总线。3-4-5-2 DS18B20 写时序图 读时隙8B20 器件仅在主机发出读时隙时,才向主机传输数据。所以在主机发出读数据命令后,必须马上产生读时隙,以便 DS18B20 能够传输数据。所有的读时隙至少需要 60us,且在两次独立的读时隙之间,至少需要 1us 的恢复时间。每个读时隙都由主机发起,至少拉低总线 1us。在主机发起读时隙之后,DS18B20 器件

13、才开始在总线上发送 0 或 1,若 DS18B20 发送 1,则保持总线为高电平。若发送为 0,则拉低总线当发送 0 时,DS18B20 在该时隙结束后,释放总线,由上拉电阻将总线拉回至高电平状态。DS18B20 发出的数据,在起始时隙之后保持有效时间为 15us。因而主机在5读时隙期间,必须释放总线。并且在时隙起始后的 15us 之内采样总线的状态。3-4-5-3 DS18B20 写读序图2.4.6 DS18B20 的电路采用集成温度传感器 DS18B20 。该传感器结构简单,不需外接电路,数据传输采用 one-wire。总线,可用一根 I/O 数据线即供电又传输数据,在-10 -+85范围

14、内精度为0.5,分辨率较高,重复性和可靠性好。图 3-3 DS18B20 电路DS18B20 为单总线器件,数据和命令在一根线上传输,先向温度传感器写入转换命令,延长一段时间,再发送读命令,将温度值读回单片机,单片机进行数据处理,送显示。转换关系为:T=temperature*6.25T 为单片机要显示的温度,temperature 为从 DS18B20 读回的数字量。图中 TEM 接单片机P06 口2.5 液晶显示模块LCD12864 是一款具有 4 位/8 位并行、2 线或 3 线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为 12864, 内置

15、 8192 个 16*16 点汉字,和 128 个 16*8 点 ASCII 字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。可以显示 84 行 1616 点阵的汉字. 也可完成图形显示.低电压低功耗是其又一显著特点。由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶6模块。2.5.1 模块接口说明管脚号 名称 LEVEL 功能1 VSS 0V 电源地2 VDD +5V 电源正(3.0V-5.5V)3 VO - 对比度(亮度)调整4 CS H/L 模组片选端,高电平

16、有效5 SID H/L 串行数据输入端6 CLK H/L 串行同步时钟:上升沿时读取 SID 数据15 PSB L L:端口方式17 /RESET H/L 复位端19 A VDD 背光源电压+5V20 K VSS 背光源负端 0V图 2.5.1 液晶模块借口说明2.5.2 并行接口说明图 2.5.2 液晶并行借口说明72.5.2 控制器接口信号说明 RS,R/W 的配合选择决定控制界面的四种模式 表 2.5.2 控制界面模式BF 忙标志位字形产生 ROM显示数据 RAM字形产生 RAM地址计数器 AC82.5.3 指令说明2.5.3 液晶指令说明2.5.4 读写时序图数据传输过程9时序图串口读

17、写时序102.5.5 液晶电路图D0D7 接单片机 P2 口,RES 接高电平,RS、RW、LCD-E 分别接 P03,P04,P05 口。图 2.5.5 液晶电路接口3、系统软件设计3.1 C51 语言的优缺点现在有四种语言支持8051系列单片机编程,即汇编、PL/M,C和BASIC,在开发中最常用的是汇编语言,但随着程序复杂程度的提高,汇编语言逐渐暴露了它的不足,BASIC适合于初学者或要求编程简单而对编程效率和运行速度不高的场合。PL/hi对8051系列单片机来讲,不支持复杂的算术运算和浮点变量,无丰富的库函数支持。C语言是一种源于编写UNIX 操作系统的语言,是一种结构化语言,可产生紧

18、凑代码。为了更好地实现对单片机的开发,C51 应运而生。每个不同公司开发的C51 不尽相同,本系统采用的是Keil Elektronik Gmbh 开发的KeiluVision 3 工具软件来进行系统软件编写和调试的。在嵌入式系统中,相对于汇编语言,C 语言作为一种高级语言主要存在两个不足:一,生成的可执行代码冗长,效率不高。对于这一点,随着处理芯片运算速度的提高、集成ROM 的扩大,特别编译系统的不断优化,冗长已经不再是问题。这也是C 在嵌入式系统中逐渐成为主流编程语11言的主要原因之一。二,C 生成的可执行代码在时序上不容易控制,比如本系统中要实现的时序控制。一般的解决方案是在C 程序中嵌

19、入汇编语句,但其实只要充分挖掘C 的潜力,在时序要求严格的场合完全可以用C 语言实现。具体方法就是阅读开发环境给我们提供的反汇编代码。反汇编代码一目了然的反映了微控器的运行时序,然后根据反汇编代码修改C 源程序。3.2 程序设计3.2.1 程序流程图开始液晶初始化显示 “ 温度 ”D S 1 8 B 2 0 初始化单片机获取温数据并处理液晶显示温度值3.2.2 液晶显示流程图程图上电初始化功能设定控制字显示开关控制字清屏控制字进入设定点控制字设定进入点显示数据123.2.3 温度传感器流程图程图上电初始化数据口复位延时单片机拉低总线延时忽略 R O M 指令数据处理释放总线延时 , 传感器发出

20、存在脉冲读暂存器指令送 L C D 显示4、仿真与调试首先调试液晶程序。单片机STC89C51的P2口接液晶数据口,根据液晶手册,将RS1和RE借口接高电平;RS、R/W、EN接口接单片机P03,P04,P05口,单独调试液晶程序,将hex文件下载到单片机,看看是否在液晶第一排是否显示“温度”,在第三排是否显示“液晶温度显示”然后根据DS18B20的手册书写程序,将液晶程序设为头文件,若DS18B20程序无误,则在液晶的第一排首位开始会显示“温度”,第二排的第三个字符开始会显示温度值XX,第三排不显示,第四排首位开始显示“液晶温度显示”。如果程序有误,则再看看芯片资料和程序的书写是否有出入,如

21、有错误则再更正,直至显示正确为止。5、结论根据题目要求,我们完成了液晶温度显示系统的设计,分别写出了液晶12864的程序和DS18B20的程序,完成了温度检测模块、液晶显示模块的设计,达到了题目的功能要求。在这个过程中,我们对LCD12864和DS18B20的芯片资料做了分析和了解,特别是液晶模块,它的显示量大且接口简单,占用单片机I/O口少,如果单片机的对外借口欠缺是,我们还可以在电路中使用74HC595,这样单片机输出数据端口可以重8位缩减到3位,大大缩小了单片机I/O口得使用。136、收获与体会在本设计中,我们重点放在了液晶显示应用上,将液晶模块从程序中单独制成头文件,对液晶的命令字和显

22、示做了分析,做到了可以在液晶的指定位置显示数据。另外,本设计中我们也对我们的单片机软件和硬件知识做了一个整体的复习。因为,要想编写出一个系统的程序,就必须十分清楚硬件电路中所用芯片的工作原理以及使用它们的一些注意事项。在完成任务的过程中,我们先后应用 keil 3 对程序进行编译和修改,是开发板上实验,用 ALtium designer 绘制电路图和 PCB 图,因而,本次实训中,我收获很多,明白了看似简单的问题也要对其进行深入分析,特别是芯片的官方资料的理解,才能真正的掌握和运通它。由于时间和本身知识水平的发挥,我们认为本系统还有需要改进和提高的地方,例如液晶可以显示图形,系统中可以设计报警

23、器等。这让我明白:在以后的学习工作中,不仅要有刻苦努力,还要有钻研精神。14附录1、整体电路图2、主函数#include#include“yejing.h“#define uchar unsigned char#define uint unsigned int#include sbit DQ = P32; /数据口 define interface15uint temp; /温度值 variable of temperaturevoid delay2(unsigned char i) /延时函数while(-i); void Init_Ds18b20(void) /DS18B20 初始化 se

24、nd reset and initialization commandDQ = 1; /DQ 复位,不要也可行。delay2(1); /稍做延时DQ = 0; /单片机拉低总线delay2(250); /精确延时,维持至少 480usDQ = 1; /释放总线,即拉高了总线delay2(100); /此处延时有足够,确保能让 DS18B20 发出存在脉冲。uchar Read_One_Byte() /读取一个字节的数据 read a byte date/读数据时,数据以字节的最低有效位先从总线移出uchar i = 0;uchar dat = 0;for(i=8;i0;i-)DQ = 0; /

25、将总线拉低,要在 1us 之后释放总线/单片机要在此下降沿后的 15us 内读数据才会有效。_nop_(); /至少维持了 1us,表示读时序开始dat = 1; /让从总线上读到的位数据,依次从高位移动到低位。DQ = 1; /释放总线,此后 DS18B20 会控制总线,把数据传输到总线上delay2(1); /延时 7us,此处参照推荐的读时序图,尽量把控制器采样时间放到读时序后的 15us 内的最后部分if(DQ) /控制器进行采样dat |= 0x80; /总线为 1, DQ 为 1,那就把 dat 的最高位置 1;若为 0,不处理,保持 0 delay2(10); /此延时不能少,确

26、保读时序的长度 60us。return (dat);void Write_One_Byte(uchar dat)uchar i = 0;for(i=8;i0;i-)DQ = 0; /拉低总线_nop_(); /至少维持了 1us,表示写时序(包括写 0 时序或写 1时序)开始16DQ = dat /从字节的最低位开始传输/指令 dat 的最低位赋予给总线,必须在拉低总线后的15us 内,/因为 15us 后 DS18B20 会对总线采样。delay2(10); /必须让写时序持续至少 60usDQ = 1; /写完后,必须释放总线,dat = 1;delay2(1);uint Get_Tmp(

27、) /获取温度 get the temperaturefloat tt;uchar a,b;Init_Ds18b20(); /初始化Write_One_Byte(0xcc); /忽略 ROM 指令Write_One_Byte(0x44); /温度转换指令Init_Ds18b20(); /初始化Write_One_Byte(0xcc); /忽略 ROM 指令Write_One_Byte(0xbe); /读暂存器指令a = Read_One_Byte(); /读取到的第一个字节为温度 LSBb = Read_One_Byte(); /读取到的第一个字节为温度 MSBtemp = b; /先把高八位

28、有效数据赋于 temptemp 0;x-)for(y=110;y0;y-);bit busy() /判忙标志位bit flag;RS=0;RW=1;EN=1;flag=(bit)(P0EN=0;return flag; void write_cmd(uchar cmd) /写命令字while(busy();RW=0;RS=0;delay(5);P0=cmd;EN=1;delay(5);EN=0;delay(5);void write_date(uchar dat) /写数据while(busy();RW=0;RS=1;delay(5);P0=dat;EN=1;delay(5);EN=0;del

29、ay(5);18void init() /初始化delay(100);write_cmd(0x30); /Extended Function Set(功能设定控制字)基本指令集 ,8 位delay(1);write_cmd(0x30); /Function Set 基本指令集delay(1);write_cmd(0x0c); /(显示开关控制字),全部显示 ON,游标 OFF,闪烁 OFFdelay(1);write_cmd(0x01); /清屏控制字delay(15);write_cmd(0x06); /Entry Mode (进入设定点控制字)光标从左向右加一位移动delay(1); vo

30、id SetAddress(uchar x,uchar y) /设置输入数据位置switch(y)case 0:CMDAddress=0x80+x;break;case 1:CMDAddress=0x90+x;break;case 2:CMDAddress=0x88+x;break;case 3:CMDAddress=0x98+x;break;write_cmd(CMDAddress);void putstring(uchar x,uchar y,uchar *pdate) /该行是否完SetAddress(x,y);while(*pdate!=0)write_date(*pdate+);vo

31、id show() /显示“温度”putstring(0,0,“温度:“); /第一排首位子显示“温度”两字putstring(0,3,“液晶温度显示“); /第三排首位子显示“液晶温度显示”void display(uint Temp ) / 显示温度值 uint t1,t2,t3 ; /,t0,t1,t2 t1=Temp/100%10;t2=Temp/10%10;t3=Temp%10; 19write_cmd(0x93);write_date(0x30+t1);write_date(0x30+t2);write_date(.);write_date(0x30+t3);write_date(0xA1);write_date(0xE6); #endif附录五 实物图

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 经营企划

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报