1、摘 要本文将介绍一种基于单片机控制的数字温度计,就是用单片机实现温度测量,传统的温度检测大多以热敏电阻为温度传感器,但热敏电阻的可靠性差,测量温度准确率低,而且必须经过专门的接口电路转换成数字信号才能由单片机进行处理。本次采用DS18B20数字温度传感器来实现基于AT89S52单片机的数字温度计的设计用LCD数码管以串口传送数据,实现温度显示,能准确达到以上要求,可以用于温度等非电信号的测量,主要用于对测温比较准确的场所,或科研实验室使用,能独立工作的单片机温度检测、温度控制系统已经广泛应用很多领域。关键词 温度计;单片机;数字控制;DS18B20ABSTRACT This article w
2、ill introduce the single-chip microcomputer-based control of a digital thermometer is used to achieve single-chip temperature measurement, the traditional detection of most of the temperature thermistor for temperature sensor, but the poor reliability of thermistors, temperature measurement accuracy
3、 of low - , and must go through a special interface circuit to convert the digital signal processed by the single chip. The use of digital temperature sensor DS18B20 to AT89S52 microcontroller-based design of digital thermometer with LCD digital control to the serial transmission of data, temperatur
4、e display, accurate to achieve the above requirements, can be used for temperature measurement and other non-electrical signal, mainly used for more accurate temperature measurement sites, or research laboratory use, can work independently of the single-chip temperature detection, temperature contro
5、l system has been widely used in many areasKey words Thermometer;Single-chip;Digital Control; DS18B20目 录 1 绪论101.1 前言101.2 数字温度计设计方案论证111.2.1 方案一111.2.2 方案二111.3 方案二的总体设计框图111.3.1 主控制器121.3.2 温度传感器122 硬件电路设计162.1 主要芯片介绍162.1.1 AT89S52的介绍162.1.2 AT89S52各引脚功能介绍172.2 主板电路192.3 显示电路203 软件设计213.1 主程序流程图2
6、13.2 读出温度子程序流程图223.3 温度转换命令子程序流程图233.4 计算温度子程序流程图233.5 显示数据刷新子程序流程图244 Proteus仿真调试254.1 Proteus软件介绍254.2 Proteus界面介绍264.2.1 原理图编辑窗口264.2.2 预览窗口264.2.3 模型选择工具栏274.2.4 元件列表284.2.5 方向工具栏284.2.6 仿真工具栏284.3 本次设计仿真过程294.3.1 创建原理图294.3.2 绘制的仿真原理图如304.3.3 系统调试314.3.4 开始仿真324.4 总结与体会33参考文献34致 谢35附录1 程序清单36附录
7、2 元器件清单44附录3 原理图45附录4 PCB图461 绪论1.1 前言随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,其中数字温度计就是一个典型的例子,但人们对它的要求越来越高,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从数单片机技术入手,一切向着数字化控制,智能化控制方向发展。随着时代的进步和发展,单片机技术已经普及到我们生活,工作,科研,各个领域,已经成为一种比较成熟的技术,单片机已经在测控领域中获得了广泛的应用本设计所介绍的数字温度计与传统的温度计相比,具有读数方便,测温范围广,测温准确,其输出温度采用数字显示,该设计
8、控制器使用单片机AT89S52,测温传感器使用DS18B20,用LCD数码管以串口传送数据,实现温度显示,能准确达到以上要求。1.2 数字温度计设计方案论证1.2.1 方案一由于本设计是测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到A/D转换电路,感温电路比较麻烦。1.2.2 方案二 进而考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这是非常容易想到的,所以可以采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温
9、度值,进行转换,就可以满足设计要求。从以上两种方案,很容易看出,采用方案二,电路比较简单,软件设计也比较简单,故采用了方案二。1.3 方案二的总体设计框图温度计电路设计总体设计方框图如图1.1所示,控制器采用单片机AT89S52,温度传感器采用DS18B20,用LCD液晶显示屏以串口传送数据实现温度显示: 主 控 制 器LCD显 示温 度 传 感 器单片机复位时钟振荡图1.1 总体设计方框图1.3.1 主控制器单片机AT89S52具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要,很适合便携手持式产品的设计使用系统可用二节电池供电。1.3.2 温度传感器DS18B20
10、温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9-12位的数字值读数方式。DS18B20的性能特点如下:独特的单线接口仅需要一个端口引脚进行通信;多个DS18B20可以并联在惟一的三线上,实现多点组网功能;无须外部器件;可通过数据线供电,电压范围为3.05.5;零待机功耗;温度以9或12位数字;用户可定义报警设置;报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作; DS18B20采用3脚PR35封装
11、或8脚SOIC封装,其内部结构框图如图2.2所示: C64 位ROM和单线接口高速缓存存储器与控制逻辑温度传感器高温触发器TH低温触发器TL配置寄存器8位CRC发生器VddI/O图1.2 DS18B20内部结构64位ROM的结构开始位是产品类型的编号,接着是每个器件的惟一的序号,共有48位,最后位是前面56位的CRC检验码,这也是多个DS18B20可以采用一线进行通信的原因。温度报警触发器和,可通过软件写入户报警上下限。DS18B20温度传感器的内部存储器还包括一个高速暂存和一个非易失性的可电擦除的EERAM。高速暂存RAM的结构为字节的存储器,结构如图2.3.2所示。头个字节包含测得的温度信
12、息,第和第字节和的拷贝,是易失的,每次上电复位时被刷新。第个字节,为配置寄存器,它的内容用于确定温度值的数字转换分辨率。DS18B20工作时寄存器中的分辨率转换为相应精度的温度数值。该字节各位的定义如图2.3所示。低位一直为,是工作模式位,用于设置DS18B20在工作模式还是在测试模式,DS18B20出厂时该位被设置为,用户要去改动,R1和0决定温度转换的精度位数,来设置分辨率。温度 LSB温度 MSBTH用户字节1TL用户字节2配置寄存器保留保留保留CRC图1.3 DS18B20字节定义由表1.1可见,DS18B20温度转换的时间比较长,而且分辨率越高,所需要的温度数据转换时间越长。因此,在
13、实际应用中要将分辨率和转换时间权衡考虑。高速暂存的第6、7、8字节保留未用,表现为全逻辑。第9字节读出前面所有字节的CRC码,可用来检验数据,从而保证通信数据的正确性。当DS18B20接收到温度转换命令后,开始启动转换。转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第1、2字节。单片机可以通过单线接口读出该数据,读数据时低位在先,高位在后,数据格式以0.0625LSB形式表示。当符号位时,表示测得的温度值为正值,可以直接将二进制位转换为十进制;当符号位时,表示测得的温度值为负值,要先将补码变成原码,再计算十进制数值。表1.2是一部分温度值对应的二进制温度数据。表1
14、.1 DS18B20温度转换时间表 DS18B20完成温度转换后,就把测得的温度值与RAM中的TH、T字节内容作比较。若TH或TTL,则将该器件内的报警标志位置位,并对主机发出的报警搜索命令作出响应。因此,可用多只DS18B20同时测量温度并进行报警搜索。在64位ROM的最高有效字节中存储有循环冗余检验码(CRC)。主机ROM的前56位来计算CRC值,并和存入DS18B20的CRC值作比较,以判断主机收到的ROM数据是否正确。DS18B20的测温原理是这这样的,器件中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器;高温度系数晶振随温度变化其振荡频率明显改变,
15、所产生的信号作为减法计数器的脉冲输入。器件中还有一个计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲进行计数进而完成温度测量。计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将55所对应的一个基数分别置入减法计数器、温度寄存器中,计数器和温度寄存器被预置在55所对应的一个基数值。减法计数器对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器的预置值减到时,温度寄存器的值将加,减法计数器的预置将重新被装入,减法计数器重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器计数到时,停止温度寄存器的累加,此时温度寄存器中的数值就是所测温度值。其输
16、出用于修正减法计数器的预置值,只要计数器门仍未关闭就重复上述过程,直到温度寄存器值大致被测温度值。另外,由于DS18B20单线通信功能是分时完成的,它有严格的时隙概念,因此读写时序很重要。系统对DS18B20的各种操作按协议进行。操作协议为:初使化DS18B20(发复位脉冲)发ROM功能命令发存储器操作命令处理数据。表1.2一部分温度对应值表温度/二进制表示十六进制表示+1250000 0111 1101 000007D0H+850000 0101 0101 00000550H+25.06250000 0001 1001 00000191H+10.1250000 0000 1010 00010
17、0A2H+0.50000 0000 0000 00100008H00000 0000 0000 10000000H-0.51111 1111 1111 0000FFF8H-10.1251111 1111 0101 1110FF5EH-25.06251111 1110 0110 1111FE6FH-551111 1100 1001 0000FC90H2 硬件电路设计2.1 主要芯片介绍2.1.1 AT89S52的介绍选用的AT89S52与同系列的AT89C51在功能上有明显的提高,最突出是的可以实现在线的编程。用于实现系统的总的控制。其主要功能列举如下:(1)为一般控制应用的 8 位单片机(2)
18、晶片内部具有时钟振荡器(传统最高工作频率可至 33MHz)(3)内部程式存储器(ROM)为 4KB(4)内部数据存储器(RAM)为 128B(5)外部程序存储器可扩充至 64KB(6)外部数据存储器可扩充至 64KB(7)32 条双向输入输出线,且每条均单独做 I/O 的控制(8)5 个中断向量源(9)2 组独立的 16 位定时器(10)1 个全双工串行通信端口(12)8751 及 8752 单芯片具有数据保密的功能(13)单芯片提供位逻辑运算指令2.1.2 AT89S52各引脚功能介绍VCC:ATAT89S52 电源正端输入,接+5V。VSS:电源地端。XTAL1:单芯片系统时钟的反向放大器
19、输入端XTAL2:系统时钟的反向放大器输出端,一般在设计上只要在 XTAL1 和 XTAL2 上接上一只石英振荡晶体系统就可以动作了,此外可以在两个引脚与地之间加入一个 20PF 的小电容,可以使系统更稳定,避免噪声干扰而死机。RESET:AT89S52的重置引脚,高电平动作,当要对晶片重置时,只要对此引脚电平提升至高电平并保持两个机器周期以上的时间,AT89S52便能完成系统重置的各项动作,使得内部特殊功能寄存器之内容均被设成已知状态,并且至地址0000H处开始读入程序代码而执行程序。EA/Vpp:EA为英文External Access的缩写,表示存取外部程序代码之意,低电平动作,也就是说
20、当此引脚接低电平后,系统会取用外部的程序代码(存于外部EPROM中)来执行程序。因此在8031及8032中,EA引脚必须接低电平,因为其内部无程序存储器空间。如果是使用 8751 内部程序空间时,此引脚要接成高电平。此外,在将程序代码烧录至8751内部EPROM时,可以利用此引脚来输入21V的烧录高压(Vpp)。ALE/PROG:ALE是英文Address Latch Enable的缩写,表示地址锁存器启用信号。ATAT89S51可以利用这支引脚来触发外部的8位锁存器(如74LS373),将端口0的地址总线(A0A7)锁进锁存器中,因为ATAT89S51是以多工的方式送出地址及数据。平时在程序
21、执行时ALE引脚的输出频率约是系统工作频率的1/6,因此可以用来驱动其他周边晶片的时基输入。此外在烧录8751程序代码时,此引脚会被当成程序规划的特殊功能来使用。PSEN:此为Program Store Enable的缩写,其意为程序储存启用,当8051被设成为读取外部程序代码工作模式时(EA=0),会送出此信号以便取得程序代码,通常这支脚是接到EPROM的OE脚。ATAT89S51可以利用PSEN及RD引脚分别启用存在外部的RAM与EPROM,使得数据存储器与程序存储器可以合并在一起而共用64K的定址范围。PORT0(P0.0P0.7):端口0是一个8位宽的开路电极(Open Drain)双
22、向输出入端口,共有8个位,P0.0表示位0,P0.1表示位1,依此类推。其他三个I/O端口(P1、P2、P3)则不具有此电路组态,而是内部有一提升电路,P0在当作I/O用时可以推动8个LS的TTL负载。如果当EA引脚为低电平时(即取用外部程序代码或数据存储器),P0就以多工方式提供地址总线(A0A7)及数据总线(D0D7)。设计者必须外加一个锁存器将端口0送出的地址锁住成为A0A7,再配合端口2所送出的A8A15合成一组完整的16位地址总线,而定位地址到64K的外部存储器空间。PORT2(P2.0P2.7):端口2是具有内部提升电路的双向I/O端口,每一个引脚可以推动4个LS的TTL负载,若将
23、端口2的输出设为高电平时,此端口便能当成输入端口来使用。P2除了当作一般I/O端口使用外,若是在ATAT89S52扩充外接程序存储器或数据存储器时,也提供地址总线的高字节A8A15,这个时候P2便不能当作I/O来使用了。PORT1(P1.0P1.7):端口1也是具有内部提升电路的双向I/O端口,其输出缓冲器可以推动4个LS TTL负载,同样地,若将端口1的输出设为高电平,便是由此端口来输入数据。如果是使用8052或是8032的话,P1.0又当作定时器2的外部脉冲输入脚,而P1.1可以有T2EX功能,可以做外部中断输入的触发引脚。PORT3(P3.0P3.7):端口3也具有内部提升电路的双向I/
24、O端口,其输出缓冲器可以推动4个TTL负载,同时还多工具有其他的额外特殊功能,包括串行通信、外部中断控制、计时计数控制及外部数据存储器内容的读取或写入控制等功能。其引脚分配如下:P3.0:RXD,串行通信输入。P3.1:TXD,串行通信输出。P3.2:INT0,外部中断0输入。P3.3:INT1,外部中断1输入。P3.4:T0,计时计数器0输入。P3.5:T1,计时计数器1输入。P3.6:WR:外部数据存储器的写入信号。 P3.7:RD,外部数据存储器的读取信号。2.1 主板电路系统整体硬件电路包括,传感器数据采集电路,温度显示电路,单片机主板电路等,如图2.5 所示:图2.1 单片机主板电路
25、2.3 显示电路显示电路是使用的串口显示,这种显示最大的优点就是使用口资源比较少,只用p2口串口的发送和接收,LCD液晶显示屏显示,显示比较清晰。温度显示电路如图2.2所示: 图2.2 温度显示电路3 软件设计系统程序主要包括主程序,读出温度子程序,温度转换命令子程序,计算温度子程序,显示数据刷新子程序等。3.1 主程序流程图主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量的当前温度值,温度测量每1s进行一次。这样可以在一秒之内测量一次被测温度,其程序流程见图3.1所示:初始化调用显示子程序1S到?初次上电读出温度值温度计算处理显示数据刷新发温度转换开始命令NYNY图3.1
26、 主程序流程图 3.2 读出温度子程序流程图读出温度子程序的主要功能是读出RAM中的9字节,在读出时需进行CRC校验,校验有错时不进行温度数据的改写。其程序流程图如图3.2所示:Y发DS18B20复位命令发跳过ROM命令发读取温度命令读取操作,CRC校验9字节完?CRC校验正?确?移入温度暂存器结束NNY图3.2 温度子程序流程图 3.3 温度转换命令子程序流程图温度转换命令子程序主要是发温度转换开始命令,当采用12位分辨率时转换时间约为750ms,在本程序设计中采用1s显示程序延时法等待转换的完成。温度转换命令子程序流程图如上图,图3.3所示:发DS18B20复位命令发跳过ROM命令发温度转
27、换开始命令 结束图3.3 温度转换命令子程序流程图3.4 计算温度子程序流程图计算温度子程序将RAM中读取值进行BCD码的转换运算,并进行温度值正负的判定,其程序流程图如图3.4所示: 开始温度零下?温度值取补码置“”标志计算小数位温度BCD值 计算整数位温度BCD值 结束置“+”标志NY图3.4 温度子程序流程图3.5 显示数据刷新子程序流程图显示数据刷新子程序主要是对显示缓冲器中的显示数据进行刷新操作,当最高显示位为0时将符号显示位移入下一位。程序流程图如图3.5所示:温度数据移入显示寄存器十位数0?百位数0?十位数显示符号百位数不显示百位数显示数据(不显示符号) 结束NNYY图3.5 显
28、示数据刷新子程序流程图4 Proteus仿真调试4.1 Proteus软件介绍Proteus软件10是来自英国Labcenter electronics公司的EDA工具软件,它组合了高级原理布图、混合模式SPICE仿真,PCB设计以及自动布线来实现一个完整的电子设计系统。此系统受益于15年来的持续开发,被电子世界在其对PCB设计系统的比较文章中评为最好产品“The Route to PCB CAD”。Proteus 产品系列也包含了我们革命性的VSM技术,用户可以对基于微控制器的设计连同所有的周围电子器件一起仿真。用户甚至可以实时采用诸如LED/LCD、键盘、RS232终端等动态外设模型来对设
29、计进行交互仿真。 其功能模块:个易用而又功能强大的ISIS原理布图工具;PROSPICE混合模型SPICE仿真;ARES PCB设计。PROSPICE 仿真器的一个扩展PROTEUS VSM:便于包括所有相关的器件的基于微处理器设计的协同仿真。此外,还可以结合微控制器软件使用动态的键盘,开关,按钮,LEDs甚至LCD显示CPU模型。支持许多通用的微控制器,如PIC,AVR,HC11以及8051。最新支持ARM。交互的装置模型包括:LED和LCD显示,RS232终端,通用键盘,I2C,SPI器件。强大的调试工具,包括寄存器和存储器,断点和单步模式。IAR C-SPY 和Keil uVision2
30、等开发工具的源层调试。应用特殊模型的DLL界面-提供有关元件库的全部文件。4.2 Proteus界面介绍 Proteus ISIS的工作界面是一种标准的Windows界面,如图4.1所示。包括:标题栏、主菜单、标准工具栏、绘图工具栏、状态栏、对象选择按钮、预览对象方位控制按钮、仿真进程控制按钮、预览窗口、对象选择器窗口、图形编辑窗口。图4.1 Proteus 窗口界面图4.2.1 原理图编辑窗口顾名思义,它是用来绘制原理图的。蓝色方框内为可编辑区,元件要放到它里面。注意,这个窗口是没有滚动条的,你可用预览窗口来改变原理图的可视范围。 4.2.2 预览窗口它可显示两个内容,一个是:当你在元件列表
31、中选择一个元件时,它会显示该元件的预览图;另一个是,当你的鼠标焦点落在原理图编辑窗口时(即放置元件到原理图编辑窗口后或在原理图编辑窗口中点击鼠标后),它会显示整张原理图的缩略图,并会显示一个绿色的方框,绿色的方框里面的内容就是当前原理图窗口中显示的内容,因此,你可用鼠标在它上面点击来改变绿色的方框的位置,从而改变原理图的可视范围。4.2.3 模型选择工具栏主要模型(Main Modes):1* 选择元件(components)(默认选择的)2* 放置连接点3* 放置标签(用总线时会用到)4* 放置文本5* 用于绘制总线6* 用于放置子电路7* 用于即时编辑元件参数 (先单击该图标再单击要修改的
32、元件)配件(Gadgets)1* 终端接口(terminals) 有 VCC、地、输出、输入等接口2* 器件引脚:用于绘制各种引脚3* 仿真图表(graph) 用于各种分析,如 Noise Analysis4* 录音机5* 信号发生器(generators)6* 电压探针:使用仿真图表时要用到7* 电流探针:使用仿真图表时要用到8* 虚拟仪表:有示波器等2D 图形(2D Graphics)1* 画各种直线2* 画各种方框3* 画各种圆4* 画各种圆弧5* 画各种多边形6* 画各种文本7* 画符号8* 画原点等4.2.4 元件列表用于挑选元件(components) 终端接口(terminals
33、) 信号发生器( generators) 仿真图表(graph )等。举例,当你选择“元件(components)”单击“P”按钮会打开挑选元件对话框,选择了一个元件后该元件会在元件列表中显示,以后要用到该元件时,只需在元件列表中选择即可。4.2.5 方向工具栏 旋转:旋转角度只能是 90 的整数倍。成水平翻转和垂直翻转。使用方法:先右键单击元件,再点击(左击)相应的旋转图标。4.2.6 仿真工具栏仿真控制按钮1* 运行2* 单步运行3* 暂停4* 停止4.3 本次设计仿真过程4.3.1 创建原理图 启动Proteus软件,单击挑选元件按钮,在元件库中选出所需元器件,出现如图4.2所示:图4.
34、2 选取元件库中元件示意图4.3.2 绘制的仿真原理图如4.3所示:图4.3 仿真原理图4.3.3 系统调试双击单片机出现下图所示画面图4.4,在Program File一栏中选取仿真项目的源程序代码,点击OK。图4.4 加载源程序示意效果图4.3.4 开始仿真单击Play按钮,进入仿真状态,出现下图4.5所示:图4.5 仿真结果 4.4 总结与体会经过将近几周的毕业设计,终于完成了我的数字温度计的设计,虽然没有完全达到设计要求,但从心底里说,还是高兴的,毕竟这次设计把仿真成功做了出来,高兴之余不得不深思呀!在本次设计的过程中,我发现很多的问题,虽然以前还做过这样的设计但这次设计真的让我长进了
35、很多,单片机毕业设计重点就在于软件算法的设计,需要有很巧妙的程序算法,。此外,本次毕业设计也使我对单片机技术有了更进一步的了解,实际操作和课本上的知识有很大的联系,又高于课本,一个看似很简单的电路,要动手做出来就比较困难了,因为是设计让我们在以后的学习中要注意这点,要把课本上所学的知识跟实际联系起来。有好多的东西,只有我们去试着做了,才能真正的掌握,只学习理论有些东西是很难理解的,更谈不上掌握,同时本次电路的设计巩固了所学知识,也使我们把理论与实际从真正的意义上结合起来了,增强了学习的兴趣,考验了我们借助图书馆、互联网搜索、查阅相关资料,以及综合能力。从这次的毕业设计中,我真真正正的意识到,在
36、以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的写与读的过程中才能提高,这就是我在这次毕业设计中的最大收获,为以后从事电子电路设计、研制电子产品方面的工作奠定了一定的基础。参考文献1李朝青,单片机原理及接口技术(简明修订版).杭州:北京航空航天大学出版社,1998 Li chaoqing, Single-chip Microcomputer Principle and Interface Technology.hangzhou: Beijing University of Aeronautics and Astronautics Press
37、,19982李广弟.单片机基础.北京:北京航空航天大学出版社,1994 Li guang di. Single-chip based on.Bijing: Beijing University of Aeronautics and Astronautics Press,19943阎石.数字电子技术基础(第三版). 北京:高等教育出版社,1989 Yan shi. Digital Electronics. Beijing: Higher Education Press.19894廖常初.现场总线概述J.电工技术,1999.Liao changchu. Fieldbus OverviewJ. El
38、ectrotechnical,1999致 谢在毕业设计完成之际,我要特别感谢我的指导老师王韧教授的热情关怀和悉心指导。在我毕业设计制作过程中,王韧教授倾注了大量的心血和汗水,无论是在课题的选题、构思和资料的收集方面,还是在课题的研究方法以及成文定稿方面,我都得到了王韧教授悉心细致的教诲和无私的帮助,特别是他广博的学识、深厚的学术素养、严谨的治学精神和一丝不苟的工作作风使我终生受益,在此表示真诚地感谢和深深的谢意。 写作过程中,也得到了许多同学的宝贵建议,在此一并致以诚挚的谢意。感谢所有关心、支持、帮助过我的良师益友。 最后,向在百忙中抽出时间对本文进行评审并提出宝贵意见的各位老师表示衷心地感谢
39、!并祝湖工蒸蒸日上。附录1 程序清单LCD1602#include /用AT89C51时就用这个头文件/#include /用华邦W78E58B时必须用这个头文件#include /注意那个LCD_Wait()函数,它是判忙标志的,在实际硬件要把注掉的那种打开/Port Definitions*sbit LcdRs= P20;sbit LcdRw= P21;sbit LcdEn = P22;sfr DBPort = 0x80;/P0=0x80,P1=0x90,P2=0xA0,P3=0xB0. 数据端口/内部等待函数unsigned char LCD_Wait(void)LcdRs=0;LcdR
40、w=1;_nop_();LcdEn=1;_nop_();/while(DBPort&0x80); /在用Proteus仿真时,注意用屏蔽此语句,在调用GotoXY()时,会进入死循环,/可能在写该控制字时,该模块没有返回写入完备命令,即DBPort&0x80=0x80/实际硬件时打开此语句LcdEn=0;return DBPort;/向LCD写入命令或数据*#define LCD_COMMAND0 / Command#define LCD_DATA1 / Data#define LCD_CLEAR_SCREEN0x01 / 清屏#define LCD_HOMING 0x02 / 光标返回原点v
41、oid LCD_Write(bit style, unsigned char input)LcdEn=0;LcdRs=style;LcdRw=0;_nop_();DBPort=input;_nop_(); /注意顺序LcdEn=1;_nop_(); /注意顺序LcdEn=0;_nop_();LCD_Wait();/设置显示模式*#define LCD_SHOW0x04 /显示开#define LCD_HIDE0x00 /显示关 #define LCD_CURSOR0x02 /显示光标#define LCD_NO_CURSOR0x00 /无光标 #define LCD_FLASH0x01 /光标