1、课程设计内容课程设计目录一、概述3二、设计思路3三、软件及元件的选取介绍4(一)Proteus简介4(二)、主控器AT89C51单片机简单介绍4(3)DS18B20简单介绍5(四)显示器LCD1602简单介绍5四、电路设计7五、系统程序设计9六、总结及心得12参考文献12附录(程序清单)11Proteus仿真图工作流程图一、概述由于科技的不断进步,现代信息技术的飞速发展传统工业改造的逐步实现,能够独立工作的温度检测和显示系统应用于诸多领域。这里设计的数字温度计具有读数方便,测温范围广,测温精确,数字显示,适用范围宽等特点。在工业生产中温度是常用的被控参数,而采用单片机来对这些被控参数进行控制已
2、成为当今的主流,本可课程设计选用AT89C51型单片机作为主控制器件,DS18B20作为测温传感器,通过LCD1602实现温度显示。通过DS18B20直接读取被测温度值,进行数据转换,该器件的物理化学性能稳定,线性度较好,在0100最大线性偏差小于0.01。该器件可直接向单片机传输数字信号,便于单片机处理及控制。另外,DS1820具有测温系统简单、测温精度高、连接方便、占用口线少等优点。而LCD1602是工业字符型液晶,能够同时显示16x02即32个字符,具有微功耗、体积小、显示内容丰富、超薄轻巧,常用在袖珍式仪表和低功耗应用系统中。2、设计思路 采用数字温度芯片DS18B20 测量温度,输出
3、信号全数字化。采用了单总线的数据传输,由数字温度计DS18B20和AT89C51单片机构成的温度测量装置,它直接输出温度的数字信号,也可直接与计算机连接。采用AT89C51单片机控制,软件编程的自由度大,可通过编程实现各种各样的算术算法和逻辑控制,而且体积小,硬件实现简单,安装方便。该系统利用AT89S51芯片控制温度传感器DS18B20进行实时温度检测并显示,能够实现快速测量环境温度,并可以根据需要设定上下限温度。该系统扩展性非常强。该测温系统电路简单、精确度较高、实现方便、软件设计也比较简单。系统框图如图1所示。 图一 温度检测及显示系统框图三、软件及元件的选取介绍(一)Proteus简介
4、Proteus ISIS是英国Labcenter公司开发的电路分析与实物仿真软件。它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路,该软件的特点是:(1)实现了单片机仿真和SPICE电路仿真相结合。具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。(2)支持主流单片机系统的仿真。目前支持的单片机类型有:68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列
5、以及各种外围芯片。(3)提供软件调试功能。在硬件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态,因此在该软件仿真系统中,也必须具有这些功能;同时支持第三方的软件编译和调试环境,如Keil C51 uVision3等软件。(4)具有强大的原理图绘制功能。总之,该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大。(二)、主控器AT89C51单片机简单介绍 1、AT89C51 提供以下标准功能: 4k 字节Flash 闪速存储器,128字节内部RAM,32 个I/O 口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片
6、内振荡器及时钟电路。同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。 2、主要特性: 与MCS-51 兼容; 4K字节可编程FLASH存储器;寿命:1000写/擦循环;数据保留时间:10年;全静态工作:0Hz-24MHz;三级程序存储器锁定;288位内部RAM;32可编程I/O线;两个16位定时器/计数器;5个中断源;可编程串行通道;低功耗的闲置和掉电模式;片内振荡器和时钟电路。(三)DS18
7、B20简单介绍:DS18B20数字温度计是DALLAS公司生产的1Wire,即单总线器件,具有线路简单,体积小的特点。因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计,十分方便。其实物图如图所示,其引脚的功能描述可见下表所示。 DS18B20的引脚功能描述引脚功能说明GND地DQ数字输入输出引脚VDD可选的VDD引脚DS18B20的特点: (1)只要求一个端口即可实现通信。 (2)在DS18B20中的每个器件上都有独一无二的序列号。 (3)实际应用中不需要外部任何元器件即可实现测温。 (4)测量温度范围在55C到125C之间。 (5)数字温度计的分辨率用户可以
8、从9位到12位选择。 (6)内部有温度上、下限告警设置。 AT89C51与温度芯片DS18B20的连接在仿真软件中,可以用DS18B20仿真器上的上、下键来调节温度的高低,以此来检测读、写温度程序是否成功。具体的DS18B20与AT89C51连接如图2-14所示(四)显示器LCD1602简单介绍 1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用。1602LCD是指显示的内容为16X2,即可以显示两行,
9、每行16个字符液晶模块(显示字符和数字)。1602LCD的特性: +3.3V电压,对比度可调;内含复位电路;提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能;有80字节显示数据存储器DDRAM;内建有192个5X7点阵的字型的字符发生器:8个可由用户自定义的5X7的字符发生器CGRAM:图2-7 LCD1602外观LCD1602采用标准的14脚接口,其中VSS为地电源,VDD接5V正电源,VEE为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。RS为寄存器选择,高电平时选择数据寄存器、
10、低电平时选择指令寄存器。RW为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。D0D7为8位双向数据线。四、电路设计 1、电源电路 2、振荡电路:3、复位电路:4、DS18B20与单片机的接口电路:5、PROTEUS仿真电路图五、系统程序设计 1、主程序模块设计本系统程序设计采用汇编语言进行编写。主程序设计思路为:先对系统进行初始化,如:LCD1602初始化等,然后才能进入主显示模块,即可在LC
11、D1602上看到相应的信息。对于LCD1602的初始化,主要是对开启显示屏,清屏,设置显示初始行等操作。具体的主程序流程如图:主程序源代码:MAIN:LCALL INIT_LCD1602 ;调用显示器LCD1602的初始化LCALL INIT_DS18B20;调用DS18B02的初始化START:LCALL DISPLAY_TEMP ;调用温度显示程序JMP START2、液晶显示器LCD1602模块 本系统采用的是LCD1602液晶显示器,由于其是本身带有驱动模块的液晶屏,所以对于LCD1602操作程序可分为开显示、设置显示初始行、写数据和清屏等部分。LCD1602的写命令程序和写数据程序分
12、别以子程序的形式写在程序里,以便主程序中的调用。对LCD1602的具体操作过程如图所示。1602LCD的总体操作流程图见下图所示: 软件流程图LCD初始化程序:INIT_LCD1602:MOV LCD,#01H ;清屏CALL ENABLE_ORDERMOV LCD,#38H ;8位点阵,两行显示CALL ENABLE_ORDERMOV LCD,#0CH ;显示开关为开,光标开关为关,闪烁开关为关CALL ENABLE_ORDERMOV LCD,#80H ;显示的起始位置为第一行的第一位CALL ENABLE_ORDERRET3、温度芯片DS18B20操作模块具体的DS18B20的操作过程如下
13、图所示:DS18B20的操作过程读DS18B20的流程图见下图所示。其源程序可查阅附录中的源代码部分。 读DS18B20的流程图六、总结及心得通过本次课程设计,我学到了很多东西,理论知识得到强化,实践能力得到了提高。在这课程设计中,让我对单片机AT89C51有了更深入的理解,在运用上能力得到很大提高,让我更多的知道它的优点:单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。单片机具有体积小、功能多、价格低廉、使用方便、系统设计灵活等优点。因此,它应用广泛前景美好,它的实用性大大地提高了我对课程设计的兴趣。在课程设计开始前,自己感到很茫然,因为对软
14、件的和单片机不是很熟悉,可是但我逐渐的了解后,发现其实并不是想象的那么难,而且很好用。这次课程设计项目虽然不是很大,但用的技术和知识一点也不逊色于大点的项目,比如说其中用到了DS18B20中的串行通信技术,AT89C51基本操作知识,汇编语言方面的知识等。 这次课程设计也是一次非常难得的理论和实际相结合的机会,通过这次系统设计,使我摆脱了以往单纯的理论知识学习状态,并且在和实际设计的结合锻炼了我的综合运用所学的专业基础知识,使我的实践能力的得到很大的提高。在设计过程中遇到了的以下问题,然而在老师或同学的帮助下一个一个解决了,培养了我一丝不苟的和不厌其烦的态度。这次设计虽然顺利做完了,但还是许多
15、美中不足之处,让我认识到自己对单片机应用方面的知识贫乏,也让我知道了proteus和keil使用的方便,对于书本上的很多理论知识还不能灵活运用,有很多我们掌握的知识在等着我去学习,我会在以后的学习生活中弥补我所缺少的知识。同时还从中学到了一件很重要的东西,那就是如何从理论到实践的转化,怎么样将我所学到的知识运用到我以后的工作中去。此次的课程设计给我奠定了一个实践基础,为以后毕业设计打下良好的基础,也为我在毕业后的生活中磨练自己,使自己适应于以后工作中的竞争。参考文献1李晓林.牛昱光.单片机原理与接口技术(第二版)北京:电子工业出版社,2011,11,325-3382 许兴存.曾琪琳,微型计算机
16、接口技术M.北京:电子工业出版社,2005,7:308-3293 丁元杰.单片微机原理及应用M.北京:机械工业出版社,2006,3:1-10,166-1805 宋彩利,孙友仓.单片机原理与C51编程M.西安:西安交通大学出版社,2008,7:165-1916 赵文博,刘文涛.单片机语言C51程序设计M.北京:人民邮电出版社,2005,10 :176-1987 边春元.C51单片机典型模块设计与应用M.北京:机械工业出版社,2008,4:1-248 邱关源.电路,北京:高等教育出版社M.2005,12:1-249 朱定华.单片机原理及接口技术实验M.北京:北方交通大学出版社,2002,11:24
17、-55附录:源程序 ORG 0000H;DS1602引脚定义RS EQU P3.0 ;RS为寄存器选择RW EQU P3.1 ;RW为读写信号线E EQU P3.2 ;E为使能端,E由高变低进执行命令LCD EQU P2 ;数据总线;DS18B20引脚定义-DQ BIT P3.7;单总线口;DS18B20数据存储单元定义-TEMPER_L EQU 50H ;暂存温度个位TEMPER_H EQU 51H ;暂存温度十位TEMPER_NUM EQU 52H;温度值存储FLAG1 BIT 00H ;DS18B20是否存在标志;*主程序*MAIN:LCALL INIT_LCD1602 ;调用显示器LC
18、D1602的初始化LCALL INIT_DS18B20;调用DS18B02的初始化START:LCALL DISPLAY_TEMP ;调用温度显示程序JMP START;*;LCD1602的初始化-INIT_LCD1602:MOV LCD,#01H ;清屏CALL ENABLE_ORDERMOV LCD,#38H ;8位点阵,两行显示CALL ENABLE_ORDERMOV LCD,#0CH ;显示开关为开,光标开关为关,闪烁开关为关CALL ENABLE_ORDERMOV LCD,#80H ;显示的起始位置为第一行的第一位CALL ENABLE_ORDERRET;DS18B20初始化程序-I
19、NIT_DS18B20: SETB DQ NOP CLR DQ MOV R0,#250TSR1: DJNZ R0,TSR1 ; 延时微秒SETB DQ MOV R0,#35 ;延时微秒TSR2: DJNZ R0,TSR2 JNB DQ,TSR3;如D0为低则复位成功,DS18B20存在LJMP TSR4 ; 延时TSR3: SETB FLAG1 ; 置标志位,表示DS1820存在LJMP TSR5 TSR4: CLR FLAG1 ; 清标志位,表示DS1820不存在LJMP TSR7 TSR5: MOV R0,#100 ;延时微秒TSR6: DJNZ R0,TSR6 ; TSR7: SETB
20、DQ ;拉高总线RET ;欢迎界面WELCOME:MOV LCD,#01H ;清屏CALL ENABLE_ORDERLINE1: ;欢迎界面的第一行MOV DPTR,#TABLE1MOV R1,#00HW1:LCALL DELAY1MOV A,R1MOVC A,A+DPTR CJNE A,#00H,W2 ;判断第一行是否显示完毕JMP LINE2W2:MOV LCD,ALCALL ENABLE_DISPLAY ;写数据到芯片中LCALL DELAY ;调用延时程序INC R1 ;位置后移一位MOV A,#80HORL A,R1 ;调整显示位置MOV LCD,ACALL ENABLE_ORDER
21、 ;写命令到芯片中JMP W1LINE2: ;欢迎界面的第二行MOV LCD,#0C0HCALL ENABLE_ORDER ;写命令到芯片中MOV DPTR,#TABLE2MOV R1,#00HW3:LCALL DELAY1 ;调用延时程序MOV A,R1MOVC A,A+DPTR CJNE A,#00H,W4LCALL DELAY1LCALL DELAY1RETW4:MOV LCD,ALCALL ENABLE_DISPLAY ;写数据到芯片中LCALL DELAYINC R1 ;位置后移一位MOV A,#0C0HORL A,R1 ;调整显示位置MOV LCD,ACALL ENABLE_ORD
22、ER ;写命令到芯片中JMP W3RET;清屏程序DISPLAY_BLANK:LCALL DELAY1 ;长延时(使其显示有闪烁效果)MOV LCD,#01H ;清屏命令LCALL ENABLE_ORDERLCALL DELAY1RET;TEMPERATURE信息提示程序-TEMPERATURE_LOGO:MOV LCD,#01H ;清屏CALL ENABLE_ORDERMOV LCD,#86H ;设置显示T的位置CALL ENABLE_ORDERMOV LCD,#54H ;显示TLCALL ENABLE_DISPLAYMOV LCD,#87H ;设置显示E的位置CALL ENABLE_ORD
23、ERMOV LCD,#69H ;显示ELCALL ENABLE_DISPLAYMOV LCD,#88H ;设置显示M的位置CALL ENABLE_ORDERMOV LCD,#6DH ;显示MLCALL ENABLE_DISPLAYMOV LCD,#89H ;设置显示P的位置CALL ENABLE_ORDERMOV LCD,#65H ;显示PLCALL ENABLE_DISPLAYMOV LCD,#8AH ;设置显示E的位置CALL ENABLE_ORDERMOV LCD,#72H ;显示EMOV LCD,#8AH ;设置显示R的位置CALL ENABLE_ORDERMOV LCD,#72H ;
24、显示RMOV LCD,#8AH ;设置显示A的位置CALL ENABLE_ORDERMOV LCD,#72H ;显示A MOV LCD,#8AH ;设置显示T的位置CALL ENABLE_ORDERMOV LCD,#72H ;显示T MOV LCD,#8AH ;设置显示U的位置CALL ENABLE_ORDERMOV LCD,#72H ;显示U MOV LCD,#8AH ;设置显示R的位置CALL ENABLE_ORDERMOV LCD,#72H ;显示R MOV LCD,#8AH ;设置显示E的位置CALL ENABLE_ORDERMOV LCD,#72H ;显示ELCALL ENABLE_
25、DISPLAYRET;显示温度的程序DISPLAY_TEMP:MOV LCD,#01H ;清屏LCALL ENABLE_ORDERLCALL GET_TEMP ;读取温度数据MOV A,TEMPER_NUMMOV B,#10DIV AB ;分离温度数据MOV TEMPER_H,AMOV TEMPER_L,BMOV LCD,#0CDH ;设置显示位置LCALL ENABLE_ORDERMOV A,TEMPER_HADD A,#30H ;进行显示调整MOV LCD,A ;显示温度的十位LCALL ENABLE_DISPLAYMOV LCD,#0CEH ;设置显示位置LCALL ENABLE_ORD
26、ERMOV A,TEMPER_LADD A,#30H ;进行显示调整MOV LCD,A ;显示温度的个位LCALL ENABLE_DISPLAYMOV LCD,#0CFH ;设置显示位置CALL ENABLE_ORDERMOV LCD,#0DFH ;显示温度符号LCALL ENABLE_DISPLAYRET;写数据到液晶显示器LCD1602-ENABLE_DISPLAY:SETB RS ;设置RS为高,选择数据寄存器CLR RW ;设置RW为低,进行写操作CLR E ;设置E为低,执行命令SETB ERET;写命令到液晶显示器LCD1602-ENABLE_ORDER:CLR RS ;设置RS为
27、低,选择指令寄存器CLR RW ;设置RW为低,进行写操作CLR E ;设置E为低,执行命令LCALL DELAY ;延时SETB E RET;读出转换后的温度值GET_TEMP: SETB DQ GT1:LCALL INIT_DS18B20 ;初始化DS18B20JB FLAG1,GT2 ;判断DS18B20是否存在LJMP GT1 GT2: MOV A,#0CCH ;跳过ROM匹配命令LCALL WRITE_1820 MOV A,#44H ; 发出温度转换命令LCALL WRITE_1820 NOP GT3:LCALL INIT_DS18B20 ;初始化DS18B20JB FLAG1,GT
28、4 ;判断DS18B20是否存在LJMP GT3 GT4:MOV A,#0CCH ;跳过ROM匹配LCALL WRITE_1820 MOV A,#0BEH ;发出读温度命令LCALL WRITE_1820 LCALL READ_1820 ;调用读DS18B20程序,读取温度低字节MOV TEMPER_L,A ;将读出的温度低位放入TEMPER_L中LCALL READ_1820 ;调用读DS18B20程序,读取温度高字节MOV TEMPER_H,A ;将读出的温度低位放入TEMPER_H中MOV A,#0F0H ANL A,TEMPER_L ; 舍去温度低位中小数点后的四位温度数值SWAP A MOV TEMPER_NUM,A ;得到温度的个位数MOV A,TEMPER_L JNB ACC.3,TEMPER_COV1 ; 四舍五入去温度值INC TEMPER_NUM TEMPER_COV1: MOV A,TEMPER_H ANL A,#07H SWAP A ORL A,TEMPER_NUM ;得到高四位,再与低四位相或得到温度值MOV TEMPER_NUM,A ; 保存变换后的温度数据
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1