课程设计(论文)基于51单片机设计的数字温度计.doc

上传人:laozhun 文档编号:3993263 上传时间:2023-03-30 格式:DOC 页数:22 大小:1.34MB
返回 下载 相关 举报
课程设计(论文)基于51单片机设计的数字温度计.doc_第1页
第1页 / 共22页
课程设计(论文)基于51单片机设计的数字温度计.doc_第2页
第2页 / 共22页
课程设计(论文)基于51单片机设计的数字温度计.doc_第3页
第3页 / 共22页
课程设计(论文)基于51单片机设计的数字温度计.doc_第4页
第4页 / 共22页
课程设计(论文)基于51单片机设计的数字温度计.doc_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《课程设计(论文)基于51单片机设计的数字温度计.doc》由会员分享,可在线阅读,更多相关《课程设计(论文)基于51单片机设计的数字温度计.doc(22页珍藏版)》请在三一办公上搜索。

1、课程设计(论文)说明书题 目:基于51单片机设计的数字温度计 院 (系): 专 业: 学生姓名: 学 号: 指导教师: 2011年 12 月 2 日摘 要本论文介绍了一种以单片机为主要控制器件,以DS18B20为温度传感器的新型数字温度计。主要包括硬件电路和系统程序的设计。硬件电路主要包括主控制器,测温控制电路和显示电路等,主控制器采用单片机AT89C52,温度传感器采用美国DALLAS半导体公司生产的DS18B20,显示电路采用LCD1602直读显示。测温控制电路由温度传感器组成。系统程序包括主程序,测温子程序和显示子程序等。DS18B20新型单总线数字温度传感器是DALLAS公司生产的单线

2、数字温度传感器,集温度测量和A/D转换于一体,直接输出数字量,具有接口简单、精度高、抗干扰能力强、工作稳定可靠等特点。关键词:单片机;AT89C52;温度传感器DS18B20;LCD1602;ABSTRACTThe paper introduced one kind new digital thermometer that take the MicroController Unit as the primary control componet and take DS18B20 as the temperature sensor. Mainly included the design of t

3、he hardware electric circuit and the design of the system program. The hardware electric circuit mainly included the master controller,the temperarure measured electric circuit and the display circuit and so on,the master contoller used Micro Contronller Unit AT89C52,the trmperature sensor used DS18

4、B20 which the American DALLAS semiconductor company produces,the display circuit used LCD1602 straight to read the demonstration.Temperature control circuit from trmperature sensors .The system program mainly included the master routine,the temperature subroutine,the data tenovates subroutine and so

5、 on.DS18B20 is a digital temperature sensor of single bus .It is producted by DALLAS cooperation.DS18B20assembles temperature measure and A/D converter,exports digital signal directly,operation easily,better precise,protecting disturb,running steably and so on.KEY WORDS:Microcontroller Unit;AT89C52;

6、Temperature sensor DS18B20;LCD1602目 录摘 要1引言31、设计任务及方案分析31.1 设计任务及要求31.2 设计原则31.3 设计总体方案及分析31.31系统总体设计31.32总设计原理图41.33总设计PCB电路42、主要芯片简介及部分相关电路结构介绍42.1 AT89C5242.1.1AT89C52的主要主要功能特性42.1.2AT89C52的引脚功能及管脚电压52.1.3复位电路62.1.4晶振电路62.2温度传感器DS18B2062.2.1、DS18B20温度传感器与单片机的接口电路92.2.2系统整体硬件电路102.3、 LCD1602102.3.

7、1显示电路123、 软件编程调试及性能分析123.1 主程序123.2读温度子程序133.3转换温度子程序143.4调试性能分析及注意事项143.4.1软件调试143.4.2硬件调试143.4.3注意事项14结论15谢 辞16参考文献:17附 录18引言随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,其中数字温度计就是一个典型的例子,但人们对它的要求越来越高,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从数单片机技术入手,一切向着数字化控制,智能化控制方向发展。本设计所介绍的数字温度计与传统的温度计相比,具有读数方便,测温范围广,测

8、温准确,其输出温度采用数字显示,主要用于对测温比较准确的场所,或科研实验室使用。 1、设计任务及方案分析1.1 设计任务及要求 设计一个以单片机为核心的温度测量系统,可实现的功能:基本范围-50-110精度误差小于1系统具有显示功能,能实时显示测得的实际温度值1.2 设计原则一般系统的设计原则包含安全性(稳定抗干扰性),操作的便利性(人性化),实时性,通用性和经济性。1.3 设计总体方案及分析数字温度计首先通过温度传感器把温度转化成电信号,这里采用DS18B20直接输出是数字信号不用经过模数转换,采用单片机编程实现十进制转换能够显示的数字信号,然后在液晶屏LCD1602上面显示出来。当然本设计

9、也可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来。不过这种设计需要用到A/D转换电路,其中还涉及到电阻与温度的对应值的计算,感温电路比较麻烦。而且在对采集的信号进行放大时容易受温度的影响出现较大的偏差。所以一开始就不打算采用此种方法进行设计。1.31系统总体设计AT89C51LCD显示DS18B20温 度 传 感 器单片机复位时钟振荡温度计电路设计总体设计方框图如图1所示,控制器采用单片机AT89S52,温度传感器采用DS18B20,用LCD实现温度显示。图1.31总体设计

10、方框图1.32总设计原理图1.33总设计PCB电路2、主要芯片简介及部分相关电路结构介绍2.1 AT89C52AT89C52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,AT89C52单片机在电子行业中有着广泛的应用。2.1.1AT89C52的主要主要功能特性1)兼容MCS51指令系统 2)8k可反复擦写(大于1000次)Flash ROM; 3)32个双向I

11、/O口; 4)256x8bit内部RAM; 5)3个16位可编程定时/计数器中断; 6)时钟频率0-24MHz; 7)2个串行中断,可编程UART串行通道; 8)2个外部中断源,共8个中断源; 9)2个读写中断口线,3级加密位; 10)低功耗空闲和掉电模式,软件设置睡眠和唤醒功能; 11)有PDIP、PQFP、TQFP及PLCC等几种封装形式,以适应不同产品的需求。2.1.2AT89C52的引脚功能及管脚电压AT89C52为8 位通用微处理器,采用工业标准的C51内核,在内部功能及管脚排布上与通用的8xc52 相同,其主要用于会聚调整时的功能控制。功能包括对会聚主IC 内部寄存器、数据RAM及

12、外部接口等功能部件的初始化,会聚调整控制,会聚测试图控制,红外遥控信号IR的接收解码及与主板CPU通信等。主要管脚有:XTAL1(19 脚)和XTAL2(18 脚)为振荡器输入输出端口,外接12MHz 晶振。RST/Vpd(9 脚)为复位输入端口,外接电阻电容组成的复位电路。VCC(40 脚)和VSS(20 脚)为供电端口,分别接+5V电源的正负端。P0P3 为可编程通用I/O 脚。在本设计当中,P1作为输入,P2作为输出。P0 口是一组8 位漏极开路型双向I/O 口, 也即地址/数据总线复用口。作为输出口用时,每位能吸收电流的 方式驱动8 个TTL逻辑门电路,对端口P0 写“1”时,可作为高

13、阻抗输入端用。 在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8 位)和数据总线复用,在访问期间激活内部上拉电阻。 在Flash 编程时,P0 口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。 P1 是一个带内部上拉电阻的8 位双向I/O 口, P1 的输出缓冲级可驱动(吸收或输出电流)4 个TTL 逻辑 门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉 电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。 与AT89C51 不同之处是,P1.0 和P1.1 还可分别作为定时/计数器2 的外部

14、计数输入(P1.0/T2)和输入(P1.1/T2EX), 参见表1。 Flash 编程和程序校验期间,P1 接收低8 位地址。 表.P1.0和P1.1的第二功能 引脚号功能特性P1.0T2,时钟输出P1.1T2EX(定时/计数器2)P2 是一个带有内部上拉电阻的8 位双向I/O 口,P2 的输出缓冲级可驱动(吸收或输出电流)4 个TTL 逻辑 门电路。对端口P2 写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。 在访问外部程序存储器或16 位地址的外部数据存储器(例如执行MOVX DPTR 指

15、令)时,P2 口送出高8 位地址数据。在访问8 位地址的外部数据存储器(如执行MOVX RI 指令)时,P2 口输出P2 锁存器的内容。 Flash 编程或校验时,P2亦接收高位地址和一些控制信号。 P3 口是一组带有内部上拉电阻的8 位双向I/O 口。P3 口输出缓冲级可驱动(吸收或输出电流)4 个TTL 逻 辑门电路。对P3 口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。此时,被外部拉低的P3 口将用上拉电阻输出电流(IIL)。 P3 口除了作为一般的I/O 口线外,更重要的用途是它的第二功能 P3 口还接收一些用于Flash 闪速存储器编程和程序校验的控制信号。 2.1.3复位

16、电路复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。2.1.4晶振电路AT89C52中有一个用于构成内部振荡器的高增益反向放大器,引脚XTAL1和XTAL2分别是该放大器的输入端和输出端。这个放大器与作为反馈元件的片外石英晶体或陶瓷谐振器一起构成自激振荡器,如右图所示。外接石英晶体及电容C1、C2接在放大器的反馈回路中构成并联振荡电路,对外接电容C1、C2虽然没有十分严格的要求,但电容容量的大小会轻微影响振荡频率的高低、振荡器工作的稳定性、起振的难易程度及温度稳定性,我们推荐电容使用30PF士10PF.2.2温度传感器DS18B20DS18B20温度传感器是美国D

17、ALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现位的数字值读数方式。DS18B20的性能特点如下:独特的单线接口仅需要一个端口引脚进行通信;多个DS18B20可以并联在惟一的三线上,实现多点组网功能;无须外部器件;可通过数据线供电,电压范围为3.05.5;零待机功耗;温度以或位数字;用户可定义报警设置;报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作; DS18B20采用脚PR35封装或脚SOIC封装,其内部结构框图如

18、下图所示。C64 位ROM和单线接口高速缓存存储器与控制逻辑温度传感器高温触发器TH低温触发器TL配置寄存器8位CRC发生器Vdd I/O图2.2 18B20内部结构64位ROM的结构开始位是产品类型的编号,接着是每个器件的惟一的序号,共有48位,最后位是前面56位的CRC检验码,这也是多个DS18B20可以采用一线进行通信的原因。温度报警触发器和,可通过软件写入户报警上下限。DS18B20温度传感器的内部存储器还包括一个高速暂存和一个非易失性的可电擦除的EERAM。高速暂存RAM的结构为字节的存储器,结构如图3所示。头个字节包含测得的温度信息,第和第字节和的拷贝,是易失的,每次上电复位时被刷

19、新。第个字节,为配置寄存器,它的内容用于确定温度值的数字转换分辨率。DS18B20工作时寄存器中的分辨率转换为相应精度的温度数值。该字节各位的定义如图3所示。低位一直为,是工作模式位,用于设置DS18B20在工作模式还是在测试模式,DS18B20出厂时该位被设置为,用户要去改动,R1和0决定温度转换的精度位数,来设置分辨率。温度 LSB温度 MSBTH用户字节1TL用户字节2配置寄存器保留保留保留CRC 图2.2.1 DS18B20字节定义由表2.2.2可见,DS18B20温度转换的时间比较长,而且分辨率越高,所需要的温度数据转换时间越长。因此,在实际应用中要将分辨率和转换时间权衡考虑。高速暂

20、存的第、字节保留未用,表现为全逻辑。第字节读出前面所有字节的CRC码,可用来检验数据,从而保证通信数据的正确性。当DS18B20接收到温度转换命令后,开始启动转换。转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第、字节。单片机可以通过单线接口读出该数据,读数据时低位在先,高位在后,数据格式以0.0625LSB形式表示。当符号位时,表示测得的温度值为正值,可以直接将二进制位转换为十进制;当符号位时,表示测得的温度值为负值,要先将补码变成原码,再计算十进制数值。表2是一部分温度值对应的二进制温度数据。表2.2.2 DS18B20温度转换时间表 DS18B20完成温度转

21、换后,就把测得的温度值与RAM中的TH、T字节内容作比较。若TH或TTL,则将该器件内的报警标志位置位,并对主机发出的报警搜索命令作出响应。因此,可用多只DS18B20同时测量温度并进行报警搜索。在64位ROM的最高有效字节中存储有循环冗余检验码(CRC)。主机ROM的前56位来计算CRC值,并和存入DS18B20的CRC值作比较,以判断主机收到的ROM数据是否正确。DS18B20的测温原理是这这样的,器件中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器;高温度系数晶振随温度变化其振荡频率明显改变,所产生的信号作为减法计数器的脉冲输入。器件中还有一个计数门,

22、当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲进行计数进而完成温度测量。计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将55所对应的一个基数分别置入减法计数器、温度寄存器中,计数器和温度寄存器被预置在55所对应的一个基数值。减法计数器对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器的预置值减到时,温度寄存器的值将加,减法计数器的预置将重新被装入,减法计数器重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器计数到时,停止温度寄存器的累加,此时温度寄存器中的数值就是所测温度值。其输出用于修正减法计数器的预置值,只要计数器门仍未关闭就重复上述

23、过程,直到温度寄存器值大致被测温度值。 表2.2.3一部分温度对应值表温度/二进制表示十六进制表示+1250000 0111 1101 000007D0H+850000 0101 0101 00000550H+25.06250000 0001 1001 00000191H+10.1250000 0000 1010 000100A2H+0.50000 0000 0000 00100008H00000 0000 0000 10000000H-0.51111 1111 1111 0000FFF8H-10.1251111 1111 0101 1110FF5EH-25.06251111 1110 011

24、0 1111FE6FH-551111 1100 1001 0000FC90H另外,由于DS18B20单线通信功能是分时完成的,它有严格的时隙概念,因此读写时序很重要。系统对DS18B20的各种操作按协议进行。操作协议为:初使化DS18B20(发复位脉冲)发ROM功能命令发存储器操作命令处理数据。2.2.1、DS18B20温度传感器与单片机的接口电路DS18B20可以采用两种方式供电,一种是采用电源供电方式,此时DS18B20的1脚接地,2脚作为信号线,3脚接电源,如右图。另一种是寄生电源供电方式,单片机端口接单线总线,为保证在有效的DS18B20时钟周期内提供足够的电流,可用一个MOSFET管

25、来完成对总线的上拉。当DS18B20处于写存储器操作和温度A/D转换操作时,总线上必须有强的上拉,上拉开启时间最大为10us。采用电阻4.7K的接高电平。由于单线制只有一根线,因此发送接口必须是三态的。2.2.2系统整体硬件电路 图2.2.2 总电路接线图注:由于是仿真电路,所以有许多额外的电路没有连接,如单片机的晶振电路,复位电路。2.3、 LCD16021602字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线,VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样,其中:表2.3 LCD1602A管脚说明表引脚符号功能说明1VSS一般接地

26、2VDD接电源(+5V)3V0液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。4RSRS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。5R/WR/W为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。6EE(或EN)端为使能(enable)端,下降沿使能。7DB0底4位三态、 双向数据总线 0位(最低位)8DB1底4位三态、 双向数据总线 1位9DB2底4位三态、 双向数据总线 2位10DB3底4位三态、 双向数据总线 3位11DB4高4位三态、 双向数据总线 4位1

27、2DB5高4位三态、 双向数据总线 5位13DB6高4位三态、 双向数据总线 6位14DB7高4位三态、 双向数据总线 7位(最高位)(也是busy flag)15BLA背光电源正极16BLK背光 电源负极表2.3.1 寄存器选择控制表RSR/W操作说明00写入指令寄存器(清除屏等)01读busy flag(DB7),以及读取位址计数器(DB0DB6)值10写入数据寄存器(显示各字型等)11从数据寄存器读取数据注:关于E=H脉冲开始时初始化E为0,然后置E为1,再清0。busy flag(DB7):在此位为被清除为0时,LCD将无法再处理其他的指令要求。 表2.3.2 LCD显示地址12345

28、67891011121314151600H01H02H03H04H05H06H07H08H09H0AH0BH0CH0DH0EH0FH40H41H42H43H44H45H46H47H48H49H4AH4BH4CH4DH4EH4FH2.3.1显示电路显示电路采用LCD1602A显示,P3.0 P3.1 P3.2分别接LCD1602A的RS(4脚) R/W(5脚) E(6脚),从P2口输出数据。 图2.3.1.1 LCD1602A外观图 图2.3.1.2 液晶连接电路图3、 软件编程调试及性能分析系统程序主要包括主程序读出温度子程序,温度转换命令子程序,计算温度子程序等。3.1 主程序主程序的主要功

29、能是负责温度的实时显示、读出并处理DS18B20的测量的当前温度值,温度测量每1s进行一次。这样可以在一秒之内测量一次被测温度,其程序流程见图3.1所示。开始LCD初始化ds1820初始化读取温度显示温度延时 图3.1 主函数流程图3.2读温度子程序Y发DS18B20复位命令发跳过ROM命令发读取温度命令读取操作,CRC校验9字节完?CRC校验正?确?移入温度暂存器结束NNY图3.2 读温度子程序流程图3.3转换温度子程序发DS18B20复位命令发跳过ROM命令发温度转换开始命令 结束图3.3 温度转换子程序流程图3.4调试性能分析及注意事项3.4.1软件调试问题一: LCD液晶屏不断的闪烁,

30、看不清字符和温度值。解决:调动R7滑动电阻,可使LCD变清晰。问题二:不能估计及自由设置上下线温度。解决:因硬件部分未设置输出模型,例如LED灯闪烁,蜂鸣器报警等,硬件设施的局限从而限制了软件配置,所以两者同步才能得到更好的发挥。3.4.2硬件调试 硬件调试时,我采用了分模块调试,这样可更快的分析出调试中的错误,并容易改正。主要分块:液晶模块调试,温度采集模块,按键模块。问题一:调试液晶模块时,液晶不显示解决:参阅课本认真比对,未发现有任何引脚接错,然后,利用万用表测试是否识虚焊,经测量,有虚焊,重新焊接。但仍未有显示。再检查,我发现排线之间有短路的现象,主要是没有套筒。更换排线才有显示。问题

31、得到解决。问题二:调试温度采集模块时,液晶上无显示。解决:由于在设计硬件电路时,我采用18B20为插拔式的。所以担心是接触不好,但这样会显示出85C,所以由现象看,不是这个原因。用万用表测量液晶的数据管脚,没有电平变换,所以应该是18B20未采集到温度。触摸18B20时,发现烫手,应该是正负极接反。更改后,正确。问题三:调试按键模块时,有按键抖动现象。解决:按键抖动是在设计时,容易出现的现象。可以通过软件调试和硬件调试的方法解决。由于软件调试简单有效,所以该设计采用软件调试,在程序中对按键的扫描中,在其后添加20MS的延迟,再次判断按键是否按下。这样有效的消除按键的抖动。3.4.3注意事项1、

32、DS18B20从测温结束到将温度值转换成数字量时需要一定的转换时间,这是必须保证的,不然会出现转换错误的现象,使温度输出总是显示85.2、在实际使用过程中,应使电源电压保持在5V左右,若电源电压过低,会使所测得的温度精度降低。结论通过这次对数字温度计的设计与制作,让我了解了设计电路的程序,也让我了解了关于数字温度计的原理与设计理念。让一无所知的我尝到了痛苦的考验,实实在在考验了自己实际动手能力和思维能力,还有就会是动嘴能力,不懂就问,身边的同学着实被我精神折磨了一番。通过这次学习,让我对各种电路都有了大概的了解,所以说,坐而言不如立而行,对于这些电路还是应该自己动手实际操作才会有深刻理解。在焊

33、接过程中我曾将温度传感器的电源、地焊反啦,导致温度传感器急剧发热,后经观察和查询资料还有就是高手帮忙才得以改正。从这次的课程设计中,我真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的写与读的过程中才能提高,这就是我在这次课程设计中的最大收获。 另外,经别人提醒,考虑到以后再设计中,会使用到这次设计的模块,所以在设计中使用到排针和排线,液晶LCD和18B20使用插拔式的,这样有利用以后再其他设计中使用,简化以后的设计,也使本次设计的电路得到很好的应用。这要感谢老师给我这次实践的机会来感受一下冬日温度使用温度计的温暖。谢 辞

34、感谢老师的理解;感谢老师的体谅;感谢老师的宽容;感谢老师的帮助;感谢老师的指导;感谢老师的笑容。庆幸同学的耐心;感谢同学的真心;感慨自己的决心!参考文献:【1】 新概念51单片机C语言教程 入门、提高、开发、拓展全攻略 郭天祥编著 电子工业出版社【2】 韩颖; Proteus在单片机技术实训教学中的应用J;中国科教创新导刊;2008年31期【3】阎石.数字电子技术基础(第五版). 北京:高等教育出版社,2005【4】马忠梅等.单片机的C语言应用程序设计(第4版),2007【5】倪晓军.单片机原理与接口技术教程.北京:清华大学出版社,2009【6】廖常初。现场总线概述【J】.电工技术,1999【

35、7】何立民,单片机应用系统设计【M】.北京航空航天大学【8】附 录源程序:#include #include #define uchar unsigned char#define uint unsigned intsbit DQ = P34 ; /定义DS18B20端口DQ sbit BEEP=P07 ; /蜂鸣器驱动线bit presence ;sbit LCD_RS = P35 ; sbit LCD_RW = P36 ;sbit LCD_EN = P37 ;uchar code cdis1 = WWW.51DPJ.NET ;uchar code cdis2 = WENDU: . C ;uc

36、har code cdis3 = DS18B20 ERR0R ;uchar code cdis4 = PLEASE CHECK ;unsigned char data temp_data2 = 0x00,0x00 ;unsigned char data display5 = 0x00,0x00,0x00,0x00,0x00 ;unsigned char code ditab16 = 0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09 ;void beep() ; unsigned cha

37、r code mytab8 = 0x0C,0x12,0x12,0x0C,0x00,0x00,0x00,0x00 ;#define delayNOP() ; _nop_() ;_nop_() ;_nop_() ;_nop_() ; ;void delay1(int ms) unsigned char y ; while(ms-) for(y = 0 ; y250 ; y+) _nop_() ; _nop_() ; _nop_() ; _nop_() ; /*检查LCD忙状态 */*lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。 */bit lcd_busy() b

38、it result ; LCD_RS = 0 ; LCD_RW = 1 ; LCD_EN = 1 ; delayNOP() ; result = (bit)(P2&0x80) ; LCD_EN = 0 ; return(result) ; /*写指令数据到LCD */*RS=L,RW=L,E=高脉冲,D0-D7=指令码。*/void lcd_wcmd(uchar cmd) while(lcd_busy() ; LCD_RS = 0 ; LCD_RW = 0 ; LCD_EN = 0 ; _nop_() ; _nop_() ; P2 = cmd ; delayNOP() ; LCD_EN = 1

39、 ; delayNOP() ; LCD_EN = 0 ; /*写显示数据到LCD */*RS=H,RW=L,E=高脉冲,D0-D7=数据。 */void lcd_wdat(uchar dat) while(lcd_busy() ; LCD_RS = 1 ; LCD_RW = 0 ; LCD_EN = 0 ; P2 = dat ; delayNOP() ; LCD_EN = 1 ; delayNOP() ; LCD_EN = 0 ; /* LCD初始化设定 */void lcd_init() delay1(15) ; lcd_wcmd(0x01) ; /清除LCD的显示内容 lcd_wcmd(0

40、x38) ; /16*2显示,5*7点阵,8位数据 delay1(5) ; lcd_wcmd(0x38) ; delay1(5) ; lcd_wcmd(0x38) ; delay1(5) ; lcd_wcmd(0x0c) ; /显示开,关光标 delay1(5) ; lcd_wcmd(0x06) ; /移动光标 delay1(5) ; lcd_wcmd(0x01) ; /清除LCD的显示内容 delay1(5) ;/* 设定显示位置 */void lcd_pos(uchar pos) lcd_wcmd(pos | 0x80) ; /数据指针=80+地址变量/*自定义字符写入CGRAM */void writetab() unsigned char i ; lcd_wcmd(0x40) ; /写CGRAM for (i = 0 ; i 8 ; i+) lcd_wdat(mytab i ) ; /*us级延时函数 */void Delay(unsigned int num) while( -num ) ;/*初始化ds1820 */Init_DS18B20(void) DQ = 1 ; /DQ复位 Delay(8) ; /稍做延时 DQ = 0 ; /单片机将DQ拉低 Delay(90) ; /精确延时 大于 480us DQ = 1 ; /拉高总线 Delay(8) ;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号