若发送0,则拉低总线。当传送0时,DS18B20在该时序结束时释放总线,再由上拉电阻将总线拉回空闲高电平状态。DS18B20发出的数据在读时序下降沿起始后的15μs内有效,因此主机必须在读时序开始后的15μs内释放总线,并且采样总线状态。
DS18B20 在使用时,一般都采用单片机来实现数据采集。只需将DS18B20 信号线与单片机1 位I/O线相连,且单片机的1 位I/O 线可挂接多个DS18B20 ,就可实现单点或多点温度检测。
(7)DS18B20的温度计算
DS18B20允许通过程序对传感器的分辨率,温度报警的上、下限等参数进行配置。它的内部存储器包括一个高速暂存存储器和一个非易失性可擦除E2PROM。速暂存存储器共有8个字节(byte),每个字节8位(bit)。
根据温度的计算方法如下:
S S S S S = 0 0 0 0 0 b 温度值:
T = [ (MSB and 7) ×256 + LSB] ×0.0625 ℃
S S S S S = 1 1 1 1 1 b 温度值:
T = - [ (256 - MSB) ×256 - LSB] ×0.0625 ℃
如果,存储器高位寄存器MS的S S S S S 均为0 ,则被测温度为正值,用上面第1个公式来计算温度。如果存储器高位寄存器MSB的S S S S S均为1,则被测温度为负值,用上面第2个公式来计算温度。在这里,有两点应当注意:一是公式中中括号内的数值为二进制,在计算口号内计算完成后应转化为十进制;二是这里的7与0.0625是假设传感器的分辨率设置0.0625时的计算值。如果分辨率的设置值不是0.0625,那么就应当作相应的变化。第3和第4个字节分别用来存放温度报警的上限(TH)和下限值(TL)。DS18B20在完成温度变换后,会将所测温度值与贮存在TH和TL内的上下限值相比较,如果测温结果高于TH或低于TL,DS18B20内部的告警标志就会被置位,表示温值超出了测量范围。并且该值在掉电后不会丢失,而是记忆其设定的上下限值。第5字节是配置寄存器,如表3-4所示,该寄存器用于对温度转换值的分辨率进行设置。其中,最高位用于设置传感器是工作模式还是测试模式,是生产厂家为便于检验使用。其出厂时的默认值为0,为工作模式(即用户使用时的模式)。并且在用户使用中,该位总是保持为0。R1与R0确定传感器的分辨率,如表3-5所示,DS18B20有4种分辨率可供选择。使用时可以根据实际需要来设置,出厂时的默认设置是12位。最后5位总保持为1。 3.2.2显示电路设计 ①温度显示工作原理:
LCD1602可以采用两种方式与单片机连接,一种是采用8位数据总线D0—
12
D7,和RS、R/W、EN三个控制端口;另一种是只用D4-D7作为四位数据分两次传送。本实验将使用并采用八位数据方式来控制1602显示,如图3-5所示:
图3-5 AT89C51与LCD1602接口电路图
进行LCD设计主要是LCD的控制/驱动和外界的接口设计。控制主要是通过接口与外界通信、管理内/外显示RAM,控制驱动器,分配显示数据;驱动主要是根据控制器要求,驱动LCD进行显示。控制器还常含有内部ASCII字符库,或可外扩的大容量汉字库。
AT89C51的P2.2与LCD1602的使能端E相连,P2.1与读写选择端R/W相连,P2.0与RS相连,当使能端使能时,再通过命令选择端来控制读数据,写数据,写命令。控制P2端口与LCD1602A的数据端口相连,传输数据。 ②LCD1602的性能参数
LCD1602A的管脚排列如图3-6、,它共有16个脚,各引脚功能如下: VSS: 电源地 VDD:电源正极
VL:液晶显示偏压信号,对比度调整端,接地时最高,接正电源最低,可接10K
电位器调整
RS: 寄存器选择,高电平选择数据寄存器
低电平选择指令寄存器 图3-6 LCD1602A的管脚
R/W 读/写选择端,高电平读操作,低电平写操作
E使能信号,当E端由高电平跳变成低电平时,液晶模块执行命令 BLA背光源正极图
13
BLK背光源负极 D0~D7数据端口
芯片的主要技术参数及应用配置:
显示容量: 芯片工作电压: 工作电流: 模块最佳工作电压: 字符尺寸: 16×2个字符 4.5~5.5V 2.0mA(5.0V) 5.0V 2.95×4.35(WXH)mm 表3-7 LCD1602A主要技术参数
表LC0 0 1 1 D1 0 0 0 指令码 功能 设置16*2显示,5*7点阵, 8位数据接口 表3-8 1602A显示模式
指令码 功能 D=1开显示 D=0 关显示 B C=1 显示光标C=0 不显示光标 B=1 光标闪烁B=0 光标不闪烁 N=1 当读/写一个字符后,地址指针加1,且光标加1; N=0 当读/写一个字符后,地址指针减1,且光标减1; S=1 当写一个字符,整屏显示左移(N=1)或者右移(N=0),以得到光标不移动而整屏移动的效果; S=0 当写一个字符,整屏显示不移动。 0 0 0 0 1 D C 0 0 0 0 0 1 N S
表3-9 LCD1602A显示开/关及光标设置
编号 1 2 3 4 5 符号 VSS VDD VL RS R/W 14
引脚说明 电源地 电源正极 液晶显示偏压信号, 数据/命令选择端(H/L) 读/写选择端(H/L) 6 7 8 9 10 11 12 13 14 15 16 E D0 D1 D2 D3 D4 D5 D6 D7 BLA BLK 使能信号 Data I/O Data I/O Data I/O Data I/O Data I/O Data I/O Data I/O Data I/O 背光源正 背光源负 表3-10 LCD1602A接口信号说明
③LCD1602的显示与控制命令
1602液晶模块内部的字符发生内存(CGROM)已经存储了160个不同的点阵字符图形,如下图所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。
1602液晶模块内部的控制器共有11条控制指令,如下所示,它的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平)
指令1:清显示,指令码01H,光标复位到地址00H位置; 指令2:光标复位,光标返回到地址00H;
指令3:光标和显示模式设置 I/D:光标移动方向,高电平右移,低电平左移 S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效;
指令4:显示开关控制。D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示C:控制光标的开与关,高电平表示有游标,低电平表示无游标B:控制光标是否闪烁,高电平闪烁,低电平不闪烁;
指令5:光标或显示移位元S/C:高电平时移动显示的文字,低电平时移动光标;
指令6:功能设置命令DL:高电平时为4位总线,低电平时为8位总线N:低电平时为单行显示,高电平时双行显示F:低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符;
指令7:字符发生器RAM地址设置; 指令8:DDRAM地址设置;
指令9:读忙信号和光标地址BF:为忙标志位,高电平表示忙,此时模块
15
不能接收命令或者数据,如果为低电平表示不忙;
指令10:写数据; 指令11:读数据;
液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符。
16