版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PAGEword文档可自由复制编辑word文档可自由复制编辑本科生毕业设计(论文)题目:智能型数字温度计的设计学生姓名:系别:机械与电气工程系专业年级:2011级电气工程及其自动化专业指导教师:摘要本文设计了一种多点温度数据进行采集显示系统,并对该系统的设计思路和整体框架进行了分析。简要说明了系统的硬件构成,具体阐述了系统的软件流程。系统硬件以低功耗、高性能的单片机AT89C51为核心,采用多个单总线数字温度传感器DSl8B20用于采集数据,并使用易于编程的LCD1602液晶屏用于显示。系统软件采用汇编语言和C语言混合编程实现。单片机首先选取特定的传感器,并从中读取温度数据,然后处理数据,最后将温度送入液晶屏显示。程序设计完成后进行了调试,所设计的程序完全满足要求,可以投入实际应用。关键词:温度;AT89C51;DS18B20;液晶屏1602
AbstractThisarticledesignsanewmultipletemperaturecollectinganddisplaysystem,andmakesdetaileddesigningideasandgeneralframeofmuti-temperaturecollectionandtransmissionsystem.Itelaboratesthesoftwareandexpoundsthehardwarebriefly.Systemhardwarewithlow-power,high-performanceAT89C51microcontrollerasthecore,theuseofmultiple1-wiredigitaltemperaturesensorsDSl8B20fordatacollectionanduseLCD1602whichiseasyprogrammingfordisplay.SystemsoftwareusinghybridprogrammingofassemblylanguageandClanguage.First,MCUselectsaspecificsensorandreadstemperaturedata,thenprocessthedata,andfinallysendthetemperatureintotheLCDtodisplay.Theprogramhasbeendebuggedafterdesignation.Theprogramcancomeuptotheexpectationcompletely,whichcanbeusedinpracticalapplication.Keywords:Temperature;AT89C51;DS18B20;LCD1602PAGEword文档可自由复制编辑目录HYPERLINK第一章系统硬件设计 51.1系统的总体结构 51.2温度采集端硬件电路设计 51.2.1数字式温度传感器DSl8B20 51.2.2温度采集端硬件连接图 71.3液晶显示电路设计 71.3.1液晶显示器 71.3.2LCD1602液晶显示电路连接图 9第二章温度采集程序设计 102.1DS18B20的时序 102.1.1DS18B20的复位时序 102.1.2DS18B20的读写时序 112.2DS18B20内部结构和指令 122.2.1DS18B20内部结构 122.2.2DS18B20的指令表 132.3温度测量程序 142.3.1选择DS18B20函数 142.3.2获取DS18B20序列号程序 152.3.3DS18B20测温程序 16第三章液晶显示屏(LCD)显示程序设计 183.1LCD接口定义及操作时序 183.1.1LCD接口定义 183.1.2LCD操作时序 193.2LCD内部结构及指令 203.2.1LCD液晶模块内部结构 203.2.2LCD指令表和内部显示地址 213.3LCD初始化及读写数据 233.3.1LCD初始化 233.3.2判断LCD1602是否处于忙状态 243.3.3写指令或显示数据到LCD 253.4LCD1602显示程序设计 283.4.1设定显示位置 283.4.2液晶显示程序 29HYPERLINK\l"_第四章_系统测试"第四章系统测试 31HYPERLINK\l"_4.1__工具介绍"4.1工具介绍 31HYPERLINK\l"_4.1.1_软件设计的调试环境"4.1.1软件设计的调试环境 31HYPERLINK\l"_4.1.2_程序仿真环境"4.1.2程序仿真环境 31HYPERLINK\l"_4.2_程序仿真结果"4.2程序仿真结果 32HYPERLINK\l"_4.2.1__LCD测试程序"4.2.1程序仿真环境 32HYPERLINK\l"_4.2.2__单DS18B20温度传感器温度测试程序"4.2.2单DS18B20温度传感器温度测试程序 32HYPERLINK\l"_4.2.3__DS18B20传感器ID读取程序"4.2.3S18B20传感器ID读取程序 33HYPERLINK\l"_4.2.4__单总线多个DS18B20显示程序"4.2.4单总线多个DS18B20显示程序 34HYPERLINK\l"_总结"总结 35HYPERLINK\l"致谢"致谢 36HYPERLINK\l"_参考文献"参考文献 37前言随着现代信息技术的飞速发展和传统工业改造的逐步实现,能够独立工作的温度检测和显示系统应用于诸多领域。温度作为一个重要的物理量,随着工业的不断发展,对温度测量的要求越来越高,而且测量的范围也越来越广,对温度的检测技术的要求也越来越高。随着微电子技术、计算机技术和自动测试技术的发展,人们开发出将温度传感器和数字电路集成在一起的新型数字式集成温度传感器。传统的温度检测以热敏电阻为温度敏感元件。热敏电阻的成本低,但需后续信号处理电路,而且可靠性相对较差。测温准确度低,检测系统也有一定的误差。与传统的温度计相比,这里设计的数字温度计具有读数方便,测温范围广,测温精确,数字显示,适用范围宽等特点。此次设计采用低功耗、高性能单片机AT89C51、单总线数字式测温器件DS18B20以及LCD1602液晶显示器构成测温系统。通过DSl8820直接读取被测温度值,进行数据转换,该器件的物理化学性能稳定,线性度较好,最大线性偏差小于0.1。该器件可直接向单片机传输数字信号,便于单片机处理及控制。另外,该温度计还能直接采用测温器件测量温度。从而简化数据传输与处理过程。第1章系统硬件设计1.1系统的总体结构本论文提出的多点温度采集,由温度传感器、微处理器和温度显示模块组成,微处理器命令温度传感器采集数据,然后从传感器中读取数据,数据经过处理后送入温度显示模块进行显示。系统硬件结构图如图1.1。图1.1系统硬件结构图1.2温度采集硬件电路设计1.2.1数字式温度传感器DSl8B20DSl8B20是美国DALLAS公司推出的数字式温度传感器,全部传感组件及转换电路集成在一个三极管的集成电路中。目前常用的微机与外设之间进行数据传输的串行总线主要有I²C总线、SPI总线和SCI总线[5-6]。这些总线至少需要两条或两条以上的信号线。近年来,美国DALLAS半导体公司开发了一种新技术即单总线技术。它采用单根信号线完成数据的双向传输,并且可以通过该信号线为单总线器件提供电源。它具有节省I/0口线资源、结构简单、成本低廉、便于总线扩展和维护等诸多优点,适用于远距离、多点测试、集中控制、现场缺电等场合。信息经过单线接口送入DSl8B20或从DSl8B20送出,因此从中央处理器到DSl8B20仅需连接一条线。读、写和完成温度变换所需的电源可以由数据线本身提供,而不需要外部电源。DSl8B20支持“一线总线”接口,测量温度范围为-55℃~+125℃,在-10℃~+85℃范围内,精度为±0.5℃[1]。现场温度直接以“单总线”的数字方式传输,大大提高了系统的抗干扰性。适合于恶劣环境的现场温度测量,如:环境控制、设备或过程控制、测温类消费电子产品等。=1\*Arabic1.DSl8B20特性:(1)先进的单总线数据通信。(2)全数字温度转换及输出。(3)最高12位分辨率,精度可达土0.5摄氏度。(4)12位分辨率时的最大工作周期为750毫秒。(5)全数字温度转换及输出。(6)测温范围从-55℃~+125℃,增量值为0.5℃。(7)可选择寄生工作方式。(8)检测温度范围为–55°C~+125°C(–67°F~+257°F)(9)内置EEPROM,限温报警功能。(10)64位光刻ROM,内置产品序列号,方便多机挂接。(11)多样封装形式,适应不同硬件系统。=2\*Arabic2.DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。DS18B20的引脚排列如下:(1)DQ为数字信号输入/输出端。(2)GND为电源地。(3)VDD为外接供电电源输入端(在寄生电源接线方式时接地)。3.DS18B20使用中注意事项:DSl8B20虽然具有测温系统简单、测温精度高、连接方便、占用口线少等优点,但在实际应用中也应注意以下几方面的问题:(1)较小的硬件开销需要相对复杂的软件进行补偿,由于DSl8B20与微处理器间采用串行数据传送,因此,在对DSl8B20进行读写编程时,必须严格的保证读写时序,否则将无法读取测温结果。在使用PL/M、C等高级语言进行系统程序设计时,对DSl8B20操作部分最好采用汇编语言实现。(2)在DSl8B20的有关资料中均未提及单总线上所挂DSl8B20数量问题,容易使人误认为可以挂任意多个DSl8B20,在实际应用中并非如此。当单总线上所挂DSl8B20超过8个时,就需要解决微处理器的总线驱动问题,这一点在进行多点测温系统设计时要加以注意。(3)连接DSl8B20的总线电缆是有长度限制的。当将总线电缆改为双绞线带屏蔽电缆时,正常通讯距离可达150m,当采用每米绞合次数更多的双绞线带屏蔽电缆时,正常通讯距离进一步加长。这种情况主要是由总线分布电容使信号波形产生畸变造成的。因此,在用DSl8B20进行长距离测温系统设计时要充分考虑总线分布电容和阻抗匹配问题。(4)在DSl8B20测温程序设计中,向DSl8B20发出温度转换命令后,程序总要等待DSl8B20的返回信号,一旦某个DSl8B20接触不好或断线,当程序读该DSl8B20时,将没有返回信号,程序进入死循环。1.2.2温度采集端硬件连接图系统的温度采集端完成多点温度采集,使用数字式温度传感器DS18B20。由于DS18B20具有单总线特点,可以在单片机的一个I/O口上并接多个温度传感器,节省I/0口线。硬件连接图如图1.2所示。图1.2温度采集端硬件连接原理图1.3液晶显示电路设计1.3.1液晶显示器液晶显示模块具有体积小,功耗低,显示内容丰富,超薄轻巧等优点,在袖珍式仪表和低功耗应用系统中得到广泛的应用。目前字符型液晶显示模块已经是单片机应用设计中最常用的信息显示器件。本设计选用的是LCDl602液晶显示模块,它可以显示两行,每行16个字符,采用单+5V电源供电,外围电路配置简单,价格便宜,具有很高的性价比[7]。在单片机系统中应用液晶显示器作为输出器件有以下几个优点:显示质量高、数字式接口、体积小、重量轻、功耗小。=1\*Arabic1.液晶显示原理液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。液晶显示器具有厚度薄、适用于大规模集成电路直接驱动、易于实现全彩色显示的特点,目前已经被广泛应用在便携式电脑、数字摄像机等众多领域。=2\*Arabic2.液晶显示器的分类液晶显示的分类方法有很多种,通常可按其显示方式分为段式、字符式、点阵式等。除了黑白显示外,液晶显示器还有多灰度有彩色显示等。如果根据驱动方式来分,可以分为静态驱动(Static)、单纯矩阵驱动(SimpleMatrix)和主动矩阵驱动(ActiveMatrix)三种。=3\*Arabic3.液晶显示器图形的显示原理(1)线段的显示点阵图形式液晶由M×N个显示单元组成,假设LCD显示屏有64行,每行有128列,每8列对应1字节的8位,即每行由16字节,共16×8=128个点组成,屏上64×16个显示单元与显示RAM区1024字节相对应,每一字节的内容和显示屏上相应位置的亮暗对应。例如屏的第一行的亮暗由RAM区的000H——00FH的16字节的内容决定,当(000H)=FFH时,则屏幕的左上角显示一条短亮线,长度为8个点;当(3FFH)=FFH时,则屏幕的右下角显示一条短亮线;当(000H)=FFH,(001H)=00H,(002H)=00H,……(00EH)=00H,(00FH)=00H时,则在屏幕的顶部显示一条由8段亮线和8条暗线组成的虚线。这就是LCD显示的基本原理。(2)字符的显示用LCD显示一个字符时比较复杂,因为一个字符由6×8或8×8点阵组成,既要找到和显示屏幕上某几个位置对应的显示RAM区的8字节,还要使每字节的不同位为“1”,其它的为“0”,为“1”的点亮,为“0”的不亮。这样一来就组成某个字符。但由于内带字符发生器的控制器来说,显示字符就比较简单了,可以让控制器工作在文本方式,根据在LCD上开始显示的行列号及每行的列数找出显示RAM对应的地址,设立光标,在此送上该字符对应的代码即可。1.3.2LCD1602液晶显示电路连接图V0:液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生鬼影,使用时可以通过一个10K的电位器调整对比度。RS:寄存器选择,高电平时选择数据寄存器,低电平时选择指令寄存器。R/W:读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时,可以写入指令或者显示地址,当RS为高电平,R/W为低电平时可以写入数据。E:使能端,当E端由高电平跳变成低电平时,液晶模块执行行命令。液晶显示电路连接图如图1.3。图1.3LCD1602与单片机的硬件连接图LCD1602的数据总线接到单片机的P3口,RS、R/W和E分别由单片机的P1.5、P1.6和P1.7控制。液晶LCD1602连线方便,编程简单,适于在单片机应用设计。第2章温度采集程序设计2.1DS18B20的时序由于DS18B20采用的是1-Wire总线协议方式,即在一根数据线实现数据的双向传输,而对AT89C51单片机来说,硬件上并不支持单总线协议,因此,我们必须采用软件的方法来模拟单总线的协议时序来完成对DS18B20芯片的访问。由于DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。该协议定义了几种信号的时序:初始化时序、读时序、写时序。所有时序都是将主机作为主设备,单总线器件作为从设备。而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。数据和命令的传输都是低位在先。2.1.1DS18B20的复位时序DS18B20的复位时序如图2.1所示,主机发出复位脉冲,DS18B20的单总线即(DQ)接收到高电平,最少480us,最多960us。主机将DQ拉低,延时大于480us,然后DS18B20发出应答脉冲,DQ为0复位成功,否则失败,继续复位。主机发出复位脉冲min:480us主机发出复位脉冲min:480usmax:960us主机接收所需最短时间480usDS18B20发出应答脉冲15~60usDQGND图2.1DS18B20的复位时序2.1.2DS18B20的读写时序对于DS18B20的读时序分为读0时序和读1时序两个过程,如图2.2所示。DS18B20的读时隙是从主机把单总线拉低之后,在15us之内就得释放单总线,以让DS18B20把数据传输到单总线上。DS18B20在完成一个读时序过程,至少需要60us才能完成。主机读0或读1时隙主机读0或读1时隙DQGND主CPU采样>1us15us15us30us图2.2DS18B20的读时序对于DS18B20的写时序仍然分为写0时序和写1时序两个过程如图2.3和2.4。DS18B20写0时序和写1时序的要求不同,当要写0时序时,单总线要被拉低至少60us,保证DS18B20能够在15us到45us之间能够正确地采样IO总线上的“0”电平,当要写1时序时,单总线被拉低之后,在15us之内就得释放单总线。主机写0时隙主机写0时隙60~120usDQGNDDS18B20采样>1us15us15us30us>1us图2.3DS18B20的写0时序主机写1时隙60~120us主机写1时隙60~120usDQGNDDS18B20采样区>1us15us15us30us图2.4DS18B20写1时序2.2DS18B20内部结构和指令2.2.1DS18B20内部结构DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器[14]。光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码。64位光刻ROM的排列是:开始8位(28H)是产品类型标号,接着的48位是该DS18B20自身的序列号,最后8位是前面56位的循环冗余校验码(CRC=X8+X5+X4+1)。光刻ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。DS18B20中的温度传感器可完成对温度的测量,以12位转化为例:用16位符号扩展的二进制补码读数形式提供,以0.0625℃/LSB形式表达,其中S为符号位。见表2.1。表2.1温度值存放格式LSBytebit7bit6bit5bit4bit3bit2bit1bit0MSBytebit15bit14bit13bit12bit11bit10bit9bit8SSSSS12位转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的EEPRAM,后者存放高温度和低温度触发器TH、TL和结构寄存器。用户还可根据实际情况设定非易失性温度报警上下限值TH和TL。DS18B20检测到温度值经转换为数字量后,自动存入存储器中,并与设定值TH或TL进行比较,当测量温度超出给定范围时,就输出报警信号,并自动识别是高温超限还是低温超限。高速暂存存储器包含了8个连续字节,前两个字节是测得的温度信息,第一个字节的内容是温度的低八位,第二个字节是温度的高八位。第三个和第四个字节是TH、TL的易失性拷贝,第五个字节是结构寄存器的易失性拷贝,这三个字节的内容在每一次上电复位时被刷新。第六、七、八个字节用于内部计算。第九个字节是冗余检验字节。2.2.2DS18B20的指令表在编程过程中需要给单总线写入命令,如常用的启动温度转换,读出DS18B20的序列号,匹配ROM以选定温度传感器。表2.2和表2.3中是常用的ROM和RAM指令。表2.2ROM指令表指令约定代码功
能读ROM33H读DS1820ROM中的编码(即64位地址)符合ROM55H发出此命令之后,接着发出64位ROM编码,访问单总线上与该编码相对应的DS1820使之作出响应,为下一步对该DS1820的读写作准备。搜索ROM0F0H用于确定挂接在同一总线上DS1820的个数和识别64位ROM地址。为操作各器件作好准备。跳过ROM0CCH忽略64位ROM地址,直接向DS1820发温度变换命令。适用于单片工作。告警搜索命令0ECH执行后只有温度超过设定值上限或下限的片子才做出响应。表2.3RAM指令表指令约定代码功
能温度变换44H启动DS1820进行温度转换,转换时最长为500ms(典型为200ms)。结果存入内部9字节RAM中。读暂存器0BEH内部RAM中9字节的内容写暂存器4EH发出向内部RAM的3、4字节写上、下限温度数据命令,紧跟该命令之后,是传送两字节的数据。复制暂存器48H将RAM中第3、4字节的内容复制到EEPROM中。2.3温度测量程序2.3.1选择DS18B20函数每一个DS18B20在出厂时就有一个特有的序列号,所以在访问它的时候,会进行序列号的匹配,匹配正确,可以对它进行读写,否则不可以。如果在一定的条件下,写入SkipROM命令(写入0xcc),默认情况下跳过匹配过程。当单总线上接多个DSl8B20时,用各个芯片的ID号选中特定的芯片进行操作。如果己经获得ID号,则先发送寻求匹配命令(OX55H),再发送ID号,选中特定的DSl8B20。ucharcodeid[4][8]={{…},/*保存已有18b20ID*/{…},};/********************************************选择ds18b20********************************************/voidselectedDq(ucharselect){uchari;if(select>3)writeByte(0xcc);//默认状况下SkipROMelse{writeByte(0x55);//matchROMfor(i=0;i<8;i++){writeByte(id[select][i]);//将选中的DS18B20序列号写入}}}2.3.2获取DS18B20序列号程序如果还没有获得特定DSl8B20的ID号,先只接一个DSl8B20,发送读序列号命令(OX33H),然后读取DSl8B20返回的该芯片自身的lD号,将读出的多个DSl8B20芯片的ID号顺序保存到单片机EEPROM的指定位置。在进行温度采集与无线传输系统设计之前,先把4个DS18B20的序列号读出,方便后面的调试需要。通过单片机开发板与计算机连接,使用串口调试助手这个界面将序列号读出。voidmain(void){uchari;uintj;resetDQ();//ds18b20复位writeByte(0x33);//写ReadRom命令for(i=0;i<8;i++)//读取id{ids[i]=readByte();}SCON=0x40;//串口方式1PCON=0;//SMOD=0REN=1;//允许接收TMOD=0x20;//定时器1定时方式2TH1=0xe8;//11.059MHz1200波特率TL1=0xe8;TR1=1;//启动定时器while(1){for(i=0;i<8;i++){SBUF=ids[i];//DS18B20的序列号通过串行调试读出while(TI==0);TI=0;}for(j=0;j<50000;j++);}}2.3.3DS18B20测温程序应用DS18B20的温度采集电路进行温度测量时,先对总线复位,发送转换命令0x44,等待转换结束,再对总线复位,然后发读温度命令0xbe,读出温度值低字节、高字节,并将两字节合成一个整型变量。测温流程图见图2.5。开始开始总线复位延时选择DS18B20发转换命令总线复位延时发读温度命令读温度值低字节读温度值高字节两字节合成一个整形变量返回温度值结束图2.5DS18B20测温流程图resetDQ();//总线复位_nop_();//延时selectedDq(selected);writeByte(0x44);//发转换命令resetDQ();//总线复位selectedDq(selected);writeByte(0xbe);//发读温度命令tempdata[0]=readByte();//读温度值的低字节tempdata[1]=readByte();//读温度值的高字节temp=tempdata[1];//温度值高字节先赋给temptemp<<=8;//temp左移8位,高字节放在高8位temp=temp|tempdata[0];//两字节合成一个整型变量returntemp;//返回温度值 第三章液晶显示屏(LCD)显示程序设计3.1LCD接口定义及操作时序3.1.1LCD接口定义LCD1602采用标准的14脚(无背光)或16脚(带背光)接口,设计采用16脚(带背光)LCD,各引脚接口如表3.1所示:表3.1引脚接口表编号符号引脚编号符号引脚1VSS电源地9D2数据2VDD电源正极10D3数据3VL液晶显示偏压11D4数据4RS数据/命令选择12D5数据5R/W读/写选择13D6数据6E使能信号14D7数据7D0数据15BLA背光源正极8D1数据16BLK背光源负极第1脚:VSS为地电源。第2脚:VDD接5V正电源。第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。因此当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第7~14脚:D0~D7为8位双向数据线。第15脚:背光源正极。第16脚:背光源负极。在使用过程中,首先注意引脚的位置,不同的型号位置不同,可能造成使用不便,其次,注意检查引脚的排列方向,包括引脚整体的排列方向以及与控制器相连时数据线的方向是否正确。3.1.2LCD操作时序本设计选用的是LCDl602液晶显示模块,外围电路配置简单,编程时需要明确LCD的操作时序。LCD操作时序见表3.2:表3.2LCD操作时序表读状态输入RS=L,R/W=H,E=H输出D0—D7=状态字写指令输入RS=L,R/W=L,D0—D7=指令码,E=高脉冲输出无读数据输入RS=H,R/W=H,E=H输出D0—D7=数据写数据输入RS=H,R/W=L,D0—D7=数据,E=高脉冲输出无R/W为读写信号线,低电平时进行写操作。因此当RS=0和R/W=0时可以写入指令或者显示地址,当RS=1和R/W=0时可以写入数据。LCD写操作时序如图3.1:图3.1LCD写操作时序R/W为高电平时进行读操作。当RS=0,R/W=1时可以读状态信号,当RS=1和R/W=0时可以读出数据。LCD读操作时序如图3.2:图3.2LCD读操作时序3.2LCD内部结构及指令3.2.1LCD液晶模块内部结构模块组件内部主要由LCD显示屏、控制器、列驱动和偏压产生电路构成。LCD显示屏为common和segment交叉形成的点阵。列驱动器与控制器配套使用,它接收来自控制器的振荡、帧同步输出、串行输出的数据和移位及锁存脉冲,产生列segment交流扫描驱动信号。控制器接收来自MPU的指令和数据,控制着整个模块的工作,由CGTOM、CGRAM和DDRAM等字符存储区域、以及与MPU和列驱动器的I/O接口、指令寄存和译码机构、地址计数器等部分组成。在控制器的控制下,模块通过数据总线DB0~DB7和E、R/W、RS三个输入控制端与MPU接口。这三根控制线按照规定的时序相互协调作用,使控制器通过数据总线DB接收MPU发送来的指令和数据,从CGROM中找到欲显示字符的字符码,送入DDRAM,在LCD显示屏上与DDRAM存储单元对应的规定位置显示出该字符。控制器还可以根据MPU的指令,实现字符的显示、闪烁和移位等显示效果。控制器主要由指令寄存器IR、数据寄存器DR、忙标志BF、地址计数器AC、DDRAM、CGROM、CGRAM以及时序发生电路组成:指令寄存器IR和数据寄存器DR本模块内部具有两个8位寄存器:指令寄存器IR和数据寄存器DR。用户可以通过RS和R/W输入信号的组合选择指定的寄存器,进行相应的操作,组合见表3.3表3.3组合选择方式ERSR/W说明101分别将状态标志BF和地址计数器AC内容读到DB7和DB6~DB01-0下降沿00将DB0~DB7的指令代码写入指令寄存器中111将数据寄存器内的数据读到DB0~DB7,模块的内部操作自动将DDRAM或者CGRAM中的数据送入数据寄存器中1-0下降沿10将DB0~DB7的数据写入数据寄存器内,模块的内部操作自动将数据写到DDRAM或者CGRAM中忙标志位BF忙标志位BF=1时,表明模块正在进行内部操作,此时不接受任何外部指令和数据。当RS=0、R/W=1以及E为高电平时,BF输出到DB7。每次操作之前最好先进行状态字检测,只有在确认BF=0之后,MPU才能访问模块。地址计数器ACAC地址计数器是DDRAM或者CGRAM的地址指针。随着IR中指令码的写入,指令码中携带的地址信息自动送入AC中,并行做出AC作为DDRAM的地址指针还是CGRAM的地址指针的选择。AC具有自动加1或者减1的功能。当DR与DDRAM或者CGRAM之间完成一次数据传送后,AC自动会加1或减1。在RS=0、R/W=1以及E为高电平时,AC的内容送到DB6~DB0。3.2.2LCD指令表和内部显示地址1602液晶模块内部的控制器共有11条控制指令,如表3.4所示:表3.4控制命令表序号指令RSR/WD7D6D5D4D3D2D1D01清显示00000000012光标返回000000001*3置输入模式00000001I/DS4显示开/关控制0000001DCB5光标或字符移位000001S/CR/L**6置功能00001DLNF**7置字符发生存贮器地址0001字符发生存贮器地址8置数据存贮器地址001显示数据存贮器地址9读忙标志或地址01BF计数器地址10写数到CGRAM或DDRAM)10要写的数据内容11从CGRAM或DDRAM读数11读出的数据内容1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明: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:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。指令10:写数据。指令11:读数据。液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,图3.3是1602的内部显示地址。图3.3LCD1602内部显示地址例如第二行第一个字符的地址是40H,那么是否直接写入40H就可以将光标定位在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位D7恒定为高电平1所以实际写入的数据应该是01000000B(40H)+10000000B(80H)=11000000B(C0H)。在对液晶模块的初始化中要先设置其显示模式,在液晶模块显示字符时光标是自动右移的,无需人工干预。每次输入指令前都要判断液晶模块是否处于忙的状态。3.3LCD初始化及读写数据3.3.1LCD初始化LCD的初始化设定LCD的功能和显示模式以及输入模式,流程图如图3.4。voidinitLCD1602(void){wrLCDCmd(CLEAR);/*清屏*/delay_11us(200);/*延时>1.64ms*/wrLCDCmd(FUNC);/*功能设置*/delay_11us(5);/*延时>40us*/wrLCDCmd(DISP);/*显示设置*/delay_11us(5);/*延时>40us*/wrLCDCmd(MODE);/*输入模式设置AC自动加1*/delay_11us(5);/*延时>40us*/wrLCDCmd(CLEAR);/*清屏*/delay_11us(200);/*延时>1.64ms*/}开始开始清屏延时>1.64ms输入模式设置AC自动加1延时>40us清屏延时>1.64ms结束功能设置延时>40us显示设置延时>40us图3.4LCD初始化设定流程图3.3.2判断LCD1602是否处于忙状态bitisLCDBusy(void){bitisBusy;LCD_RS=0;/*控制寄存器选择*/LCD_RW=1;/*读操作*/LCD_EN=1;/*高电平读*/delay_11us(1);isBusy=LCD_BF;/*读LCD的BF位*/LCD_EN=0;/*LCD使能端赋0*/returnisBusy;/*返回isBusy的值*/}判断LCD1602是否处于忙状态流程图如图3.5。开始开始RS=0,选指令寄存器RW=1,读操作LCD_EN=1,读读LCD的BF位LCD_EN=0返回isBusy的值结束图3.5判断LCD1602是否处于忙状态流程图3.3.3写指令或显示数据到LCDvoidwrLCDCmd(ucharcmd){while(isLCDBusy());/*LCD空闲时执行下一句*/LCD_RS=0;/*控制寄存器选择*/LCD_RW=0;/*写操作*/LCD_EN=0;/*LCD使能端赋0*/LCD_DB=cmd;/*输出命令*/delay_11us(1);LCD_EN=1;/*LCD使能*/delay_11us(2);LCD_EN=0;/*下降沿写数据*/}写指令数据到LCD,等其空闲时,选择命令寄存器,操作为写操作,EN为0,输出命令,LCD使能,等下降沿到来写数据。流程图见图3.6。开始开始LCD忙?RS=0,选指令寄存器RW=0,写操作LCD_EN=0输出命令,指令数据LCD_EN=1,使能EN=0,下降沿写数据结束NY图3.6写指令数据到LCD流程图voidwrLCDDat(uchardat){while(isLCDBusy());/*LCD空闲时执行下一句*/LCD_RS=1;/*数据寄存器选择*/LCD_RW=0;/*写操作*/LCD_EN=0;/*LCD使能端赋0*/LCD_DB=dat;/*输出命令*/delay_11us(1);LCD_EN=1;/*LCD使能*/delay_11us(2);LCD_EN=0;/*下降沿写数据*/}写显示数据到LCD流程图见图3.7。开始开始LCD忙?RS=1,选数据寄存器RW=0,写操作LCD_EN=0输出命令,显示数据LCD_EN=1,使能EN=0,下降沿写数据结束NY图3.7写显示数据到LCD流程图3.4LCD1602显示程序设计3.4.1设定显示位置voidsetAddrLCD(ucharpos){wrLCDCmd(pos|0x80);/*数据指针=80+地址变量*/delay_11us(5);/*延时>40us*/}注意:因为写入显示地址时要求最高位D7恒定为高电平1,所以实际写入的数据应该是地址变量+10000000B(80H)。3.4.2液晶显示程序LCD显示内容,先设置显示位置,即可将欲显示的内容显示在屏幕上。依次,先设第一行,然后第二行。LCD显示流程图见图3.8。voiddispLCD(void){ucharm;setAddrLCD(0x00);/*设置第一行*/for(m=0;m<DISPLONG0;m++){wrLCDDat(myLine0[m]);}setAddrLCD(0x40);/*设置第二行*/for(m=0;m<DISPLONG1;m++){wrLCDDat(myLine1[m]);}}开始开始LCD初始化延时>1.64ms结束设置第一行显示位置显示第一行设置第二行显示位置显示第二行图3.8LCD显示流程图
第四章系统测试4.1工具介绍在单片机系统的开发中通常用到两个工具:Keil和Protues。前者用于编写单片机程序,并编译连接生成目标文件。而Protues则模拟了MCU的运行,比较直观的显示程序的运行结果。4.1.1软件设计的调试环境KeilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。用过汇编语言后再使用C来开发,体会更加深刻[13]。KeilC51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。KeilC51单片机软件开发系统的整体结构中uVision与Ishell分别是C51forWindows和forDos的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。然后分别由C51及A51编译器编译生成目标文件(.OBJ)。目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。4.1.2程序仿真环境Protues软件是英国Labcenterelectronics公司出版的EDA工具软件。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是目前世
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- minus-Menthone-Standard-生命科学试剂-MCE
- 医院护理人员绩效考核方案
- 课程设计航班订票系统
- 认知策略课程设计
- 《画人像》教学反思
- 裁剪课程设计制作方法
- 课程设计悬架减震器设计
- 高速公路路基防护排水工程施工方案
- 2024幼儿园防恐防暴应急预案
- 采掘技术课程设计
- 洗车店管理制度
- 2022版道德与法治新课程标准课标测试卷测试题库(含答案)(教师招聘试卷教资考试)
- 高中英语选修一(人教版)2-1Looking into the Future 教学课件
- 电动汽车充电桩申请安装备案表
- 想起这件事-我就-课件
- 中控立磨操作考试试题
- 苏教版三年级上册数学第三单元练习题【含答案】
- 社会主义从空想到科学的发展第二章课件
- 生产运作管理 第四版 陈荣秋 马士华 课后答案
- 云教版劳技七年级上册第二章第三节家庭理财技巧课件
- 测试转板记录表
评论
0/150
提交评论