《51单片机LCD1602液晶显示测温系统(共45页).docx》由会员分享,可在线阅读,更多相关《51单片机LCD1602液晶显示测温系统(共45页).docx(45页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上 目 录第一部分 设计任务1.1设计题目及求要求31.2.1 方案一31.2.4 方案分析3第二部分 设计方案2.1 总体设计方案说明32.2 实物电路图4第三部分 电路设计与器件选择3.1 DS18B20工作原理和功能说明4 3.2 LCD1602工作原理和功能说明16第四部分4.1实验程序28 第五部分5.1课程设计总结 (心得体会)34第六部分 6.1参考文献341.1设计题目及求要求用电子元器件和单片机通过编写程序做成能实时显示温度的仪器。1.2.1 方案用通用型1602液晶显示器和DS18B20温度传感器组成温度显示仪,并编写程序用51单片机来控制和连接16
2、02液晶显示器和DS18B20温度传感器。1.2.2 方案分析1602液晶显示器能显示ASCII码字符,数字、大小写字母、和各种符号。而且其体积小、功耗低、显示操作简单,显示值清晰,正常温度范围为-20+60。DS18B20温度传感器采用单总线协议,与单片机接口仅需用一个I/O接口无需任何外部元件,直接将环境温度转化成数字信号,从而大大简化了传感器于微处理机的接口。DS18B20温度传感器支持多点组网功能,多个DS18B20可以并联在唯一的三线上,其测试范围在-50+125.C。测试结果直接输出数字温度信号,以“一位总线”串行传送给CPU,同时可传送CRC效验码,具有极强的抗干扰纠错能力。电源
3、板极性接反时,芯片不会因发热而烧毁。且它具有微型化、低功耗、高新能、抗干扰能力强、一赔微处理器等优点。考虑到1602液晶显示器和DS18B20温度传感器有诸多优点,顾用二者来完成实验。2.1总体设计方案说明分别用DS18B20温度传感器和1602液晶显示器来测试温度和现实数据。编写程序和利用51单片机来控制电路。2.2实物电路图3.1DS18B20的工作原理 DS18B20数字温度传感器概述DS18B20数字温度传感器是DALLAS公司生产的1Wire,即单总线器件,具有线路简单,体积小的特点。因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计,十分方便。DS1
4、8B20产品的特点l 只要求一个端口即可实现通信。l 在DS18B20中的每个器件上都有独一无二的序列号。l 实际应用中不需要外部任何元器件即可实现测温。l 测量温度范围在55.C到125.C之间。l 数字温度计的分辨率用户可以从9位到12位选择。l 内部有温度上、下限告警设置。TO92封装的DS18B20的引脚排列见右图,其引脚功能描述见表序号名称引脚功能描述1GND地信号2DQ数字输入输出引脚,开漏单总线接口引脚,当使用寄生电源时,可向电源提供电源3VDD可选择的VDD引脚,当工作于寄生电源时,该引脚必须接地表3-2DS18B20详细引脚功能描述 DS18B20的内部结构DS18B20的内
5、部框图下图所示,DS18B20 的内部有64 位的ROM 单元,和9 字节的暂存器单元。64位ROM存储器件独一无二的序列号。暂存器包含两字节(0和1字节)的温度寄存器,用于存储温度传感器的数字输出。暂存器还提供一字节的上线警报触发(TH)和下线警报触发(TL)寄存器(2和3字节),和一字节的配置寄存器(4字节),使用者可以通过配置寄存器来设置温度转换的精度。暂存器的5、6和7字节器件内部保留使用。第八字节含有循环冗余码(CRC )。使用寄生电源时,DS18B20不需额外的供电电源;当总线为高电平时,功率由单总线上的上拉电阻通过DQ引脚提供;高电平总线信号同时也向内部电容CPP充电,CPP在总
6、线低电平时为器件供电。(字节58 就不用看了)。 图为 暂存器 暂存器介绍A. 温度寄存器(0和1字节)DS18B20中的温度传感器可完成对温度的测量,以12位转化为例:用16位符号扩展的二进制补码读数形式提供,以0.0625/LSB形式表达,其中S为符号位。这是12位转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。DS18B20 的温度操作是使用16 位,也就是说分辨率是0.062
7、5。BIT15BIT11 是符号位,为了就是表示转换的值是正数还是负数。要求出正数的十进制值,必须将读取到的LSB 字节,MSB 字节进行整合处理,然后乘以0.0625 即可。Eg:假设从,字节0 读取到0xD0 赋值于Temp1,而字节1 读取到0x07 赋值于Temp2,然后求出十进制值。unsigned int Temp1,Temp2,Temperature;Temp1=0xD0; /低八位Temp2=0x07; /高八位Temperature = (Temp28 ) | Temp1 ) * 0.0625;/又或者Temperature = (Temp1 + Temp2 *256) *
8、0.0625; /Temperature=125在这里我们遇见了一个问题,就是如何求出负数的值呢?我们必须判断BIT1115 是否是1,然后人为置一负数标志。Eg. 假设从,字节0 读取到0x90 赋值于Temp1,而字节1 读取到0xFC 赋值于Temp2,然后求出该值是不是负数,和转换成十进制值。 unsigned int Temp1,Temp2,Temperature;unsigned char Minus_Flag=0;Temp1=0x90; /低八位Temp2=0xFC; /高八位 /Temperature = (Temp1 + Temp2 *256) * 0.0625; /Temp
9、erature=64656/很明显不是我们想要的答案if(Temp2&0xFC) /判断符号位是否为1Minus_Flag=1; /负数标志置一Temperature = (Temp28 ) | Temp1 ) /高八位第八位进行整合Temperature= (Temperature)+1); /求反,补一Temperature*= 0.0625; /求出十进制 /Temperature=55;elseMinus_Flag=0;Temperature = (Temp28 ) | Temp1 ) * 0.0625;如果我要求出小数点的值的话,那么我应该这样做。Eg:假设从,字节0 读取到0xA2
10、 赋值于Temp1,而字节1 读取到0x00 赋值于Temp2,然后求出十进制值,要求连同小数点也求出。unsigned int Temp1,Temp2,Temperature;Temp1=0x90; /低八位Temp2=0xFC; /高八位/实际值为10.125/Temperature = (Temp28 ) | Temp1 ) * 0.0625; /10,无小数点Temperature = (Temp28 ) | Temp1 ) * (0.0625 * 10) ; /101 ,一位小数点/Temperature = (Temp20)i-; ds=1; i=4; while(i0)i-; D
11、S18B20所有的数据交换都由一个初始化序列开始。由主机发出的复位脉冲和跟在其后的由DS18B20发出的应答脉冲构成。当DS18B20发出响应主机的应答脉冲时,即向主机表明它已处在总线上并且准备工作。b.读和写时序 在写时序期间,主机向DS18B20写入指令;而在读时序期间,主机读入来自DS18B20的指令。在每一个时序,总线只能传输一位数据。读/写时序如图3-9所示。l 写时序存在两种写时序:“写1”和“写0”。主机在写1时序向DS18B20写入逻辑1,而在写0时序向DS18B20写入逻辑0。所有写时序至少需要60s,且在两次写时序之间至少需要1s的恢复时间。两种写时序均以主机拉低总线开始。
12、在写时序开始后的15s60s期间,DS18B20采样总线的状态。如果总线为高电平,则逻辑1被写入DS18B20;如果总线为低电平,则逻辑0被写入DS18B20。l 写时序 DS18B20 写步骤如下:1.单片机拉低电平大约1015us,。2.单片机持续送指定电平大约2045us 的时间。3.释放总线 如果要读或者写一个字节,就要重复以上的步骤八次。使用for 循环,和数据变量的左移和或运算,实现一个字节读与写。函数延迟的时间,必须模拟非常准确,因为单线总线对时序的要求敏感点。/向 1-WIRE 总线上写一个字节void tempwritebyte(BYTE dat) /向18B20写一个字节数
13、据 uint i; BYTE j; bit testb; for(j=1;j1; if(testb) /写 1 ds=0; i+;i+; ds=1; i=8;while(i0)i-; else ds=0; /写 0 i=8;while(i0)i-; ds=1; i+;i+; l 读时序DS18B20 读步骤如下:1.在读取的时候单片机拉低电平大约1us2.单片机释放总线,然后读取总线电平。这时候DS18B20 会送出电平。3.读取电平过后,延迟大约4045 微妙/从 1-wire 总线上读取一个字节bit tempreadbit(void) /读1位函数 uint i; bit dat; ds
14、=0;i+; /i+ 起延时作用 ds=1;i+;i+; dat=ds; i=8;while(i0)i-; return (dat);BYTE tempread(void) /读1个字节 BYTE i,j,dat; dat=0; for(i=1;i=8;i+) j=tempreadbit(); dat=(j1); /读出的数据最低位在最前面,这样刚好一个字节在DAT里 return(dat); A . DS18B20 开始转换:1.DS18B20 复位。2.写入跳过ROM 的字节命令,0xCC。3.写入开始转换的功能命令,0x44。4.延迟大约750900 毫秒B . DS18B20 读暂存数
15、据:1.DS18B20 复位。2.写入跳过ROM 的字节命令,0xCC。3.写入读暂存的功能命令,0xee。4.读入第0 个字节LS Byte,转换结果的低八位。5.读入第1 个字节MS Byte,转换结果的高八位。6.DS18B20 复位,表示读取暂存结束。/读取温度void tempchange(void) /DS18B20 开始获取温度并转换 dsreset(); delay(1); tempwritebyte(0xcc); / 写跳过读ROM指令 tempwritebyte(0x44); / 写温度转换指令uint get_temp() /读取寄存器中存储的温度数据 BYTE a,b;
16、 dsreset(); delay(1); tempwritebyte(0xcc); tempwritebyte(0xbe); a=tempread(); /读低8位 b=tempread(); /读高8位 temp=b; temp执行ROM 指令-执行DS18B20 功能指令。而在单点上,可以直接跳过ROM 指令。DS18B20 的转换精度默认为12 位,而分辨率是0.0625。DS18B20 温度读取函数参考步骤:A . DS18B20 开始转换:1.DS18B20 复位。2.写入跳过ROM 的字节命令,0xCC。3.写入开始转换的功能命令,0x44。4.延迟大约750900 毫秒B .
17、DS18B20 读暂存数据:1.DS18B20 复位。2.写入跳过ROM 的字节命令,0xCC。3.写入读暂存的功能命令,0xee。4.读入第0 个字节LS Byte,转换结果的低八位。5.读入第1 个字节MS Byte,转换结果的高八位。6.DS18B20 复位,表示读取暂存结束。C . 数据求出十进制:1.整合LS Byte 和MS Byte 的数据2.判断是否为正负数(可选)3.求得十进制值。正数乘以0.0625,一位小数点乘以0.625,二位小数点乘以6.25。4.十进制的“个位”求出。DS18B20的应用电路 DS18B20测温系统具有测温系统简单、测温精度高、连接方便、占用口线少等
18、优点。下面就是DS18B20几个不同应用方式下的测温电路图: 1 .DS18B20寄生电源供电方式电路图 如下图所示,在寄生电源供电方式下,DS18B20从单线信号线上汲取能量:在信号线DQ处于高电平期间把能量储存在内部 电容里,在信号线处于低电平期间消耗电容上的电能工作,直到高电平到来再给寄生电源(电容)充电。 独特的寄生电源方式有三个好处: 1)进行远距离测温时,无需本地电源 2)可以在没有常规电源的条件下读取ROM 3)电路更加简洁,仅用一根I/O口实现测温 要想使DS18B20进行精确的温度转换,I/O线必须保证在温度转换期间提供足够的能量,由 于每个DS18B20在温度转换期间工作电
19、流达到1mA,当几个温度传感器挂在同一根I/O线上进行多点测温时,只靠4.7K上拉电阻就无法提供足够的 能量,会造成无法转换温度或温度误差极大。 因此,此电路只适应于单一温度传感器测温情况下使用,不适宜采用电池供电系统中。并且工作电源VCC必须保证在5V,当电源电压下降时,寄生电源能够汲取的能量也降低,会使温度误差变大。 2. DS18B20的外部电源供电方式 在外部电源供电方式下,DS18B20工作电源由VDD引脚接入,此时I/O线不需要强上拉,不存在电源电流不足的问题,可以保证 转换精度,同时在总线上理论可以挂接任意多个DS18B20传感器,组成多点测温系统。注意:在外部供电的方式下,DS
20、18B20的GND引脚不能悬空 ,否则不能转换温度,读取的温度总是85。 外部供电方式单点测温电路 外部供电方式的多点测温电路图 图7外部电源供电方式是DS18B20最佳的工作方式,工作稳定可靠,抗干扰能力强,而且电路也比较简单,可以开发出稳定可靠的多点温度 监控系统。站长推荐大家在开发中使用外部电源供电方式,毕竟比寄生电源方式只多接一根VCC引线。在外接电源方式下, 可以充分发挥DS18B20宽电源电压范围的优点,即使电源电压VCC降到3V时,依然能够保证温度量精度。 DS1820使用中注意事项 DS1820虽然具有测温系统简单、测温精度高、连接方便、占用口线少等优点,但在实际应用中也应注意
21、以下几方面的问题: 1、 较小的硬件开销需要相对复杂的软件进行补偿,由于DS1820与微处理器间采用串行数据传送,因此 ,在对DS1820进行读写编程时,必须严格的保证读写时序,否则将无法读取测温结果。在使用PL/M、C等高级语言进行系统程序设计时,对 DS1820操作部分最好采用汇编语言实现。 2、 在DS1820的有关资料中均未提及单总线上所挂DS1820数量问题,容易使人误认为可以挂任意多个 DS1820,在实际应用中并非如此。当单总线上所挂DS1820超过8个时,就需要解决微处理器的总线驱动问题,这一点在进行多点测温系统设计时 要加以注意。3、 连接DS1820的总线电缆是有长度限制的
22、。试验中,当采用普通信号电缆传输长度超过50m时,读取的 测温数据将发生错误。当将总线电缆改为双绞线带屏蔽电缆时,正常通讯距离可达150m,当采用每米绞合次数更多的双绞线带屏蔽电缆时,正 常通讯距离进一步加长。这种情况主要是由总线分布电容使信号波形产生畸变造成的。因此,在用DS1820进行长距离测温系统设计时要充分考 虑总线分布电容和阻抗匹配问题。4、 在DS1820测温程序设计中,向DS1820发出温度转换命令后,程序总要等待DS1820的返回信号,一旦 某个DS1820接触不好或断线,当程序读该DS1820时,将没有返回信号,程序进入死循环。这一点在进行DS1820硬件连接和软件设计时也要
23、给予 一定的重视。 测温电缆线建议采用屏蔽4芯双绞线,其中一对线接地线与信号线,另一组接VCC和地线,屏蔽层在源端单点接地。 3.2LCD1602液晶显示简介液晶显示原理液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。液晶显示器具有厚度薄、适用于大规模集成电路直现全彩色显示的特点,目前已经被广泛应用在便携式电脑、数字摄像机、PDA移动通信工具等众多领域。液晶显示器的分类液晶显示的分类方法有很多种,通常可按其显示方式分为段式、字符式、点阵式等。除了黑白显示外,液晶显示器还有多灰度有彩色显示等。如果根据驱动方式来分,可以分为静态驱动(Stati
24、c)、单纯矩阵驱动(Simple Matrix)和主动矩阵驱动(Active Matrix)三种。液晶显示器各种图形的显示原理:线段的显示点阵图形式液晶由MN个显示单元组成,假设LCD显示屏有64行,每行有128列,每8列对应1字节的8位,即每行由16字节,共168=128个点组成,屏上6416个显示单元与显示RAM区1024字节相对应,每一字节的内容和显示屏上相应位置的亮暗对应。例如屏的第一行的亮暗由RAM区的000H00FH的16字节的内容决定,当(000H)=FFH时,则屏幕的左上角显示一条短亮线,长度为8个点;当(3FFH)=FFH时,则屏幕的右下角显示一条短亮线;当(000H)=FF
25、H,(001H)=00H,(002H)=00H,(00EH)=00H,(00FH)=00H时,则在屏幕的顶部显示一条由8段亮线和8条暗线组成的虚线。这就是LCD显示的基本原理。字符的显示用LCD显示一个字符时比较复杂,因为一个字符由68或88点阵组成,既要找到和显示屏幕上某几个位置对应的显示RAM区的8字节,还要使每字节的不同位为“1”,其它的为“0”,为“1”的点亮,为“0”的不亮。这样一来就组成某个字符。但由于内带字符发生器的控制器来说,显示字符就比较简单了,可以让控制器工作在文本方式,根据在LCD上开始显示的行列号及每行的列数找出显示RAM对应的地址,设立光标,在此送上该字符对应的代码即
26、可。汉字的显示汉字的显示一般采用图形的方式,事先从微机中提取要显示的汉字的点阵码(一般用字模提取软件),每个汉字占32B,分左右两半,各占16B,左边为1、3、5右边为2、4、6根据在LCD上开始显示的行列号及每行的列数可找出显示RAM对应的地址,设立光标,送上要显示的汉字的第一字节,光标位置加1,送第二个字节,换行按列对齐,送第三个字节直到32B显示完就可以LCD上得到一个完整汉字。2 1602字符型LCD简介字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,目前常用16*1,16*2,20*2和40*2行等的模块。下面以长沙太阳人电子有限公司的1602字符型液晶显示器为例
27、,介绍其用法。一般1602字符型液晶显示器实物如图:图1602字符型液晶显示器实物图108.2.1 1602LCD的基本参数及引脚功能1602LCD主要技术参数:显示容量:162个字符芯片工作电压:4.55.5V工作电流:2.0mA(5.0V)模块最佳工作电压:5.0V字符尺寸:2.954.35(WH)mm引脚功能说明1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表10-13所示:编号符号引脚说明编号符号引脚说明1VSS电源地9D2数据2VDD电源正极10D3数据3VL液晶显示偏压11D4数据4RS数据/命令选择12D5数据5R/W读/写选择13D6数据6E使
28、能信号14D7数据7D0数据15BLA背光源正极8D1数据16BLK背光源负极表10-13:引脚接口说明表第1脚:VSS为地电源。第2脚:VDD接5V正电源。第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。第6脚:
29、E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第714脚:D0D7为8位双向数据线。第15脚:背光源正极。第16脚:背光源负极。1602LCD的指令说明及时序1602液晶模块内部的控制器共有11条控制指令,如表所示:序号指令RSR/WD7D6D5D4D3D2D1D01清显示(01H)00000000012()光标返回(02H)000000001*3置输入模式(04H-07H)00000001I/DS4显示开/关控制(08H-0FH)0000001DCB5光标或字符移位(10H-1FH)000001S/CR/L*6置功能(20H-3FH)00001DLNF*7置字符发生存贮器地址
30、(40H-7FH)0001字符发生存贮器地址8置数据存贮器地址(80H-)001显示数据存贮器地址9读忙标志或地址01BF计数器地址10写数到CGRAM或DDRAM)10要写的数据内容11从CGRAM或DDRAM读数11读出的数据内容 控制命令表1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平)指令1:清显示,指令码01H,光标复位到地址00H位置。指令2:光标复位,光标返回到地址00H。指令3:光标和显示模式设置 I/D:光标移动方向,高电平右移,低电平左移 S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。指令4:显示开关
31、控制。 D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示 C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。指令5:光标或显示移位 S/C:高电平时移动显示的文字,低电平时移动光标。指令6:功能设置命令 DL:高电平时为4位总线,低电平时为8位总线 N:低电平时为单行显示,高电平时双行显示 F: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。指令7:字符发生器RAM地址设置。指令8:DDRAM地址设置。指令9:读忙信号和光标地址 BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。指令10:写数据。指令11:读数据。与HD44780相兼容的芯片时序表如下:读状态输入RS=L,R/W=H,E=H输出D0D7=状态字写指令输入RS=L,R/W=L,D0D7=指令码,E=高脉冲输出无读数据输入RS=H,R/W=H,E=H输出D0D7=数据写数据输入RS=H,R/W=L,D0D7=数据,E=高脉冲输出无 基本操作时序表1602LCD的RAM地址映射及标准字库表 液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块