6.2 DS18B20与YMSC-G12864IDYEWWD
6.2.1 温度传感器DS18B20
1.DS18B20简介
(1)独特的单线接口方式:DS18B20与微处理器连接时仅需要一条数据线即可实现微处理器与DS18B20的双向通信。
(2)在使用中不需要任何外围元件。
(3)可用数据线供电,电压范围:+3.0~+5.5V。
(4)测温范围:-55℃~+125℃。固有测温分辨率为0.5℃。
(5)通过编程可实现9~12位的数字读数方式。
(6)用户可自设定非易失性的报警上下限值。
(7)支持多点组网功能,多个DS18B20可以并联在唯一的数据线上,实现多点测温。
(8)负压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。
虽然DS18B20有诸多优点,但使用起来并非易事,由于采用单总线数据传输方式,DS18B20的数据I/O均由同一条数据线完成。因此,对读写的操作时序要求十分严格。为保证DS18B20严格的I/O时序,需要做较精确的延时,详细数据可参考DS18B20的数据手册。
另外,因为DS18B20采用一线通信接口,必须首先完成ROM设定,否则记忆和控制功能将无法使用。同时,在程序中必须首先提供以下功能命令之一:① 读ROM,② ROM匹配,③ 搜索ROM,④ 跳过ROM,⑤ 报警检查。上述指令操作作用在每一个器件的64位光刻ROM序列号,可以在一线上挂多个器件选定某一个器件,同时,也可知道总线上挂有设备的类型和数量。
当总线上只有一个设备时,可以采用上述④跳过ROM命令,然后即可对芯片进行操作;而当总线上的设备多于一个时必须进行ROM匹配以确定要和哪个芯片通信。这可以简单地理解为类似于我们日常生活中的地址或电话号码,也就是说,每个芯片上的64位ROM值是固定且各不相同的,当用户计划和某个芯片通信时必须先和它建立通信连接即匹配ROM。方法就是在总线上发送匹配命令并发送64位的ROM数值,然后每个芯片会自动检测该数值是否和自己的相同,如果相同就会与单片机建立连接。
关于一线制总线协议及DS18B20的64位ROM值的组成等相关内容,读者可参考有关一线制总线协议的说明及DS18B20的数据手册。
2.DS18B20命令详解
对DS18B20的控制和读写一般都是通过规定的命令来实现的,这些命令又包括两大类:(1)关于ROM操作的命令。这类命令在上面已经介绍过,用于和DS18B20建立通信连接,是在程序最开始要用到的命令。
(2)对DS18B20实现控制和读写的存储器操作命令。这类命令用于控制DS18B20开始一次温度转换、读出DS18B20寄存器的数值及向DS18B20寄存器写入数据等。各个命令的功能及详细介绍如下:
1)关于ROM操作的命令
● Read ROM[33h]:该命令允许总线控制器读写DS18B20的8位系列编码、唯一的序列号和8位CRC校验码。只有在总线上存在单只的DS18B20的时候才能使用这个命令。如果总线上不止有一个从机(一线制总线的器件),当所有器件都试图向总线发送数据时就会发生数据冲突(漏极开路连在一起形成相与的效果)。
● Match ROM[55h]:匹配ROM命令,后跟64位ROM序号,使总线控制器在多点总线上定位一只特定的DS18B20(因为每个DS18B20的64位ROM序号都不同)。只有和64位ROM序号完全匹配的DS18B20才能响应随后的存储器操作命令,所有和64位ROM序号不匹配的从机都将等待复位信号。该命令不论总线上存在几个器件都可以使用,而不会产生冲突现象。
● Skip ROM[CCh]:该命令允许总线控制器不提供64位ROM编码就可以使用存储器操作命令,我们通常称这条指令为跳过ROM指令,这样,当总线上只有一个器件时就可以节省匹配ROM的时间,而当总线上不止有一个器件时就会和命令Read ROM[33h]一样,因多个器件同时试图发送数据而导致数据冲突。
● Search ROM[F0h]:搜索ROM命令,当一个系统第一次启动时可能并不知道单总线上有多少个器件相连,也不知道它们的64位ROM编码。在这种情况下,搜索ROM命令允许总线控制器用排除法识别总线上所有的器件和器件的编码。
● Alarm Search[ECh]:该命令的流程图和Search ROM的完全相同,只有在最近一次测温后遇到符合报警条件的情况,DS18B20才会响应这条命令,报警条件定义为高于TH或低于TL。只要DS18B20不掉电,报警状态将一直保持,直到再一次测得的温度达不到报警条件为止。
2)关于存储器操作的命令
● Write Scratchpad[4E]:该命令向DS18B20的暂存器中写入数据,开始位置在地址2。接下来写入的两个字节将被存到暂存器中的地址2和3。可以在任何时刻发出复位指令来终止写入。
● Read Scratchpad[BE]:该命令读取暂存器的内容,读取将从字节0开始,一直进行下去,直到第9字节(字节8,CRC)读完。
● Copy Scratchpad[BE]:该命令把暂存器的内容复制到DS18B20的E2存储器中,即把温度报警触发字节存入非易失性存储器里。如果总线控制器在这条命令之后跟着发出读时间隙,而DS18B20又正忙于把暂存器复制到非易失性E2中,DS18B20就会向总线输出一个0,如果复制已经结束,DS18B20就会输出一个1。如果使用寄生电源,总线控制器必须在该命令发出之后立即启动强上拉并维持最少10ms。
● Convert T[44h]:该命令启动一次温度转换而无须其他数据,温度转换指令被执行,然后DS18B20进入等待状态。
● Recall E2 [B8h]:该命令把报警触发器中的值复制回暂存器。该复制操作在DS18B20上电时自动执行,若上电,暂存器中将立刻存在有效数据。若在该命令之后发出读时间隙,DS18B20会输出温度转换忙的标识:“0”=忙,“1”=完成。
● Read Power Supply[B4h]:若把该命令发送给DS18B20,然后紧跟读时间隙,DS18B20会返回它的电源模式:“0”=寄生电源,“1”=外部电源。
3.DS18B20温度的计算方法
DS18B20是通过一种片上测温技术来测量温度的,测到的温度值以带符号扩展位的16位二进制的形式存放在DS18B20的暂存器中。16位二进制数据对应的十六进制数据如表6-1所示。
表6-1 DS18B20转换温度数据值对照表
根据表6-1中的数据对照,即可清楚地了解DS18B20转换后温度数据的结构形式,在程序中只需简单的运算即可得到我们所希望的温度值。但要注意,正负温度的计算方法是不同的。
6.2.2 液晶显示屏YMSC-G12864IDYEWWD
1.液晶显示基本原理介绍
液晶显示模块(LCD Module,简称LCM)是一种将液晶显示器件、连接件、集成电路、PCB线路板、背光源、结构件装配在一起的组件,由于其具有显示内容丰富、体积小、重量轻、寿命长、使用方便、安全省电及无辐射等优点,因此广泛应用于移动通信、仪器仪表、电子设备及家用电器等多个领域。
本例采用的LCD(YMSC-G12864IDYEWWD)是一款128×64点阵的单色显示屏。基于点阵原理来显示图形、字符和汉字的LCD是目前应用最为广泛的LCD,因为点阵显示原理简单、应用灵活方便,可以根据实际需要方便地显示各种图形、汉字等需要的图像。
2.YMSC-G12864IDYEWWD简介
YMSC-G12864IDYEWWD是一款128×64点阵的单色显示屏,采用三星公司的S6B0108液晶控制芯片,下面将对YMSC-G12864IDYEWWD特点和模块命令进行详细介绍。
(1)YMSC-G12864IDYEWWD特点
对YMSC-G12864IDYEWWD模块的控制基本上可以分为以下4种操作:
● 对左半屏幕写入命令。
● 对左半屏幕写入数据。
● 对右半屏幕写入命令。
● 对右半屏幕写入数据。
在程序中(见本节最后YMSC-G12864IDYEWWD具体程序)这4种操作是通过4个功能函数来完成的,它们分别是:
● void wrcom1(int x),此函数实现对左半屏幕写入命令。
● void wrdat1(int x),此函数实现对左半屏幕写入数据。
● void wrcom2(int x),此函数实现对右半屏幕写入命令。
● void wrdat2(int x),此函数实现对右半屏幕写入数据。
此外,在对液晶模块操作之前还要对液晶模块进行初始化,完成液晶模块的初始化任务,为接下来的工作做好准备。该工作在程序中是通过初始化函数void lcdinitial(void)来完成的。
(2)YMSC-G12864IDYEWWD模块命令详解
单片机通过向YMSC-G12864IDYEWWD模块内的S6B0108控制芯片发送命令来控制显示内容,这些命令是通过数据总线DATA BUS来发送的,并配合RS引脚和R/W引脚的高低电平来表达不同的含义,
下面解释上述命令的功能和实现方式。
● 显示开/关(Display ON/OFF):该命令用来控制YMSC-G12864IDYEWWD模块的状态。发送该命令时要保持RS引脚和R/W引脚均为低电平,此时,当DATA BUS总线上发送的数据为0x3f(二进制数据为:00111111)时使得YMSC-G12864IDYEWWD模块处于ON状态,即此时可以进行显示;当DATA BUS总线上发送的数据为0x3e(二进制数据为:00111110)时使得YMSC-G12864IDYEWWD模块处于OFF状态,即此时不能进行显示。但是,无论发送什么状态命令都不会影响控制芯片S6B0108的内部其他寄存器和显示数据寄存器RAM的状态。
● 设置显示内容的Y坐标(Set address(Y address)):该命令用于控制显示内容的Y坐标,即列位置,列是指上下的一条直线位置,列位置是指第几列,即最左边一列是第一列,最右边一列是第64列,所以列位置也就是在水平方向上的位置。Y坐标的范围是0~63,总共64个点的位置。因为此液晶模块是128×64点阵的型号,且分为左右两个半屏,所以每块屏幕的水平点数为64。发送这条命令时要保持RS引脚和R/W引脚均为低电平,命令值为0x40~0x7f。
● 设置显示内容的X坐标(Set address(X address)):该命令用于控制显示内容的X坐标,即行位置,也就是在垂直方向上的位置。X坐标的范围是0~7,总共8行的位置。因为此液晶模块是128×64点阵的型号,所以屏幕的垂直方向点数为64,而每个点阵字符最小为8×8的点阵模式(即每个字符由8×8=64个点组成),所以在X轴方向最多能显示8个字符,X的坐标范围就是0~7。发送这条命令时要保持RS引脚和R/W引脚均为低电平,命令值为0xb8~0xbf。
● 设置起始位置(Display start line(Z address)):该命令用于设置RAM中的数据显示在屏幕的位置。发送该命令时要保持RS引脚和R/W引脚均为低电平,命令值为0xc0。
● 读取YMSC-G12864IDYEWWD模块的状态(Status read):该命令用于读取YMSC-G12864IDYEWWD模块当前的状态。DATA BUS总线返回的8位数据中各位含义如图6-1所示。
图6-1 YMSC-G12864IDYEWWD模块控制命令
最高位DB7表示YMSC-G12864IDYEWWD模块当前的状态,当DB7=1时表示YMSC-G12864IDYEWWD模块处于忙碌状态,此时不能发送命令来操作;当DB7=0时表示YMSC-G12864IDYEWWD模块处于空闲状态,此时可以发送命令来操作。
第六位DB5表示显示开关的状态,当DB5=1时表示YMSC-G12864IDYEWWD模块的显示功能处于关状态,此时不能显示;当DB5=0时表示YMSC-G12864IDYEWWD模块的显示功能处于开状态,此时可以显示。
第五位DB4表示显示YMSC-G12864IDYEWWD模块的重启状态,当DB4=1时表示YMSC-G12864IDYEWWD模块正处于重启动过程中,此时不能操作YMSC-G12864IDYEWWD模块;
当DB4=0时表示YMSC-G12864IDYEWWD模块不处于重启动过程中,此时能操作YMSC-G12864IDYEWWD模块。发送这条命令时要保持RS引脚为低电平;R/W引脚均为高电平。
● 写显示数据(Write display data):该命令用于向YMSC-G12864IDYEWWD模块发送一条显示内容的数据,YMSC-G12864IDYEWWD模块接收到此数据后就会将其显示在屏幕上,并且显示完之后会将Y坐标地址自动加一。发送这条命令时要保持RS引脚为高电平;R/W引脚均为低电平。
● 读显示数据(Read display data):该命令用于从YMSC-G12864IDYEWWD模块中读出RAM的数据。发送这条命令时要保持RS引脚为高电平;R/W引脚均为高电平。
(3)YMSC-G12864IDYEWWD模块点阵显示原理
YMSC-G12864IDYEWWD模块是一款以点阵方式进行显示的液晶模块,此模块每次显示列方向的8个点。显示时首先要确定显示的X坐标和Y坐标,即确定一个点的位置,然后以此点为基点在垂直方向上显示8个点。在本例中数字是以8×16点阵显示的;汉字以16×16点阵显示,如图6-2所示。
图6-2 液晶点阵显示原理