1、1基于 51单片机的空气智能加湿器的设计目 录1 任务来源意义及目的 22 设计方案 22.1 总体设计 .22.2 实现方式 .32.3 理论基础 .32.3.1 单片机 32.3.2 DS18B20传感器 .42.3.3 1602LCD液晶显示屏 .53 硬件设计 63.1 设计方案 .63.2 电路图 .73.3 信号分析 .83.4 功能描述 .83.5 复位电路 .83.6液位定位及加湿器的光电开关 93.7 1602显示屏 104 软件设计 114.1整体设计及说明 114.2 DS18B20流程设计 124.3 1602字符型 LCD流程设计 155 系统调试 176 总结 17
2、致 谢 18附录一:1602LCD 简介 .20附录二 LCD 控制及显示子程序 .242摘要:在日常生活中加湿器得到了广泛的应用,但是现有的加湿器都需要手工控制开启和关闭并且不具备对室内空气温湿度的监测,人们在使用过程中存在过度加湿和干烧的问题,不仅给室内空气舒适度造成负面影响并且还存在安全隐患。因此开发设计一种价格低廉、功耗低、具有自动控制功能的加湿器显得尤为必要。本设计采用智能控制,以 AT80S51 单片机为核心,外接辅助电路,通过实现加湿器的防干烧、声光报警、智能开启和关闭以及室内温湿度的显示功能基本实现加湿器的智能化。关键词:单片机、智能、加湿器、相对湿度、传感器1 任务来源意义及
3、目的在日常生活中加湿器得到了广泛的应用,但是现有的加湿器都需要手工控制开启和关闭并且不具备对室内空气温湿度的监测,人们在使用过程中存在过度加湿和干烧的问题,不仅给室内空气舒适度造成负面影响并且还存在安全隐患。因此开发设计一种价格低廉、功耗低、具有自动控制功能的加湿器显得尤为必要。本设计采用智能控制,以 AT80S51单片机为核心,外接辅助电路,通过实现加湿器的防干烧、声光报警、智能开启和关闭以及室内温湿度的显示功能基本实现加湿器的智能化。2 设计方案2.1 总体设计智能加湿器需满足以下要求:1)相对湿度低于 40时自动加湿;2)用户可以设置系统温湿度报警值;3)由 5V稳压直流电源供电,提供温
4、湿度调节控制信号,实现自动控制;4)检测得到的数据可以通过显示模块显示。硬件设计不仅要满足系统需求,还要满足功能和外形尺寸要求。根据设计要求确定了系统的总体方案,包系统由两个 DS18B20温度传感器一个水位传感器、单片机、1602LCD 液晶显示屏、声光报警器、以及一个光电耦合开关等部分组成。系统功能原理图如图 1-1所示,两个温度传感器分别采集室内空气的干湿球温度,并将采集的温度传送至单片机。单片机对这两个数据加以处理并结合室内湿度要求参数控制加湿器的开启和闭合。另外,水位传感器还能监测水位,单片机根据水位高低控制声光报警装置。自动加湿器包括加湿模块、报警模块、自动断电模块。3单片机温度传
5、感器 1温度传感器 21602LCD 显示屏水位传感器加湿器开关声光报警器图 1-1 自动加湿器功能原理图2.2 实现方式要达到自动加湿器功能要做好硬件和软件设计和调试三个方面的工作。首先硬件方面,通过合理的设计单片机管脚及其他外围电路的链接,使之既有I/O口的功能,又有控制型号的功能。由于时间仓促,没有找到合适的水位传感器,在开发过程中利用三个按钮开关代替水位传感器分别代表高、中、低水位,而加湿器开关则由一发光二级管代替,在方正过程中更容易观察系统开发效果。这方面的内容详见硬件设计部分内容。其次软件方面,通过合理设计软件的结构和安排子程序,使程序以最简洁有效的方式实现目的。最后,调试方面,程
6、序编辑用 VW8系列方针器环境,编辑过程可使用软件仿真观察,并对其进行调试。在程序编辑完成之后使用硬件仿真,最终用烧录器将程序写入单片机进行实测。本系统分信号的主要有温度传感器的输入信号和单片机输出的控制信号构成。首先由单片机向温度传感器发出读信号,随后温度传感器做出响应,单片机待 DS18B20完成收集到得温度信息进行 AD处理并存储为数字信号后,开始读取温度值,并对其信号做位处理使之达到用户需求的精度以及计算得到相对湿度,最后通过 1602LCD显示温湿度值。另外,系统在运行过程中还有专门的控制声光报警系统、光电耦合开关的控制信号,2.3 理论基础2.3.1 单片机T89C2051是一种带
7、 2K字节闪烁可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除 1000次。该器件采用 ATMEL高密度非易失4存储器制造技术制造,与工业标准的 MCS-51指令集和输出管脚相兼容。由于将多功能 8位 CPU和闪烁存储器组合在单个芯片中,ATMEL 的 AT89S51是一种高效微控制器,AT89C2051 是它的一种精简版本。AT89S51 单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。外形及引脚排列如图 2-1所示图 2-1 AT89S51 芯片引脚图AT89S51 共有 40个引脚,大致可分为 4类:电源引脚、时钟电路引脚、I/O 引脚、控制线引脚。根据开发
8、的需要和单片机的结构,我们就可以实现单片机的自动工作,即实现自动化!2.3.2 DS18B20传感器传感器是一种按一定的精度把被测量转换为与之有确定关系的、便于应用的某种物理的测量器件或装置,用于满足系统信息传输、存储、显示、记录及控制等要求。在本系统的开发过程中主要用到了 DS18B20数字温度传感器,这种传感器提供 9-12位摄氏温度测量 i fu b有一个由高低电平触发的可编程的不因电源消失fu 改变的报警功能。DS18B20 通过一个单线接口发送或接受信息,因此在中央处理器和 DS18B20之间仅需一条连接线(加上地线)。它的测温范围为一 55- + 125 0C,并目在一 10-+8
9、50C精度为士 5 0C。除此之外,DS18B20能直接从单线通讯线上汲取能量,除去了对外部电源的需求。每个 DS 18B20都有一个独特的 64位序列号,从fu 允许多只 DS 18B20同时连在一根单线总线上;因此,很简单就可以用一个微控制器去控制很多覆盖在一大片区域的DS 18B20。这一特性在 HVAC环境控制、探测建筑物、仪器或机器的温度以及过5程监测和控制等方面非常有用。 在测温操作方面,DS18B20 的核心功能是它的直接读数字的温度传感器。温度传感器的精度为用户可编程的 9, 10, 11或 12位,分别以 0. 5 0C , 0 . 2 5 0C , 0. 12 5 0C和
10、0. 06250C增量递增。在上电状态下默认的精度为 12位。DS18B20 启动后保持低功耗等待状态;当需要执行温度测量和 AD转换时,总线控制器必须发出44h命令。在那之后,产生的温度数据以两个字节的形式被存储到高速暂存器的温度寄存器中,DS18B20 继续保持等待状态。当DS18B20由外部电源供电时,总线控制器在温度转换指令之后发起“读时序” ,DS18B20正在温度转换中返回 0,转换结束返回 1。如果 DS18B20由寄生电源供电,除非在进入温度转换时总线被一个强上拉拉高,否则将不会由返回值。寄生电源的总线要求在口 618820供电节详细解释。图 2-2 DS18B20 数字温度传
11、感器内部结构2.3.3 1602LCD液晶显示屏在单片机系统中应用液晶显示器作为输出器件有以下几个优点:一、显示质量高,由于液晶显示器每一个点在收到信号后就一直保持那种色彩和亮度,恒定发光,而不像阴极射线管显示器(CRT)那样需要不断刷新新亮点。因此,液晶显示器画质高且不会闪烁。二、数字式接口,液晶显示器都是数字式的,和单片机系统的接口更加简单可靠,操作更加方便。三、体积小、重量轻,液晶显示器通过显示屏上的电极控制液晶分子状态来达到显示的目的,在重量上比相同显示面积的传统显示器要轻得多。四、功耗低,相对而言,液晶显示器6的功耗主要消耗在其内部的电极和驱动 IC上,因而耗电量比其它显示器要少得多
12、。本系统选用的字符型 LCD是一种专门用于显示字母、数字、符号等点阵式LCD,目前常用 16*1,16*2,20*2 和 40*2行等的模块。本次设计选用的是长沙太阳人电子有限公司的 1602字符型液晶显示器。一般 1602字符型液晶显示器实物如图 3-1: 图 2-3 1602 字符型液晶显示器实物图1602LCD 主要技术参数:显示容量:162 个字符芯片工作电压:4.55.5V工作电流:2.0mA(5.0V)模块最佳工作电压:5.0V字符尺寸:2.954.35(WH)mm3 硬件设计73.1 设计方案单片机温度传感器 1温度传感器 21602LCD 显示屏水位传感器加湿器开关声光报警器图
13、 3-1 自动加湿器功能原理图3.2 电路图单片机是整个系统的控制中枢,它指挥外围器件协调工作,从而完成特定的功能。硬件实现上采用模块化设计,每一模块只实现一个特定功能,最后再将各个模块搭接在一起。这种设计方法可以降低系统设计的复杂性。系统电路原理图如图 2所示。本系统主要硬件设计包括电源电路、蜂鸣器电路、晶振电路、复位电路、LCD 显示电路以及温度传感器电路。控制电路的核心器件是由美国 Atmel公司生产的 AT89S51单片机,属于MCS-51系列。AT89S51 是一种低功耗、高性能的 CMOS8位微控制器,具有 2K在系统可编程 Flash存储器,采用的工艺是 Atmel公司的高密度非
14、易失存储器技术;片上 Flash允许程序存储器在系统可编程,亦适于常规编程器;在单芯片上,拥有灵巧的 8位 CPU和在系统可编程 Flash,使得 AT89S51为众多嵌入式控制应用系统提供高灵活、超有效的解决方案;价格低廉、性能可靠、抗干扰能力强。因此广泛应用于工业控制和嵌入式系统中。8图 3-2 电路原理图系统的声光报器电路(警蜂鸣和 LED发光二极管组成) 、振落电路、复位电路如图?、图?、图?所示。显示模块选用 1602字符型液晶模块,是目前工控系统中使用最为广泛的液晶屏之一,电路图如图?所示。1602 字符型液晶模块是点阵型液晶,驱动方便,经编码后显示内容多样化。由于时间仓促,没有找
15、到合适的水位传感器,在开发过程中利用三个按钮开关代替水位传感器分别代表高、中、低水位,而加湿器开关则由一发光二级管代替,在方正过程中更容易观察系统开发效果。3.3 信号分析本系统分信号的主要有温度传感器的输入信号和单片机输出的控制信号构成。首先由单片机向温度传感器发出读信号,随后温度传感器做出响应,单片机待 DS18B20完成收集到得温度信息进行 AD处理并存储为数字信号后,开始读取温度值,并对其信号做位处理使之达到用户需求的精度以及计算得到相对湿度,最后通过 1602LCD显示温湿度值。另外,系统在运行过程中还有专门的控制声光报警系统、光电耦合开关的控制信号,这些控制信号比较简单,不再一一论
16、述。3.4 功能描述参考舒适性空调的相对湿度采用 40%65%的要求x,在功能设计过程中以 40%为最适相对湿度参考值。单片机一方面通过监测加湿器内部的水位,达到加湿器防干烧的功能,即只有在水位在水位下限以上时加湿器才能通电工作。9另一方面通过处理两个温度传感器测得的干湿球温度得到室内相对湿度,并和人体最适相对湿度做比较。在水位符合要求的前提下,若室内相对湿度高于人体最适值则控制加湿器不动作,反之则对加湿器通电开始加湿,直到室内空气达到最适湿度时断电。另外,单片机通过和声光报警器以及 1602LCD显示屏相连,还具有了温湿度及水位的显示功能。总之,在现有的加湿器内加入此单片机将实现加湿器的防干
17、烧、声光报警、智能开启和关闭以及室内温湿度的显示功能基本实现加湿器的智能化。3.5 复位电路复位电路的基本功能是:系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。为可靠起见,电源稳定后还要经一定的延时才撤销复位信号,以防电源开关或电源插头分-合过程中引起的抖动而影响复位。图 3-3所示的RC复位电路可以实现上述基本功能,图 3为其输入-输出特性。但解决不了电源毛刺(A 点)和电源缓慢下降(电池电压不足)等问题 而且调整 RC 常数改变延时会令驱动能力变差。左边的电路为高电平复位有效 右边为低电平 Sm为手动复位开关 Ch 可避免高频谐波对电路的干扰。图 3-3 上电及手动复位电路图3
18、.6液位定位及光电开关由于开发过程时间紧迫,暂时未购买到合适的液位监测传感器,因此在实际开发过程中采用三个开关进行代替,按下按钮表示水位到达相应的水位。另10外为了直观的看出控制输出信号的转台,开发过程中将光电开关改为一发光二级管并与电阻串联接地。见图 3-4。图 3-4 水位计光电开关替代元件3.7 1602显示屏利用滑动变阻器调节背光灯与显示字符的对比度,利用三极管的及 P2.7控制背光的的暗与灭。接线原理见图 3-5。图 3-5 1602接线原理图3.8 DS18B20温度传感器11由于此款温度传感器输出串行通信信号,电路图相对简单,见图 3-6。图 3-6 DS18B20温度传感器接线
19、图4 软件设计4.1整体设计及说明系统单片机代码采用汇编语言编译,以伟福仿真器 V8/L为开发环境。系统软件实现的功能:1)通过 LCD显示温湿度值及水位;2)比较监测到的水位,发现低水位时自动掉电并声光报警;3)根据相对湿度值控制加湿器的开关。根据监控系统功能要求,系统软件流程图设计如图所示。12显示温湿度初始化载入程序读干球温度 T读湿球温度 TS求出相对湿度 D读水位 H判断 HHo是否成立开启加湿器判断 D D0是否成立声光报警并关闭加湿器是否是否关加湿器图 4-1 主程序流程图初始化开始,然后载入程序,根据显示数据读出干球温度 T,湿球温度TS,根据干湿球温度求出相对湿度 D,然后读
20、出显示的水位 H,判断水位 H是否大于最小水位 Ho:若 HHo成立后,判断相对湿度 D与最小湿度 Do的大小比较,若 D=Do则开启加湿器,显示温湿度,循环直至相对湿度 D=Do,关闭加湿器,然后显示温湿度过程循环。4.2 DS18B20流程设计每个 DS18B20温度传感器的流程图设计如下:13启动温度转换读取温度温度处理跳过 ROM 匹配DS18B20 复位跳过 ROM 匹配DS18B20 复位图 4-2 DS18B20 模块程序流程图传感器 DS18B20复位,跳过 ROM匹配后启动温度转换,DS18B20 复位然后跳过 ROM匹配,再读取温度后进行温度处理,保留一位小数。读取数据及传
21、送的程序如下:READ_TEMP: ;读 1820 内部温度子程序.CALL RESETJB 70h,EXT1CALL SKIP_ROMCALL TEMP_CONV ;温度 AD 变换CALL DELAY_600MSCALL RESETCALL SKIP_ROMCALL TEMP_GET ;发取温度的命令CALL READ ;接收.EXT1:14RETSKIP_ROM:;跳过 ROM 检测MOV A,#0CCH ;#0CCH 为跳过 rom 命令CALL WRITERETRECALL_EPROM:;重调 EpromMOV A,#0B8HCALL WRITERETTEMP_CONV:MOV A,
22、#44H ;AD 变换CALL WRITERETTEMP_GET:MOV A ,#0BEH;读 18b20 命令CALL WRITERET;* 18B20 基本时序子程序RESET: ;初始化子程序SETB P1.2NOPCLR P1.2 ;拉低MOV R3,#150 ; *4=600USCALL DELAY_BY_R3SETB P1.2;拉高MOV R3,#15 ; 60USCALL DELAY_BY_R3MOV R3,#60 ;4 个周期*60=240US 内检测A1: JNB P1.2,A2 ;检测到低平信号15DJNZ R3,A1 ;如果没有应答的低电平信号 ,返回 A1 重新检测,
23、超时后下一行,SETB 70h ;DS1820 不存在 .JMP A3A2: CLR 70hMOV R3,120;240US;等恢复时间 2*120=240usDJNZ R3, $A3:RETWRITE:MOV R2,#8;一个字节为 8 位CLR C ;C 位清 0 C 位用来放 A 的一位数据,用移位的方法放入 CB1: SETB P1.2NOPCLR P1.2MOV R3,#4 ;16USCALL DELAY_BY_R3RRC A;把 A 中的数送入 CMOV P1.2,C ;把 C 送入总线MOV R3,#12;48US(一位数据的发送:60ustx120us)CALL DELAY_B
24、Y_R3SETB P1.2 ;拉高 1us 结束一位NOPDJNZ R2,B1RETREAD:MOV R1,#4 ;接收 4 个字节数据依次是 1.低位 2.高位. 3.高限 4.低限MOV R0,#28H;低位放 28H;高位放 29h (1. 28H,2. 29H 3. 2AH 4. 2BH )C0: MOV R2,#8;一字节数据 8 位C1: CLR C ;清除 CSETB P1.216NOPNOPCLR P1.2 ;拉低.NOP ;1us 秒后拉高 ?SETB P1.2MOV R3,#4 ;16us 后采数据CALL DELAY_BY_R3MOV C,P1.2 ;读出 18b20 的
25、数据RRC A ;移入 AMOV R3,#12;48US 恢复时间CALL DELAY_BY_R3DJNZ R2,C1 ;一个字节收完MOV R0,A ;移入存储位INC R0 ;下一位 ;29hDJNZ R1,C0 ;全部取完吗 ?没有重复RET4.3 1602字符型 LCD流程设计1602 字符型 LCD 流程设计如下:17延时 15ms显示模式设置延时 5ms显示关闭显示清屏延时 5ms延时 5ms显示光标移动设置延时 5ms显示开及光标设置显示位置设置延时显示温度各位数值1602 初始化图 4-3 1602 液晶驱动程序流程图显示器 1602初始化后延时 15ms,显示模式设置,再延时
26、 5ms,显示关闭,18延时 5ms显示清屏,再延时 5ms显示光标移动设置延时 5ms显示开及光标设置,然后显示位置设置,延时,显示温度各位数值。此部分主要程序过长,参见附录二。5 系统调试系统与 VW8系列的仿真环境下开发,编程过程中利用软件仿真调试系统,当软仿通过则利用该仿真器仿真,并按顺序检查错误进行修改,最终将程序的HEX文件烧录进入单片机进行实测。6 总结通过本次单片机学习课程的毕业设计,使自己在理解单片机基本电路的基础上掌握了简单电路的设计方法,同时对整个课题的编程方法和技巧也有了一定的认识和理解,并初步具备了独立编程和系统调试的能力。在本次课题设计中,自己遇到了不少问题,通过请
27、教贺老师和翻阅资料,最终将问题解决。尤其是在调试程序时,运用软件仿真,逐步排查错误,最终将程序调试成功。在此过程中,自己的编程能力得到了加强,同时也锻炼了自己的耐性。总之,通过本次设计,使自己受益匪浅。另外,在智能加湿器的开发过程中我体会到了自动化得真正含义,对以后的学习和工作奠定了一定的基础,以后进一步的学习过程中一方面要拓展智能的加湿器的功能和应用范围,使之更加完善。另一方面还要探究新的课题,开发新的单片机应用系统,问何那得清如许,为由源头活水来!走上单片机开发之路,我要将自己的知识转化为社会可以运用的技术,为社会的进步尽自己一份力量。19致 谢作者在毕业设计期间,始终得到指导老师贺新民老
28、师的悉心指导。整个学习和设计过程中,我深切的体会到了导师严谨的治学精神、渊博的知识、敏锐的思维、对工作的热情态度和朴素高尚的人格修养,相信这些将使我终生受益。在此论文完成之际,谨向我敬爱的导师表示最诚挚的敬意。由衷地感谢王玉芝老师在课题研究期间给予我的许多指导和帮助。也由衷地感谢各位同学为我的课题提供的无私帮助,而且他们孜孜不倦的学习精神永远是我学习的榜样。同时,也向所有帮助支持过我的老师、同学和朋友致以衷心的感谢。20参考文献:1 薛殿华.空气调节.北京:清华大学出版社,1991.2 赵玉刚 邱东传.感器基础. 北京:中国林业出版社;北京大学出版社,2006.83 张俊谟.单片机中级教程:原
29、理与应用. 北京:北京航空航天大学出版社,2006.104 黄晓因.张连根.干湿球法测量相对湿度算法研究及单片机实现J.云南族大学学报:自然科学版.2003, I 2 ( 3 ) : I55 -1575 胡玉峰.自动与人工观测数据的差异J.应用气象学报,2004.15(fi).6 孙晓波. DS18B20 在多点温控系统中的应用 J. 哈尔滨商业大学学报(自然科学版) ,2002,18(4):年,卷(期).7 李广弟等编著, 单片机基础 ,北京航空航天大学出版社,2001 年 7 月.21附录一:1602LCD 简介引脚功能说明1602LCD 采用标准的 14 脚(无背光)或 16 脚(带背光
30、)接口,各引脚接口说明如表 3-1 所示:表 3-1:引脚接口说明表编号 符号 引脚说明 编号 符号 引脚说明1 VSS 电源地 9 D2 数据2 VDD 电源正极 10 D3 数据3 VL 液晶显示偏压 11 D4 数据4 RS 数据/命令选择 12 D5 数据5 R/W 读/写选择 13 D6 数据6 E 使能信号 14 D7 数据7 D0 数据 15 BLA 背光源正极8 D1 数据 16 BLK 背光源负极第 1 脚:VSS 为地电源。第 2 脚:VDD 接 5V 正电源。第 3 脚:VL 为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使
31、用时可以通过一个 10K 的电位器调整对比度。第 4 脚:RS 为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第 5 脚:R/W 为读写信号线,高电平时进行读操作,低电平时进行写操作。当 RS 和 R/W 共同为低电平时可以写入指令或者显示地址,当 RS 为低电平 R/W为高电平时可以读忙信号,当 RS 为高电平 R/W 为低电平时可以写入数据。第 6 脚:E 端为使能端,当 E 端由高电平跳变成低电平时,液晶模块执行命令。第 714 脚:D0D7 为 8 位双向数据线。第 15 脚:背光源正极。第 16 脚:背光源负极。表 3-2:控制命令表序号 指令 RS R/W D7 D
32、6 D5 D4 D3 D2 D1 D01 清显示 0 0 0 0 0 0 0 0 0 12 光标返回 0 0 0 0 0 0 0 0 1 *3 置输入模式 0 0 0 0 0 0 0 1 I/D S4 显示开/关控制 0 0 0 0 0 0 1 D C B5 光标或字符移位 0 0 0 0 0 1 S/C R/L * *226 置功能 0 0 0 0 1 DL N F * *7 置字符发生存贮器地址 0 0 0 1 字符发生存贮器地址8 置数据存贮器地址 0 0 1 显示数据存贮器地址9 读忙标志或地址 0 1 BF 计数器地址10 写数到 CGRAM 或DDRAM) 1 0 要写的数据内容1
33、1 从 CGRAM 或 DDRAM 读数 1 1 读出的数据内容1602 液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1 为高电平、0 为低电平)指令 1:清显示,指令码 01H,光标复位到地址 00H 位置。指令 2:光标复位,光标返回到地址 00H。指令 3:光标和显示模式设置 I/D:光标移动方向,高电平右移,低电平左移 S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。指令 4:显示开关控制。 D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示 C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁
34、,低电平不闪烁。指令 5:光标或显示移位 S/C:高电平时移动显示的文字,低电平时移动光标。指令 6:功能设置命令 DL:高电平时为 4 位总线,低电平时为 8 位总线 N:低电平时为单行显示,高电平时双行显示 F: 低电平时显示 5x7 的点阵字符,高电平时显示 5x10 的点阵字符。指令 7:字符发生器 RAM 地址设置。指令 8:DDRAM 地址设置。指令 9:读忙信号和光标地址 BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。指令 10:写数据。指令 11:读数据。1602LCD的 RAM地址映射及标准字库表液晶显示模块是一个慢显示器件,所以在执行每
35、条指令前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,图 3-5 是 1602 的内部显示地址。23图 3-5 1602LCD 内部显示地址例如第二行第一个字符的地址是 40H,那么是否直接写入 40H 就可以将光标定位在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位 D7 恒定为高电平 1 所以实际写入的数据应该是 01000000B(40H)+10000000B(80H)=11000000B(C0H)。在对液晶模块的初始化中要先设置其显示模式,在液晶模块显示字符时光标是自动右移的,无需人工干预。每
36、次输入指令前都要判断液晶模块是否处于忙的状态。1602 液晶模块内部的字符发生存储器(CGROM)已经存储了 160 个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A ”的代码是 01000001B(41H) ,显示时模块把地址41H 中的点阵字符图形显示出来,我们就能看到字母 “A”。其中字符代码与字符图形对应关系如图 3-6 所示: 1602LCD的一般初始化(复位)过程延时 15mS24写指令 38H(不检测忙信号)延时 5mS写指令 38H(不检测忙信号)延时 5mS写指令 38H(不检测忙信
37、号)以后每次写指令、读/写数据操作均需要检测忙信号写指令 38H:显示模式设置写指令 08H:显示关闭写指令 01H:显示清屏写指令 06H:显示光标移动设置写指令 0CH:显示开及光标设置液晶显示模块的设计本设计液晶显示模块的设计如下图 3-7 所示,该电路实现的功能是:通过AT89S51 的 P00P07 八个口输出控制信号,控制液晶的 8 位双向数据线,通过单片机的 P24、P25、P26 向液晶模块发送命令,控制液晶执行各种命令,其中P24 控制液晶的使能端,当 E 端由高电平跳变成低电平时,液晶模块执行命令,P25 控制液晶模块的读写,高电平时进行读操作,低电平时进行写操作。当 P2
38、5和 P26 共同为低电平时可以写入指令或者显示地址,当 P26 为低电平 P25 为高电平时可以读忙信号,当 P26 为高电平 P25 为低电平时可以写入数据,P26 控制寄存器的选择,高电平时选择数据寄存器、低电平时选择指令寄存器。液晶部分引脚说明:第 1 脚:VSS 为地电源第 2 脚:VDD 接 5V 正电源第 3 脚:V0 为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个 10K 的电位器调整对比度第 15 脚:背光源正极第 16 脚:背光源负极25附录二 LCD 控制及显示子程序DISPLAY: MOV A,R1M
39、OVC A,A+DPTRMOV P0,ACALL WRITE_DATA_TO_LCDINC R1DJNZ R0,DISPLAYRETWRITE_NOT_CHECK_BUSY:SETB ENOPNOPCLR RS ;写入控制命令的子程序CLR RWCLR ERETENABLE:SETB ENOPNOPCLR RS ;写入控制命令的子程序CLR RWCLR EACALL TEST_BUSYSETB ERETTEST_BUSY:SETB ENOPNOPMOV P0,#0FFH ;判断液晶显示器是否忙的子程序CLR RSSETB RWCLR ENOPSETB EJB P0.7,TEST_BUSY ;如
40、果 P0.7 为高电平表示忙就循环等待RETWRITE_DATA_TO_LCD:SETB ENOPNOPSETB RS ;RS=1CLR RW ;RW=0 ;准备写入数据CLR E ;E=0 ;执行显示命令ACALL TEST_BUSY ;判断液晶模块是否忙?SETB E ;E=1 ;显示完成, 程序停车RET26;*数据转换 *DATA_CONV: ;数据转换MOV A,28H ;低字节ANL A,#0FH;去除高位MOV B,#6;乘 6 得到实际数值的 100 倍.MUL ABMOV B,#10DIV ABMOV 33H,A;小数位高MOV 32H,B; 小数位低MOV A,28HMOV
41、 C,29H.0 ;29h 高位的低 4 字节RRC AMOV C,29H.1RRC AMOV C,29H.2RRC AMOV C,29H.3RRC AMOV 28H,A ;重新合成.结果存在 28H.MOV A,28HMOV B,#10DIV ABMOV 26H,A ;整数位高MOV 25H,B ;整数位低;-MOV A,2AHMOV B,#10DIV ABMOV 40H,B ;高温限值个位MOV B,#10DIV ABMOV 41H,B;十位MOV 42H,A;百位;-MOV A,2BHMOV B,#10DIV ABMOV 43H,B ;低温限值位个位MOV B,#10DIV ABMOV
42、44H,B ;十位MOV 45H,A ;百位CLR CMOV A,28H;现温度值与高温限值比较SUBB A,2AHJC BIG ;如果高. 则关机器CLR C27MOV A,2BH;现温度与低温限值比较SUBB A,28HJC X_BIG ;低温限值比现温高,则开机器AJMP CONVERT_ENDBIG:AJMP CONVERT_ENDX_BIG:CONVERT_END:RET;*显示温度*DISPLAY_18B20_TEMP: ;LCD_显示子程序MOV P0,#10000000B; 显示位置ACALL ENABLE ;执行指令MOV DPTR,#TAB3;显示WENDU:MOV R1,
43、#0 ;码表初值MOV R0,#7;字数CALL DISPLAY;-显示温度值高位MOV DPTR,#LED_DATAMOV R1,26H ;码表初值MOV R0,#1;字数CALL DISPLAY;-显示温度值低位MOV DPTR,#LED_DATAMOV R1,25H ;码表初值MOV R0,#1;字数CALL DISPLAY;-显示小数点MOV DPTR,#DOTMOV R1,#0 ;码表初值MOV R0,#1;字数CALL DISPLAY;-显示温度值小数高位MOV DPTR,#LED_DATAMOV R1,33H ;码表初值MOV R0,#1;字数CALL DISPLAY;-显示温度
44、值小数低位MOV DPTR,#LED_DATAMOV R1,32H ;码表初值MOV R0,#1;字数CALL DISPLAY;-显示单位度MOV DPTR,#SIGNMOV R1,#0 ;码表初值MOV R0,#2;字数CALL DISPLAY28RET;*显示限值.*DISPLAY_18B20_TEMP_XZ:MOV P0,#11000000B; 显示位置ACALL ENABLE ;执行指令MOV DPTR,#TAB_L ; 显示L:MOV R1,#0 ;码表初值MOV R0,#2;字数CALL DISPLAY;-显示温度限值高位MOV DPTR,#LED_DATAMOV R1,45H ;
45、码表初值MOV R0,#1;字数CALL DISPLAY;-显示温度限值低位MOV DPTR,#LED_DATAMOV R1,44H ;码表初值MOV R0,#1;字数CALL DISPLAY;-MOV DPTR,#LED_DATAMOV R1,43H ;码表初值MOV R0,#1;字数CALL DISPLAYMOV P0,#11000111B; 显示位置ACALL ENABLE;- -MOV DPTR,#TAB_H ; 显示H:MOV R1,#0 ;码表初值MOV R0,#2;字数CALL DISPLAY;-显示高温度限值高位MOV DPTR,#LED_DATAMOV R1,42H ;码表初
46、值MOV R0,#1;字数CALL DISPLAY;-显示高温度限值低位MOV DPTR,#LED_DATAMOV R1,41H ;码表初值MOV R0,#1;字数CALL DISPLAY;-MOV DPTR,#LED_DATAMOV R1,40H ;码表初值MOV R0,#1;字数CALL DISPLAYRET29;* *提示语*DISPLAY_18B20_HELLO:MOV P0,#10000000B; 显示位置ACALL ENABLE ;执行指令MOV DPTR,#TAB_HELLOMOV R1,#0 ;码表初值MOV R0,#16;字数CALL DISPLAyRET;/*DISPLAY
47、_18B20_TESTING:MOV P1,#10000000B; 显示位置ACALL ENABLE ;执行指令MOV DPTR,#TAB_TESTINGMOV R1,#0 ;码表初值MOV R0,#16;字数CALL DISPLAyRET;*/DISPLAY_18B20_ERROR:MOV P0,#00000001B ;清屏并光标复位ACALL ENABLEMOV DPTR,#TAB1MOV R1,#0 ;码表初值MOV R0,#16;字数CALL DISPLAyRETDISPLAY_WATING:MOV P0,#00000001B ;清屏并光标复位ACALL ENABLE;调用写入命令子程
48、序MOV P0,#10000000B; 显示位置ACALL ENABLE ;执行指令MOV DPTR,#TAB2MOV R1,#0 ;码表初值MOV R0,#13;字数CALL DISPLAyRETDISPLAY_SAVE:MOV P0,#00000001B ;清屏并光标复位ACALL ENABLE;调用写入命令子程序MOV P0,#10000000B; 显示位置ACALL ENABLE ;执行指令MOV DPTR,#TAB_SAVEMOV R1,#0 ;码表初值MOV R0,#10;字数CALL DISPLAyRET30DISPLAY_SETING_TEMP_H:MOV P0,#00000001B ;清屏并光标复位ACALL ENABLE;调用写入命令子程序MOV P0,#10000000B; 显示位置ACALL ENABLE ;执行指令MOV DPTR,#TAB_SETING_TEMP_HMOV R1,#0 ;码表初值MOV R0,#13;字数CALL DISPLAyRETDISPLAY_SETING_TEMP_L:MOV P0,#00000001B ;清屏并光标复位ACALL ENABLE;