1、基于DS18B20的测温系统设计目 录摘要1关键词1Abstract1Key words11 绪论21.1 温度传感器21.2系统概述32 硬件概述32.1 DS18B2032.1.1 DS18B20特点32.1.3 DS18B20管脚排列42.1.4 DS18B20 工作原理42.1.5 DS18B20 主要数据部件52.2 STC89C52单片机72.3 LCD1602液晶82.3.1液晶显示模块概述82.3.2模块引脚说明93 系统设计93.1硬件设计93.1.1 设计思路93.1.2 总体设计方框图103.2 软件设计103.2.1 软件开发环境113.2.2 DS18B20软件设计1
2、23.2.3 DS18B20初始化133.2.4 对DS18B20的读和写操作143.2.5 液晶显示程序163.3系统仿真调试194.总结语21参考文献21附录一22摘 要本文主要介绍了一种基于DS18B20的测温系统,利用DS18B20进行测温,基于单片机STC89C52进行温度控制,以1602液晶为显示器件。详细描述了利用DS18B20开发测温系统的过程,重点对传感器在单片机下的硬件连接,软件编程以及各模块系统流程进行了详尽分析,对各部分的电路也一一进行了介绍,该系统可以方便的实现温度采集和显示。DS18B20与STC89C52结合实现最简温度检测系统,具有硬件电路简单,控温精度高、功能
3、强,体积小,简单灵活等优点,可以应用于检测温度在-55到+125之间的各种场合,有广泛的应用前景。关键词:DS18B20;STC89C52;LCD1602 Design of temperature measurement system based on DS18B20Abstract:This paper describes a temperature measurement system based on DS18B20.DS18B20 is used for temperature measurement, MCU-STC89C52 control the temperature mea
4、surement system,LCD1602 as the display device. A detailed description of the process of development DS18B20 temperature measurement system, focusing on hardware connected between sensor and MCU, and analysis of software programming and module system processes carried out. Each part of the circuit is
5、 also introduced one by one; the system can easily realize the temperature acquisition and display. The DS18B20 and STC89C52 combined to achieve the most simple temperature measurement system, hardware circuit is simple, precise temperature control, powerful, small, simple, flexible, etc. It can be
6、used to detect a variety occasions of temperature between -55 C to +125 C , have a broad application prospects.Key words: DS18B20; STC89C52; LCD1602 1 绪论温度(temperature)是国际单位制中一个基本物理量。温度的微观概念是由大量分子运动平均强度的表示,分子运动愈激烈其温度表现越强烈;温度的宏观概念是冷热程度的表示,即为互为热平衡的两物体,其温度相等。温度只能通过物体随温度变化的某些特性来间接测量,用来量度物体温度数值的标尺叫温标。它规定
7、了温度的读数起点(零点)和测量温度的基本单位。目前国际上用得较多的温标有华氏温标,摄氏温标,热力学温标。温度作为一种最基本的环境参数之一,日常生活和工农业生产中经常要检测温度,同时温度传感器在各领域已经引用的非常广泛,可以说是渗透到社会的每一个领域,与人民的生活与环境的温度息息相关,在工业生产过程中需要实时测量温度,在农业生产中也离不开温度的测量,因此研究温度的测量方法和装置具有重要的意义。1.1 温度传感器温度传感器是把温度信号转换为与之有确定对应关系电信号的一种信号转换装置,也是开发最早,应用最广的一类传感器。现有技术的温度传感器主要分为两类。一类是机械温度传感器,其工作原理是利用材料热胀
8、冷缩的物理性质,在一定温度条件下使测温材料产生形变,自动连通或断开电路使电器启动或者停机;由此可见这是突变。另一种温度传感器则是利用半导体器件的热敏特性而设计,温度变化时,热敏电阻的阻值改变,导致热敏电阻所在电路的电参数改变,从而输出相应的电信号。因此这是渐变。同时也可以细分为四种主要类型:热电偶、热敏电阻、电阻温度检测器(RTD)和IC温度传感器。结合了微电子技术、计算机技术和自动测试技术(ATE_)的智能温度传感器(亦称数字温度传感器)问世于20世纪90年代中期。它较普通的温度传感器更能体现出自动化的特点。目前国际上已开发出多种智能温度传感器系列产品。智能温度传感器的组成部分有温度传感器、
9、A/D传感器、信号处理器、存储器(或寄存器)和接口电路。有的产品还带中央控制器(CPU)、多路选择器、随机存取存储器(RAM)和只读存储器(ROM)。根据美国仪器学会的调查,1990年起温度传感器的市场份额就大大超过了其他的传感器。从17世纪初伽利略发明温度计开始,人们开始利用温度进行测量。真正把温度变成电信号的传感器是1821年由德国物理学家赛贝发明的,这就是后来的热电偶传感器。五十多年之后,德国人西门子发明了铂电阻温度计。基于半导体技术的支持下,本世纪相继开发了半导体热电偶传感器、PN结温度传感器和集成温度传感器。相应的是,根据波与物质的相互作用规律,相继开发了声学温度传感器、红外传感器和
10、微波传感器。近百年来温度传感器的发展大概经历了下面三个阶段;(1)传统的分立式温度传感器(含敏感元件);(2)模拟集成温度传感器或控制器;(3)智能温度传感器。1、 传统的分立式温度传感器(含敏感元件),主要是能够进行非电量和电量之间转换热。也称之电偶传感器。热电偶传感器与被测对象直接接触,不受中间介质的影响,具有较高的精度。 2、模拟集成温度传感器是采用硅半导体集成工艺制成的,因而又称单片集成温度传感器或者硅传感器或。模拟集成温度传感器问世于20世纪80年代,它将温度传感器集成在一个芯片上、可完成温度测量及模拟信号输出等功能的专用IC。模拟集成温度传感器的主要特点是功能单一(仅测量温度)、测
11、温误差小、价格低、响应速度快、传输距离远、体积小、微功耗等,适合远距离测温,不需要进行非线性校准,外围电路简单。目前在国内外应用作为普遍的一种集成传感器,典型产品有AD590、AD592、TMP17、LM135等(以AD590为例)3、智能温度传感器,能使传感器由单一功能、单一检测向多功能和多点检测发展;从被动检测向主动进行信息处理方向发展;从就地测量向远距离实时在线测控发展。网络化与自动化使得传感器可以就近接入网络,传感器与测控设备间再无需点对点连接,从而大大简化了连接线路,易于系统的维护和扩充。1.2系统概述系统采用DS18B20数字温度计为测温器件,DS18B20数字温度计是DALLAS
12、公司生产单总线器件,与微处理器连接时 仅需要一条口线即可实现微处理器与 DS18B20 的双向通讯。 单总线具有经济性好,抗干扰能力强,适合于恶劣环境的现场温度测量,使用方便等优点。DS18B20所测温度以9位数字量直接读出不需要AD进行转换,因此它来组成一个测温系统,具有硬件电路简单,控温精度高、功能强,体积小,简单灵活等优点,同时每一个不同的DS18B20数字温度计都有一个不懂的地址序列码,这样就可以实现一根总线上挂接多个DS18B20的目的,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。DS18B20可以应用于检测温度在-55到+125之间的各种场合。系统使用STC89C5
13、2单片机为控制器件,STC89C52单片机是一种低功耗,高性能的微控制器,STC89C52使用经典的MCS-51内核,具有可编程,易操作,应用灵活等特点,因此STC89C52单片机是一种优秀的控制器件。系统使用LCD1602为显示器件,1602液晶可以显示多种字符数字,使用LCD1602便于温度的读取,同时经济实惠。 近年来随着单片机的发展和传感器技术的革新,温度检测领域也完成了从模拟信号到数字信号的转变。DS18b20温度传感器的广泛应用更是推动了这一领域的发展。另外液晶显示模块具有体积小、功耗低、显示内容丰富、超薄轻巧等优点在各类仪表和显示系统中得到越来越多的应用,现在也是单片机应用设计中
14、最常用的信息显示模块。综合以上产品的发展特点,希望温度检测系统在未来的发展中有更广阔的应用空间并且具有更好的现场测量优越性。2 硬件概述2.1 DS18B20DS18B20数字温度计是DALLAS公司生产的1Wire,即单总线器件,DS18B20所测温度以9位数字量直接读出不需要AD进行转换,因此用它来组成一个测温系统,具有硬件电路简单,控温精度高、功能强,体积小,简单灵活等优点,可以应用于检测温度在-55到+125之间的各种场合1。2.1.1 DS18B20特点DS18B20为单线数字温度传感器,即“一线器件”,其具有独特的优点:( 1 )采用单总线的接口方式,与微处理器连接时,仅需要一条口
15、线即可实现微处理器与 DS18B20 的双向通讯。 单总线具有经济性好,抗干扰能力强,适合于恶劣环境的现场温度测量,使用方便等优点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。( 2 )测量温度范围宽。测量精度高 DS18B20 的测量范围为 -55 + 125 ; 在 -10+ 85C 范围内,精度为 0.5C 。( 3 )在使用中不需要任何外围元件。( 4 )持多点组网功能。多个 DS18B20 可以并联在惟一的单线上,实现多点测温。( 5 )供电方式灵活。DS18B20 可以通过内部寄生电路从数据线上获取电源。因此,当数据线上的时序满足一定的要求时,可以不接外部电源,从而
16、 使系统结构更趋简单,可靠性更高。( 6 )测量参数可配置 DS18B20 的测量分辨率可通过程序设定 912 位。( 7 ) 负压特性。电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。( 8 )掉电保护功能 DS18B20 内部含有 EEPROM ,在系统掉电以后,它仍可保存分辨率及报警温度的设定值。DS18B20 具有体积更小、适用电压更宽、更经济、可选更小的封装方式,更宽的电压适用范围,适合于构建自己的经济的测温系统,因此也就被设计者们所青睐。2.1.3 DS18B20管脚排列DS18B20的管脚排列:1. GND为电源 地;2. DQ为数字信号输入输出端;3. VDD为外接供电
17、电源输入端 。图1 DS18B20管脚排列2.1.4 DS18B20 工作原理DS18B20 的读写时序和测温原理与 DS1820 相同,只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时时间由 2s 减为 750ms。 DS18B20 测温原理如图 2 所示。图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器 1。高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器 2 的脉冲输入。计数器 1 和温度寄存器被预置在55所对应的一个基数值。计数器 1 对低温度系数晶振产生的脉冲信号进行减法计数,当计数器 1 的预置值减到 0 时,温度寄存器的
18、值将加 1,计数器 1 的预置将重新被装入,计数器 1 重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器 2 计数到 0 时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。图 2 中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器 1 的预置值。计数器1比较预置低温系数晶振预置LSB置位/清除斜率累加器=0温度寄存器加1计数器2高温系数晶振停止=0图2 DS18B20测温原理框图2.1.5 DS18B20 主要数据部件(1)DS18B20内部主要由4部分组成:64 位ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。ROM中的6
19、4位序列号是出厂前被光刻好的,它可以看作 是该DS18B20的地址序列码,每个DS18B20的64位序列号均不相同。64位ROM的排的循环冗余校验码(CRC=X8X5X41)。 ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。 存储器与控制逻辑器64位ROM和单总线接口I/O温度传感器高速缓存高温触发器VD1低温触发器CVD2配置寄存器GND电源检测8位CRC发生器图3 DS18B20的内部结构 图4 DS18B20温度值格式表(2)DS18B20 中的温度传感器可完成对温度的测量,以 12 位转化为例:用 16 位符号扩展的二进制补码读数
20、形式提供,以 0.0625/LSB 形式表达,其中 S 为符号位。 这是 12 位转化后得到的 12 位数据,存储在 18B20 的两个 8 比特的 RAM 中,二进制中的前面 5 位是符号位,如果测得的温度大于 0,这 5 位为 0,只要将测到的数值乘于 0.0625 即可得到实际温度;如果温度小于 0,这 5 位为 1,测到的数值需要取反加 1 再乘于 0.0625 即可得到实际温度。图5 DS18B20温度数据表例如+125的数字输出为 07D0H,+25.0625的数字输出为 0191H,-25.0625的数字输出为 FF6FH,-55的数字输出为 FC90H。(3)DS18B20 温
21、度传感器的存储器DS18B20 温度传感器的内部存储器包括一个高速暂存 RAM 和一个非易失性的可电擦除的 EEPRAM,后者存放高温度和低温度触发器 TH、TL 和结构寄存器。(4) 配置寄存器该字节各位的意义如下:TMRIRO11111表1 配置寄存器结构低五位一直都是1,TM 是测试模式位,用于设置 DS18B20 在工作模式还是在测试模式。在 DS18B20出厂时该位被设置为 0,用户不要去改动。R1 和 R0 用来设置分辨率,如下表所示:(DS18B20 出厂时被设置为 12 位)R1R0分辨率温度最大转换时间009位93.75ms0110位187.5ms1011位375ms1112
22、位750ms表2 温度分辨率设置表(5)高速暂存存储器高速暂存存储器由 9 个字节组成,其分配如表 3所示。当温度转换命令发布后,经转换所得的温度以二字节补码形式存放在高速暂存存储器的第 0 和第 1 个字节。单片机可通过单线接口读到该数读取时低位在前,高位在后,数据格式如表 1 所示。对应的温度计算:当符号位 S=0 时,直接将二制位转换为十进制;当 S=1 时,先将补码变为原码,再计算十进制值。表?2 是对应的一部分温度第九个字节是冗余检验字节。寄存器内容字节地址温度值低位0温度值高位1高温限值2低温限值3配置寄存器4保留5保留6保留7CRC校验值8表3 暂存寄存器分布2.2 STC89C
23、52单片机 STC89C52是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash存储器。STC89C52使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。 具有以下标准功能: 8k字节Flash,512字节RAM, 32 位I/O 口线,看门狗定时器,内置4KB EEPROM,MAX810复位电路,3个16 位定时器/计数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级
24、中断结构),全双工串行口。另外 STC89X52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。最高运作频率35MHz,6T/12T可选2。图6 STC89C52单片机内部结构图2.3 LCD1602液晶2.3.1 液晶显示模块概述1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有
25、一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用。41602液晶具有以下特点:1、显示容量为162个字符;2、芯片工作电压为4.55.5V;3、工作电流为2.0mA(5.0V);4、模块最佳工作电压为5.0V;5、字符尺寸为2.954.35(WH)mm。2.3.2 模块引脚说明1602LCD采用标准的14引脚(无背光)或16引脚(带背光)接口,各引脚接口说明见表。编号符号引脚说明编号符号引脚说明1VSS电源地9D2Date I/O2VDD电源正极10D3Date I/O3VL液晶显示偏压信号11D4Date I/O4RS数据/命令选择端(V/L)12D5Date I/O5R/W读
26、/写选择端(H/L)13D6Date I/O6E使能信号14D7Date I/O7D0Date I/O15BLA背光源正极8D1Date I/O16BLK背光源负极表4 LCD1602液晶接口引脚定义1、2 组电源。一组是模块的电源;一组是背光板的电源 均为5V 供电。2、VL 是调节对比度的引脚,调节此脚上的电压可以改变黑白对比度。3、RS 是很多液晶上都有的引脚,是命令/数据选择引脚。该脚电平为高时表示将进行数据操作;为低时表示进行命令操作。4、RW 也是很多液晶上都有的引脚,是读写选择端。该脚电平为高是表示要对液晶进行读操作,为低时表示要进行写操作。5、E 同样很多液晶模块有此引脚,通常
27、在总线上信号稳定后给一正脉冲通知把数据读走,在此脚为高电平的时候总线不允许变化。6、D0D7 ,8 位双向并行总线,用来传送命令和数据。7、BLA是背光源正极,BLK是背光源负极。3 系统设计3.1 硬件设计3.1.1 设计思路硬件电路包括三部分:1、DS18B20采温电路;2、STC89C52控制电路;3、1602温度显示电路。18B2采温电路很简单,只需在数据段接一4.7K的上拉电阻即可,DS18B20是单总线温度传感器,数据线是漏极开路,如果DS18B20没接电源,则需要数据线强上拉,给DS18B20供电;如果DS18B20接有电源,则需要一个上拉即可稳定的工作。18B20的数据段接单片
28、机P3.3口;STC89C52控制电路则是正常单片机工作电路即可,主要包括外接晶振,复位按键等;1602的复位,读写,使能分别接单片机的P2.0,2.1,2.2口,数据口为单片机的P0口,综上所述,系统硬件电路简单,这也是以DS18B20为采温元件的的优势之一。3.1.2 总体设计方框图方框图所示为数字温度控制器的单体设计方框图。其工作原理为:当该电路上电工作以后,首先刷新显示(LED),然后,温度传感器采集温度送单片机检查温度的高低,由单片机送出信号经过驱动电路送往显示电路。3.2 软件设计整个系统的功能是由硬件电路配合软件来实现的,当硬件基本定型后,软件的功能也就基本定下来了。从软件的功能
29、不同可分为两大类:一是监控软件(主程序),它是整个控制系统的核心,专门用来协调各执行模块和操作者的关系。二是执行软件(子程序),它是用来完成各种实质性的功能如测量、计算、显示、报警等。每一个执行软件也就是一个小的功能执行模块。这里将各执行模块一一列出,并为每一个执行模块进行功能定义和接口定义。各执行模块规划好后,就可以规划监控程序了6。图8 软件实现结构图3.2.1 软件开发环境本系统开发环境使用的是KeilSoftware公司推出的uVision4。uVision4是一款可用于多种8051MCU的集成开发环境(IDE),该IDE同时也是PK51及其它开发套件的一个重要组件。除增加了源代码、功
30、能导航器、模板编辑以及改进的搜索功能外,uVision4还提供了一个配置向导功能,加速了启动代码和配置文件的生成。此外其内置的仿真器可模拟目标MCU,包括指令集、片上外围设备及外部信号等。uVision4提供逻辑分析器,可监控基于MCUI/O引脚和外设状态变化下的程序变量7。图9 uVision4操作界面3.2.2 DS18B20软件设计DS18B20的一线工作协议流程是:初始化ROM操作指令存储器操作指令数据传输。DS18B20工作过程一般遵循以下协议:初始化ROM操作命令存储器操作命令处理数据图10 DS18B20工作流程图3.2.3 DS18B20初始化主机首先发出一个480960微秒的
31、低电平脉冲,然后释放总线变为高电平,并在随后的480微秒时间内对总线进行检测,如果有低电平出现说明总线上有器件已做出应答。若无低电平出现一直都是高电平说明总线上无器件应答。做为从器件的DS18B20在一上电后就一直在检测总线上是否有480960微秒的低电平出现,如果有,在总线转为高电平后等待1560微秒后将总线电平拉低60240微秒做出响应存在脉冲,告诉主机本器件已做好准备。若没有检测到就一直在检测等待。图11 DS18B20初始化时序图初始化程序:bit Init_DS18B20(void)bit flag; /储存DS18B20是否存在的标志,flag=0,表示存在;flag=1,表示不存
32、在DQ = 1; /先将数据线拉高for(time=0;time2;time+); /略微延时约6微秒DQ = 0; /再将数据线从高拉低,要求保持480960usfor(time=0;time200;time+); /略微延时约600微秒 /以向DS18B20发出一持续480960us的低电平复位脉冲 DQ = 1; /释放数据线(将数据线拉高) for(time=0;time10;time+); /延时约30us(释放总线后需等待1560us让DS18B20输出存在脉冲)flag=DQ; /让单片机检测是否输出了存在脉冲(DQ=0表示存在) for(time=0;time200;time+
33、); /延时足够长时间,等待存在脉冲输出完毕return (flag); /返回检测成功标志3.2.4 对DS18B20的读和写操作接下来就是主机发出各种操作命令,但各种操作命令都是向DS18B20写0和写1组成的命令字节,接收数据时也是从DS18B20读取0或1的过程。因此首先要搞清主机是如何进行写0、写1、读0和读1的。写周期最少为60微秒,最长不超过120微秒。写周期一开始做为主机先把总线拉低1微秒表示写周期开始。随后若主机想写0,则继续拉低电平最少60微秒直至写周期结束,然后释放总线为高电平。若主机想写1,在一开始拉低总线电平1微秒后就释放总线为高电平,一直到写周期结束。而做为从机的D
34、S18B20则在检测到总线被拉底后等待15微秒然后从15us到45us开始对总线采样,在采样期内总线为高电平则为1,若采样期内总线为低电平则为0。 对于读数据操作时序也分为读0时序和读1时序两个过程。读时隙是从主机把单总线拉低之后,在1微秒之后就得释放单总线为高电平,以让DS18B20把数据传输到单总线上。DS18B20在检测到总线被拉低1微秒后,便开始送出数据,若是要送出0就把总线拉为低电平直到读周期结束。若要送出1则释放总线为高电平。主机在一开始拉低总线1微秒后释放总线,然后在包括前面的拉低总线电平1微秒在内的15微秒时间内完成对总线进行采样检测,采样期内总线为低电平则确认为0。采样期内总
35、线为高电平则确认为1。完成一个读时序过程,至少需要60us才能完成图12 DS18B20读写时序图/*函数功能:从DS18B20读取一个字节数据出口参数:dat*/ unsigned char ReadOneChar(void)unsigned char i=0;unsigned char dat; /储存读出的一个字节数据for (i=0;i8;i+)DQ =1; / 先将数据线拉高_nop_(); /等待一个机器周期 DQ = 0; /单片机从DS18B20读书据时,将数据线从高拉低即启动读时序_nop_(); /等待一个机器周期 DQ = 1; /将数据线人为拉高,为单片机检测DS18B
36、20的输出电平作准备for(time=0;time=1;if(DQ=1) dat|=0x80; /如果读到的数据是1,则将1存入datelsedat|=0x00;/如果读到的数据是0,则将0存入dat /将单片机检测到的电平信号DQ存入rifor(time=0;time8;time+); /延时3us,两个读时序之间必须有大于1us的恢复期 return(dat); /返回读出的十六进制数据/*函数功能:向DS18B20写入一个字节数据入口参数:dat*/ WriteOneChar(unsigned char dat)unsigned char i=0;for (i=0; i8; i+) DQ
37、 =1; / 先将数据线拉高 _nop_(); /等待一个机器周期 DQ=0; /将数据线从高拉低时即启动写时序 DQ=dat&0x01; /利用与运算取出要写的某位二进制数据, /并将其送到数据线上等待DS18B20采样 for(time=0;time10;time+);/延时约30us,DS18B20在拉低后的约1560us期间从数据线上采样 DQ=1; /释放数据线 for(time=0;time=1; /将dat中的各二进制位数据右移1位 for(time=0;time4;time+) ; /稍作延时,给硬件一点反应时间3.2.5 液晶显示程序 液晶显示是系统程序运行的窗口,所有需要的
38、操作都可以通过显示窗口表现出来。因此信息显示是系统必不可少的部分。液晶显示器的设定、读写与光标控制都需要相应的指令来完成。一般LCD1602共有11条控制指令,具体功能如下表所示。指令功能清屏清DDRAM和AC的值归位AC=0,光标,画面回HOME位输入方式设置设置光标,画面移动方式显示快关控制设置显示,光标及闪烁开、关光标,画面位移光标,画面移动,不影响DDRAM功能设置工作方式设置CGRAM地址设置设置CGRAM地址DDRAM地址设置DDRA地址设置读BF及AC值读忙标志BF值和AC值写数据数据写入DDRAM或CGRAM内读数据从DDRAM或CGRAM数据读出表6:控制指令相关功能表 而在
39、实际编程中经常用到的指令并不多,分别是清屏、显示开关控制、光标画面位移和功能设置。因此只需记住这几条常用指令即可。液晶显示还有一条比较重要的指令设置就是读写寄存器。它主要决定此时液晶显示寄存器的工作方式。它的控制功能如下表所示RSRWE功能00下降沿写指令代码01高电平读忙标志和AC码10下降沿写数据11高电平读数据 表7:读写寄存器功能表在实际编程中需要定义液晶显示第一行和第二行的地址,然后第一行显示两个温度传感器测得的温度值,第二行默认显示此次测量规定的时间,如果切换后,第二行则显示最高温度值。在这里,第二行显示最高温度值时需经过键盘扫描切换方可实现,所以不与论述。图13 液晶显示流程图程
40、序:/*函数功能:将模式设置指令或显示地址写入液晶模块入口参数:dictate*/void WriteInstruction (unsigned char dictate) while(BusyTest()=1); /如果忙就等待 RS=0; /根据规定,RS和R/W同时为低电平时,可以写入指令 RW=0; E=0; /E置低电平(根据表8-6,写指令时,E为高脉冲, / 就是让E从0到1发生正跳变,所以应先置0 _nop_(); _nop_(); /空操作两个机器周期,给硬件反应时间 P0=dictate; /将数据送入P0口,即写入指令或地址 _nop_(); _nop_(); _nop_
41、(); _nop_(); /空操作四个机器周期,给硬件反应时间 E=1; /E置高电平 _nop_(); _nop_(); _nop_(); _nop_(); /空操作四个机器周期,给硬件反应时间 E=0; /当E由高电平跳变成低电平时,液晶模块开始执行命令 /*函数功能:指定字符显示的实际地址入口参数:x*/ void WriteAddress(unsigned char x) WriteInstruction(x|0x80); /显示位置的确定方法规定为80H+地址码x /*函数功能:将数据(字符的标准ASCII码)写入液晶模块入口参数:y(为字符常量)*/ void WriteData(unsigned char y) while(BusyTest()=1); RS=1; /RS为高电平,RW为低电平时,可以写入数据RW=0;E=0; /E置低电平(根据表8-6,写指令时,E为高脉冲, / 就是让E从0到1发生正跳变,所以应先置0