单片机简易数字温度计_第1页
单片机简易数字温度计_第2页
单片机简易数字温度计_第3页
单片机简易数字温度计_第4页
单片机简易数字温度计_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、课程设计说明书第1章 引言0第2章 开发和仿真软件简介12.1 开发软件Keil C51 uVision212.2 仿真软件Proteus ISIS2第3章 总体设计方案3第4章 系统硬件使用介绍44.1 DS18B20温度传感器44.2 单片机控制电路64.3 显示器采用LCD20048第5章 系统软件设计主要流程图95.1主程序流程图95.2 计算温度流程图105.3 液晶显示流程图115.4 读出温度子程序12第6章 系统仿真14第7章 总结与体会15主要参考资料16附录17附录一.源程序代码17附录二.软件仿真图29 第1章 引言随着人们生活水平的不断提高,单片机控制无疑是人们追求的目

2、标之一,它所给人带来的方便也是不可否定的,其中数字温度计就是一个典型的例子,但人们对它的要求越来越高,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从数单片机技术入手,一切向着数字化控制,智能化控制方向发展。在信息采集(传感器技术)、信息传输(通信技术)和信息处理(计算机技术)三大信息技术中,传感器属于信息技术的前沿尖端产品,尤其是温度传感器技术,在我国各领域已经引用的非常广泛,可以说是渗透到社会的每一个领域,人民的生活与环境的温度息息相关,在工业生产过程中需要实时测量温度,在农业生产中也离不开温度的测量,因此研究温度的测量方法和装置具有重要的意义。测量温度的关键是温度传感器,温度传

3、感器的发展经历了三个发展阶段:传统的分立式温度传感器,模拟集成温度传感器,智能集成温度传感器。目前的智能温度传感器(亦称数字温度传感器)是在20世纪90年代中期问世的,它是微电子技术、计算机技术和自动测试技术(ATE)的结晶,特点是能输出温度数据及相关的温度控制量,适配各种微控制器(MCU)。社会的发展使人们对传感器的要求也越来越高,现在的温度传感器正在基于单片机的基础上从模拟式向数字式,从集成化向智能化、网络化的方向飞速发展,并朝着高精度、多功能、总线标准化、高可靠性及安全性、开发虚拟传感器和网络传感器、研制单片测温系统等高科技的方向迅速发展。本次课程设计,利用Keil和Proteus软件设

4、计和仿真该智能数字多点测温系统。过程中所用到的主要电路由我们自主设计制作,通过查阅资料和借助指导老师最终设计出结构合理、美观,主要电气指标良好,性能稳定可靠的电路。以培养我们严谨的科学态度,正确的设计思想,科学的设计方法和良好的工作作风,掌握一定的专业技能及综合运用基础理论、基本知识的能力。第2章 开发和仿真软件简介 2.1 开发软件Keil C51 uVision2Keil uVISION2 是众多单片机应用开发软件中优秀的软件之一,它支持众多不同公司的MCS-51 架构的芯片,它集编辑,编译,仿真等于一体,同时还支持、PLM、汇编和C语言的程序设计,界面友好,易学易用,在调试程序,软件仿真

5、方面也有很强大的功能。Keil C51集成开发环境主要由菜单栏、工具栏、源文件编辑窗口、工程窗口和输出窗口五部分组成。工具栏为一组快捷工具图标,主要包括基本文件工具栏、建造工具栏和调试工具栏,基本文件工具栏包括新建、打开、拷贝、粘贴等基本操作。建造工具栏主要包括文件编译、目标文件编译连接、所有目标文件编译连接、目标选项和一个目标选择窗口。调试工具栏位于最后,主要包括一些仿真调试源程序的基本操作,如单步、复位、全速运行等。在工具栏下面,默认有三个窗口。左边的工程窗口包含一个工程的目标(target)、组(group)和项目文件。右边为源文件编辑窗口,编辑窗口实质上就是一个文件编辑器,我们可以在这

6、里对源文件进行编辑、修改、粘贴等。下边的为输出窗口,源文件编译之后的结果显示在输出窗口中,会出现通过或错误(包括错误类型及行号)的提示。如果通过则会生成“HEX”格式的目标文件,用于仿真或烧录芯片。基本环境如图2-1所示: 图2-1 Keil C51软件的运行界面 2.2 仿真软件Proteus ISISProteus软件是来自英国Labcenter electronics公司的EDA工具软件。该软件有十几年的历史,在全球广泛使用,除了其具有和其它EDA工具一样的原理布图、PCB自动或人工布线及电路仿真的功能外,其革命性的功能是,他的电路仿真是互动的,针对微处理器的应用,还可以直接在基于原理图

7、的虚拟原型上编程,并实现软件源码级的实时调试,如有显示及输出,还能看到运行后输入输出的效果,配合系统配置的虚拟仪器如示波器、逻辑分析仪等,为用户建立了完备的电子设计开发环境。Proteus ISIS的工作界面是一种标准的Windows界面。主要包括:标题栏、主菜单、标准工具栏、绘图工具栏、状态栏、对象选择按钮、预览对象方位控制按钮、仿真进程控制按钮、预览窗口、对象选择器窗口、图形编辑窗口。主要功能是在图形编辑窗口做出所需的电路图。软件的应用设计界面如图2-2所示:图2-2 Proteus软件的运行界面第3章 总体设计方案此次课程设计要求设计一个简易数字温度计。采用AT89C51单片机作为系统的

8、控制电路,负责数据的采集、处理、发送。可以采用一只温度传感器DS18B20产生温度数据并发送给单片机,此传感器,可以很容易直接读取被测温度值,进行转换,就可以满足设计要求。显示部分采用LCD2004显示器。这种方法电路比较简单,软件设计也比较简单。总体设计框图如下:振荡电路51单片机LCD2004显示器DSl8B20复位电路图3.1总体设计框图第4章 系统硬件使用介绍4.1 DS18B20温度传感器DS18B20可以程序设定912位的分辨率,精度为0.5C。可选更小的封装方式,更宽的电压适用范围。分辨率设定,及用户设定的报警温度存储在EPROM中,掉电后依然保存。温度传感器DS18B20引脚如

9、图3所示。 8引脚封装 TO92封装图4-1 温度传感器引脚功能说明: NC :空引脚,悬空不使用; VDD :可选电源脚,电源电压范围35.5V。当工作于寄生电源时,此引脚必须接地。 DQ :数据输入/输出脚。漏极开路,常态下高电平。 GND :为电源地DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码。64位光刻ROM的排列是:开始8位(28H)是产品类型标号,接着的48位是该DS18B20自身的序列号,最后8位是前面56位的循环冗余校验码

10、(CRC=X8+X5+X4+1)。光刻ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。 DS18B20中的温度传感器可完成对温度的测量,以12位转化为例:用16位符号扩展的二进制补码读数形式提供,以0.0625/LSB形式表达,其中S为符号位。 这是12位转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。 例如+125的数字输出为0

11、7D0H,+25.0625的数字输出为0191H,-25.0625的数字输出为FF6FH,-55的数字输出为FC90H。 DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的E2RAM,后者存放高温度和低温度触发器TH、TL和结构寄存器。 暂存存储器包含了8个连续字节,前两个字节是测得的温度信息,第一个字节的内容是温度的低八位,第二个字节是温度的高八位。第三个和第四个字节是TH、TL的易失性拷贝,第五个字节是结构寄存器的易失性拷贝,这三个字节的内容在每一次上电复位时被刷新。第六、七、八个字节用于内部计算。第九个字节是冗余检验字节。 该字节各位的意义如下:TM R

12、1 R0 1 1 1 1 1低五位一直都是1 ,TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。在DS18B20出厂时该位被设置为0,用户不要去改动。R1和R0用来设置分辨率,如表1所示:(DS18B20出厂时被设置为12位) 表1 DS18B20温度转换时间表R1R0分辨率/位温度最大转向时间00993.750110187.510113751112750根据DS18B20的通讯协议,主机控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行复位,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。复位要求

13、主CPU将数据线下拉500微秒,然后释放,DS18B20收到信号后等待1660微秒左右,后发出60240微秒的存在低脉冲,主CPU收到此信号表示复位成功。4.2 单片机控制电路控制电路采用AT89C51作为控制电路主体,附加外部震荡电路和复位电路。本设计用到的AT89C51内部引脚介绍:图 4.2 AT89C51内部引脚 P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P0口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据地址的低八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部

14、必须被拉高。 本设计中使用P0口作为输出口,输出单片机处理好的温度信息到1602液晶显示中。使用时必须外接上拉电阻以保证输出的不是高阻态。如图所示:图 4.3 P0口接上拉电阻使用P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。本设计中P1口作为输出口输出1602的控制信号,控制1602的显示/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是

15、否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。 XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出。本设计中P0口需要接10k上拉电阻,否则为P0输出高阻态。震荡电路采用石英晶振接单片机XTAL1与XTAL2端口构成内部震荡方式。电容C1,C2起稳定震荡频率、快速起震的作用,电容值选用33pF。内部振荡的方式所得时钟信号比较稳定,电路中使用较多。图4.4外部震荡电路RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器

16、周期的高电平时间。复位电路采用的是开关复位方式,接单片机RST端口。图4.5 复位电路4.3 显示器采用LCD2004图4.6 LCD1602引脚图2004采用标准的16脚接口,其中: 第1脚:VSS为电源地 第2脚:VDD接5V电源正极 第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会 产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。 第4脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。接单片机P2.5口。 第5脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。接单片机P2.6口。

17、第6脚:E(或EN)端为使能(enable)端。接单片机P2.7口。 第7-14脚:D0-D7为8位双向数据端。接单片机P0口。 1602通过D0D7的8位数据端传输数据和指令。 显示模式设置: (初始化) 0011 0000 0x38 设置204显示,8位数据接口; 显示开关及光标设置: (初始化) 0000 1DCB D显示(1有效)、C光标显示(1有效)、B光标闪烁(1有效) 0000 01NS N=1(读或写一个字符后地址指针加1 &光标加1),N=0(读或写一个字符后地址指针减1 &光标减1), S=1 且 N=1 (当写一个字符后,整屏显示左移) ,S=0 当写一个字符后,整屏显示

18、不移动,数据指针设H,所以数据地址为80H+地址码(0-27H,40-67H) 其他设置:置数据首地址为80,01H(显示清屏,数据指针=0,所有显示=0);02H(显示回车,数据指针=0)第5章 系统软件设计主要流程图5.1主程序流程图主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量的当前温度值。图 5.1主程序流程图设置堆栈指针将温度转换为BCD码发读存储器命令读温度数据复位DS18B20发跳过ROM命令显示缓冲区初始化更新数据缓冲区延时发温度转换命令复位DS18B20发跳过ROM命令开始5.2 计算温度流程图计算温度子程序是将所输入的数据进行处理,包括正负判定,小数位

19、、百位、十位、个位计算开始温度零下?温度值取补码置“”标志计算小数位温度BCD值计算整数位(百、十、个位)温度BCD值 结束置“+”标志NY图5.2 计算温度流程图5.3 液晶显示流程图液晶显示是将LCD1602进行初始化并且确定好显示位,并且将内部存储的数据信息进行显示。结束开始初始化LCD2004延时调用子程序设置第一行显示位置与内容调用子程序设置第一行显示位置与内容图5.3液晶显示流程图5.4 读出温度子程序读出温度子程序的主要功能是读出RAM中的9字节,在读出时需进行CRC校验,校验有错时不进行温度数据的改写。其程序流程图如下所示发DS18B20复位命令发跳过ROM命令发温度转换开始命

20、令 结束开始图5.4 读出温度流程图第6章 系统仿真图6-1第7章 总结与体会经过将近一周的单片机课程设计,最终完成了我的数字温度计的设计,虽然没有完全达到设计要求(特别是系统初始化过程中没有消除85.0的初始显示),但通过努力把程序弄懂修改好并且仿真实现了,还是很高兴的。在本次设计的过程中,我发现很多的问题,虽然以前还做过类似的设计但这次设计真的让我长进了很多,单片机课程设计重点就在于软件算法的设计,需要有很巧妙的程序算法,虽然以前写过几次程序,但我觉的写好一个程序并不是一件简单的事,特别是这么长的程序,需要修改调试。我发现在单片机的学习过程中,只有我们去试着做了,才能真正的掌握,只学习理论

21、有些东西是很难理解的,更谈不上掌握。从这次的课程设计中,我意识到在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的写与读的过程中才能提高,这就是我在这次课程设计中的最大收获。通过这次对数字温度计的设计与制作,让我了解了设计电路的程序,也让我了解了关于数字温度计的原理与设计理念,要设计一个电路时我们应该大胆尝试小心求证。在确定自己的想法后要进行一步步地仿真。在此感谢我们的张国旭老师,老师严谨细致、一丝不苟的作风一直是我工作、学习中的榜样;老师循循善诱的教导和不拘一格的思路给予我无尽的启迪;这次简易数字温度计设计的每个实验细节和每个数据,都离不

22、开老师您的细心指导。而您开朗的个性和宽容的态度,帮助我能够很顺利的完成了这次课程设计。同时感谢对我帮助过的同学们,谢谢你们对我的帮助和支持,让我感受到同学的友谊。主要参考资料1 肖看,李群芳.单片机原理、接口及应用清华大学出版社.20102 楼然苗.单片机课程设计指导.北京航空航天出版社.20023 孙育才.MCS-51 系列单片微型计算机及其应用.东南大学出版社4 王法能. 单片机原理及应用.科学出版社.20045 李飞光 .单片机课程设计实例指导.北京航空航天大学出版社. 2004附录附录一.源程序代码 TEMP_ZH EQU 24H ;实测温度值存放单元 TEMPL EQU 25H TE

23、MPH EQU 26H TEMPHC EQU 29H ;正、负温度值标记 TEMPLC EQU 2AH TEMPFC EQU 2BH LCD_X EQU 2FH ;LCD 字符显示位置 LCD_RS EQU P2.5 ;LCD 寄存器选择信号 LCD_RW EQU P2.6 ;LCD 读写信号 LCD_EN EQU P2.7 ;LCD 允许信号 DQ EQU P3.2 ;DS18B20数据信号 ORG 0000HMAIN: MOV SP,#60H MOV A,#00H MOV R0,#20H ;将20H2FH 单元清零 MOV R1,#10HCLEAR: MOV R0,A INC R0 DJN

24、Z R1,CLEAR LCALL SET_LCDSTART: LCALL RST ;调用18B20复位子程序 LCALL MENU_OK ;DS1820存在,调用显示正确信息子程序 LCALL TEMP_BJ ;显示温度标记 JMP START2START2: LCALL RST;调用DS18B20复位子程序 MOV A,#0CCH ;跳过ROM匹配命令 LCALL WRITE MOV A,#44H ;温度转换命令 LCALL WRITE LCALL RST MOV A,#0CCH ;跳过ROM匹配 LCALL WRITE MOV A,#0BEH ;读温度命令 LCALL WRITE LCAL

25、L READ;调用DS18B20数据读取操作子程序 LCALL CONVTEMP;调用温度数据BCD 码处理子程序 LCALL DISPBCD;调用温度数据显示子程序 LCALL CONV;调用LCD显示处理子程序 SJMP START2 ;循环;* 显示温度标记子程序 *TEMP_BJ: MOV A,#0CBH LCALL WCOM MOV DPTR,#BJ1 ;指针指到显示消息 MOV R1,#0 MOV R0,#3BBJJ1: MOV A,R1 MOVC A,A+DPTR LCALL WDATA INC R1 DJNZ R0,BBJJ1 RETBJ1: DB 00H,C;* 显示正确信息

26、子程序*MENU_OK: MOV DPTR,#M_OK1 ;指针指到显示消息 MOV A,#1 ;显示在第一行 LCALL LCD_PRINT MOV DPTR,#M_OK2 MOV A,#2 LCALL LCD_PRINT MOV DPTR,#M_OK3 MOV A,#3 LCALL LCD_PRINT RETM_OK1: DB OK 4130220238 ,0M_OK2: DB ,0M_OK3: DB DATE:2016-1-26 ,0;*DS18B20复位子程序(初始化)*RST: SETB DQ NOP CLR DQ MOV R0,#6BH ;主机发出延时复位低脉冲 MOV R1,#0

27、4HTSR1: DJNZ R0,$ MOV R0,#6BH DJNZ R1,TSR1 SETB DQ ;拉高数据线 NOP NOP NOPTSR5: MOV R0,#06BHTSR6: DJNZ R0,$ ; 时序要求延时一段时间TSR7: SETB DQ RET;* 将自定义字符写入LCD的CGRAM中*STORE_DATA: MOV A,#40H LCALL WCOM MOV R2,#08H MOV DPTR,#D_DATA MOV R3,#00HS_DATA: MOV A,R3 MOVC A,A+DPTR LCALL WDATA ;写入数据 INC R3 DJNZ R2,S_DATA R

28、ETD_DATA: DB 0CH,12H,12H,0CH,00H,00H,00H,00H;* DS18B20数据写入操作子程序 *WRITE: MOV R2,#8 ;一共8位数据 CLR CWR1: CLR DQ ;开始写入DS18B20总线要处于复位(低)状态 MOV R3,#07 DJNZ R3,$ ;总线复位保持16微妙以上 RRC A ;把一个字节DATA 分成8个BIT环移给C MOV DQ,C ;写入一位 MOV R3,#3CH DJNZ R3,$ ;等待100微妙 SETB DQ ;重新释放总线 NOP DJNZ R2,WR1 ;写入下一位 SETB DQ RET;* DS18B

29、20数据读取操作子程序 *READ: MOV R4,#4 ;将温度低位、高位、TH、TL从DS18B20中读出 MOV R1,#TEMPL ;存入25H、26H、27H、28H单元RE00: MOV R2,#8RE01: CLR CY SETB DQ NOP NOP CLR DQ ;读前总线保持为低 NOP NOP NOP SETB DQ ;开始读总线释放 MOV R3,#09 ;延时18微妙 DJNZ R3,$ MOV C,DQ ;从DS18B20总线读得一位 MOV R3,#3CH DJNZ R3,$ ;等待100微妙 RRC A ;把读得的位值环移给A DJNZ R2,RE01 ;读下一

30、位 MOV R1,A INC R1 DJNZ R4,RE00 RET;* 温度值 BCD 码处理子程序 *CONVTEMP: MOV A,TEMPH ;判温度是否零下 ANL A,#08H JZ TEMPC1 ;温度零上转 CLR C MOV A,TEMPL ;二进制数求补(双字节) CPL A ;取反加1 ADD A,#01H MOV TEMPL,A MOV A,TEMPH CPL A ADDC A,#00H MOV TEMPH,A MOV TEMPHC,#0BH;负温度标志 MOV TEMPFC,#0BH SJMP TEMPC11TEMPC1: MOV TEMPHC,#0AH ;正温度标志

31、 MOV TEMPFC,#0AHTEMPC11: MOV A,TEMPHC SWAP A MOV TEMPHC,A MOV A,TEMPL ANL A,#0FH ;乘0.0625 MOV DPTR,#TEMPDOTTAB MOVC A,A+DPTR MOV TEMPLC,A ;TEMPLC LOW=小数部分 BCD MOV A,TEMPL ;整数部分 ANL A,#0F0H ;取出高四位 SWAP A MOV TEMPL,A MOV A,TEMPH ;取出低四位 ANL A,#0FH SWAP A ORL A,TEMPL ;重新组合 MOV TEMP_ZH,A LCALL HEX2BCD1 M

32、OV TEMPL,A ANL A,#0F0H SWAP A ORL A,TEMPHC ;TEMPHC LOW = 十位数 BCD MOV TEMPHC,A MOV A,TEMPL ANL A,#0FH SWAP A ;TEMPLC HI = 个位数 BCD ORL A,TEMPLC MOV TEMPLC,A MOV A,R4 JZ TEMPC12 ANL A,#0FH SWAP A MOV R4,A MOV A,TEMPHC ;TEMPHC HI = 百位数 BCD ANL A,#0FH ORL A,R4 MOV TEMPHC,ATEMPC12: RET;* 二-十进制转换子程序 *HEX2B

33、CD1: MOV B,#064H DIV AB MOV R4,A MOV A,#0AH XCH A,B DIV AB SWAP A ORL A,B RETTEMPDOTTAB: DB 00H,00H,01H,01H,02H,03H,03H,04H ; 小数部分码表 DB 05H,05H,06H,06H,07H,08H,08H,09H;* LCD显示子程序 *SHOW_DIG2H: MOV B,#100 DIV AB ADD A,#30H PUSH B MOV B,LCD_X LCALL LCDP2 POP B MOV A,#0AH XCH A,B DIV AB ADD A,#30H INC L

34、CD_X PUSH B MOV B,LCD_X LCALL LCDP2 POP B INC LCD_X MOV A,B MOV B,LCD_X ADD A,#30H LCALL LCDP2 RETSHOW_DIG2L: MOV B,#100 DIV AB MOV A,#0AH XCH A,B DIV AB ADD A,#30H PUSH B MOV B,LCD_X LCALL LCDP2 POP B INC LCD_X MOV A,B MOV B,LCD_X ADD A,#30H LCALL LCDP2 RET;* 显示区 BCD 码温度值刷新子程序 *DISPBCD: MOV A,TEMPL

35、C ANL A,#0FH MOV 70H,A ;小数位 MOV A,TEMPLC SWAP A ANL A,#0FH MOV 71H,A ;个位 MOV A,TEMPHC ANL A,#0FH MOV 72H,A ;十位 MOV A,TEMPHC SWAP A ANL A,#0FH MOV 73H,A ;百位 RET;* LCD 显示数据处理子程序 *CONV: MOV A,73H ;加载百位数据 MOV LCD_X,#6 ;设置位置 CJNE A,#1,CONV1 JMP CONV2CONV1: CJNE A,#0BH,CONV11 MOV A,#- ;-号显示 JMP CONV111CON

36、V11: MOV A,#0 ;+号不显示CONV111: MOV B,LCD_X LCALL LCDP2 JMP CONV3CONV2: LCALL SHOW_DIG2 ;显示数据CONV3: INC LCD_X MOV A,72H ;十位 LCALL SHOW_DIG2 INC LCD_X MOV A,71H ;个位 LCALL SHOW_DIG2 INC LCD_X MOV A,#. MOV B,LCD_X LCALL LCDP2 MOV A,70H ;加载小数点位 INC LCD_X ;设置显示位置 LCALL SHOW_DIG2 ;显示数据 RET;* 第二行显示数字子程序 *SHOW

37、_DIG2:ADD A,#30H MOV B,LCD_X LCALL LCDP2 RET;* 第二行显示数字子程序 *LCDP2: PUSH ACC MOV A,B ;设置显示地址 ADD A,#0C0H ;设置LCD的第二行地址 LCALL WCOM ;写入命令 POP ACC ;由堆栈取出A LCALL WDATA ;写入数据 RET;* 对 LCD 做初始化设置及测试*SET_LCD: CLR LCD_EN LCALL INIT_LCD ;初始化 LCD LCALL STORE_DATA ;将自定义字符存入LCD的CGRAM RET;* LCD初始化 *INIT_LCD: MOV A,#38H ;2行显示,字形5*7点阵 LCALL WCOM LCALL DELAY1 MOV A,#38H LCALL WCOM LCALL DELAY1 MOV A,#38H LCA

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论