《微机原理与应用课程设计基于单片机的四位数字温度计.doc》由会员分享,可在线阅读,更多相关《微机原理与应用课程设计基于单片机的四位数字温度计.doc(31页珍藏版)》请在三一办公上搜索。
1、课 程 设 计课程名称 微机原理与应用 课题名称 基于单片机的四位数字温度计设计 专 业 班 级 学 号 姓 名 指导教师 2011年6月7日课 程 设 计 任 务 书课程名称 微机原理与应用 课 题 数字温度计的设计 专业班级 学生姓名 学 号 指导老师 审 批 任务书下达日期 2011年6月7日任务完成日期 2011年6月18日设计内容与设计要求设计内容:以51系列单片机为核心,以开发板为平台;设计一个数字式温度计,要求使用温度传感器DS18B20测量温度,再经单片机处理后,由LED数码管显示测量的温度值。测温范围为0100,精度误差在0.5以内;并要求焊接好开发板,在开发板上进行调试。设
2、计要求:1)确定系统设计方案; 2)进行系统的硬件设计;3)完成必要元器件选择;4)开发板焊接及测试5)系统软件设计及调试;6)系统联调及操作说明7)写说明书主 要 设 计 条 件1、 MCS-51单片机实验操作台1台;2、 PC机及单片机调试软件,仿真软件proteus;3、 开发板1块; 4、 制作工具1套;5、系统设计所需的元器件。说 明 书 格 式目 录第1章、概述第2章、系统总体方案设计第3章 硬件设计第4章 开发板焊接及其测试第5章 软件设计及调试第6章 系统联调及操作说明第7章 总结参考文献 附录A 系统硬件原理图附录B 程序清单进 度 安 排设计时间分为二周第一周星期一、上午:
3、布置课题任务,课题介绍及讲课。下午:借阅有关资料,总体方案讨论。星期二、分班级焊接开发板星期三、确定总体方案,学习与设计相关内容。星期四、各部分方案设计,各部分设计。星期五、设计及上机调试。星期六、设计并调试第二周星期一:设计及上机调试。星期二:调试,中期检查。星期三:调试、写说明书。星期四-星期五上午:写说明书、完成电子版并打印成稿。星期五下午:答辩。参 考 文 献参考文献1、 王迎旭编.单片机原理与应用M.机械工业出版社.2004.2、 楼然苗编.51系列单片机设计实例M.北京航空航天大学出版社.3、 黄勤编.计算机硬件技术基础实验教程M.重庆大学出版社4、刘乐善编.微型计算机接口技术及应
4、用M.华中科技大学出版社.5、陈光东编.单片微型计算机原理及接口技术M.华中科技大学出版社.目 录第1章 概述6第2章 系统总体方案设计6第3章 硬件设计第4章 开发板焊接及其测试第5章 软件设计及调试第6章 系统联调及操作说明第7章 总结参考文献 附录A 程序清单第1章 概述随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,其中数字温度计就是一个典型的例子,但人们对它的要求越来越高,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从数单片机技术入手,一切向着数字化控制,智能化控制方向发展。本设计所介绍的数字温度计与传统的温度计相比,具有
5、读数方便,测温范围广,测温准确,其输出温度采用数字显示,主要用于对测温比较准确的场所,或科研实验室使用,该设计控制器使用单片机AT89S52,测温传感器使用DS18B20,用4位共阳极LED数码管以并口传送数据,实现温度显示,能准确达到以上要求。第2章 系统总体方案设计1.1设计思路根据任务书要求,初步思路如下:温度计电路设计总体设计方框图如图1所示,控制器采用单片机AT89S51,温度传感器采用DS18B20,用4位LED数码管以并口循环点亮数码管实现温度显示。主 控 制 器LED显 示温 度 传 感 器单片机复位时钟振荡报警点按键调整其中,1)P0.0至P0.7口连四个数码管的a,b,c,
6、d,e,f,g,dp口2)P2.0, P2.1, P2.2, P2.3分别作为四个数码管的片选端。3)P2.4口连温度传感器DS18B20的串行数据口。2.2硬件电路的设计方案 设计的电路主要由3个部分构成:STC89C52RC单片机最小系统、LED液晶显示模块及温度测量模块。如下图: 第3章 硬件设计3.1 STC89C52RC单片机最小系统最小系统包括晶体振荡电路、复位开关和电源部分。图2为STC89C52RC单片机的最小系统。 图 3-13.2 温度测量模块温度测量传感器采用DALLAS公司DS18B20的单总线数字化温度传感器,测温范围为-55125,可编程为9位12位A/D转换精度,
7、测温分辨率达到0.0625,采用寄生电源工作方式,CPU用P2.4口与DS18B20通信,占用CPU口线少,可节省大量引线和逻辑电路。接口电路下所示: 图 3-23.2.1 DS18B20原理(1) DS18B20单线智能温度传感器的性能特点DS18B20温度传感器是美国DALLAS半导体公司最近推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9-12位的数字值读数方式。它采用3脚PR35封装(2) DS18B20单线智能温度传感器的工作原理64位ROM的位结构如图36 所示。开始8位是产品类型的编号,接着是每个器件的惟
8、一的序号,共有48位,最后8位是前面56位的CRC检验码,可以多个 DS18B20可以采用一线进行通信。非易失性温度报警触发器TH和TL,可通过软件写入户报警上下限。DS18B20温度传感器的内部存储器还包括一个高速暂存RAM和一个非易失性的可电擦除的EEPRAM。高速暂存RAM的结构为8字节的存储器,结构如下图所示: 图3-2-1-1 高速暂存RAM结构图头2个字节包含测得的温度信息,第3和第4字节是TH和TL的拷贝,是易失的,每次上电复位时被刷新。第5个字节为配置寄存器,它的内容用于确定温度值的数字转换分辨率。DS18B20工作时按此寄存器中的分辨率将温度转换为相应精度的数值,该字节的R1
9、和R0决定温度转换的精度位数,即用来设置分辨率。DS18B20温度转换时间比较长,而且设定的分辨率越高,所需要的温度数据转换时间就越长。高速暂存RAM的第6、7、8字节保留未用,表现为全逻辑1。第9字节读出前面所有8字节的CRC码,可用来检验数据,从而保证通信数据的正确性。当DS18B20接收到温度转换命令后,开始启动转换。转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第1、2字节。单片机可以通过单总线接口读出该数据,读数据时低位在先,高位在后,数据格式以0.0625/LSB形式表示当符号位S=0时,表示测得的温度值为正值,可以直接将二进制转换为十进制;当符号位S
10、=1时,表示测得的温度值为负值,要先将补码变成原码,再计算十进制值。下表是一温度值对应的二进制温度数据: 图3-2-1-2 3.3 LED液晶显示模块:LED液晶显示模块由四个七段发光二极管(LED)数码管构成,采用共阳接法,把发光二极管的阳极都连在一起接到高电平上。通过编程实现逐个点亮各个数码管。其接线如下所示: 图3-4第4章 开发板焊接及其测试焊接整体电路,要提前进行布局,对于复杂的电路焊接过程也要非常认真细致,如果布局不合理在后序的工作中将很繁琐,而且影响外观。焊接是基本功,在线多的时候体现的更突出,焊接不好会造成短路等问题,在毕业设计过程中,我的焊接技术有了很大的进步,知道了很多需要
11、注意的细节,对今后的工作很有帮助。 第5章 软件设计及调试 5.1 主程序流程图主程序的主要功能是负责温度的实际显示、读数并处理DS18B20的测量温度值,温度测量循环不断进行,其流程图如下:18B20复位程序设定18B20暂存器设定值读转换后温度值读出的温度进行数据转换 图5-1 5.2设定DS18B20暂存器设定值DS18B20子程序是结合它的用户使用资料编写,主要完成的是初始化DS18B20,从DS18B20中读出一个字节的数据,向DS18B20中写入一个字节的数据,配置DS18B20包括警报温度的上限和下限、温度转换的精度。FLAG=1Y发跳过ROM命令写ds18b20写暂存器命令写报
12、警上下限选择十二位精度结束N图5-25.3 读转换后的温度当DS18B20接收到温度转换命令后,开始启动转换。转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第、字节。单片机可以通过单线接口读出该数据,读数据时低位在先,高位在后。要注意的是DS18B20单线通信功能是分时完成的,他有严格的时隙概念,因此读写时序很重要。系统对DS18B20的各种操作必须按协议进行。操作协议为:初始化DS18B20(发复位脉冲)发ROM功能命令发存储器操作命令处理数据。P2.4写1DS18B20复位FLAG=1Y发出温度转换命令, 写ds18b20发跳过ROM命令写ds18b20DS1
13、8B20复位发跳过ROM命令发出温度转换命令, 写ds18b20读两个字节的温度结束N 图 5-35.4 读出的温度进行数据转换鉴于28H,29H的温度转换及显示较为复杂。采用文字说明。以3-2-1-2为例,0111 1101为整数部分,低位的0000为小数部分。采用逐个移位的方法将8位温度值0111 1101存29H.再除10后存DOT_BIT ,DOT_BIT1中。将低位的1100 0000(小数部分)存37H。再利用公式xiaoshu1 = (a&0x0f)*10/16得小数点后第一位,公式xiaoshu2 = (a&0x0f)*100/16%10得小数点后第二位。然后逐个循环点亮各位数
14、码管。5.5 调试系统调试以程序为主。硬件调试比较简单,首先检查电路的焊接是否正确,然后可用万用表测试或通电检测。软件调试可以先编写显示程序并进行硬件正确性检验,然后分别进行主程序、读出温度子程序、温度转换命令子程序、计算温度子程序、显示刷新等子程序的编程及调试,由于DS18B20与单片机采用串行数据传送,因此,对DS18B20进行读写编程时必须严格的保证读写时序,否则将无法读取测量结果。本程序采用单片机汇编编写,用编译器vision 2.0编程调试。软件调试首先要能显示温度值,而且在有温度变化时(例如用手去接触)显示温度能改变就基本完成;其次,并且可以方便的选择输出不同测量点。5.5.1 硬
15、件调试焊接整体电路,要提前进行布局,对于复杂的电路焊接过程也要非常认真细致,如果布局不合理在后序的工作中将很繁琐,而且影响外观。我在初期布局不够好之后,发现了问题及时改过来免除了很多不必要的麻烦;焊接更是基本功,在线多的时候体现的更突出,焊接不好会造成短路等问题,在毕业设计过程中,我的焊接技术有了很大的进步,知道了很多需要注意的细节,对今后的工作很有帮助。5.5.2 软件调试软件是整个设计的核心部分,如果没有软件就想人没有思维一样。编程序更是重中之重,我在这次毕业设计中进一步学习了编程的思路和过程。从中也遇到了很多问题,编程时有些语法错误有时思路混乱出现很多问题,就是在不断的发现问题和解决问题
16、中学到了很多知识也提高了能力。在仿真中使用了伟福软件,并熟练掌握了这个软件。经过了反复的编译和改正终于成功的完成了整个程序的编写。 第6章 系统联调及操作说明6.1 系统联调 把实验板正、负极接在直流稳压电源上(5V),然后打开“VISION 2.0”软件进行硬件检查,先检查LED的连接是否正确。因为用P2口进行列扫描,P1口输出段码,可编程给P3口直接置0则可以检查。通过检查发现LED输出全为“8”,则硬件电路基本是正确的。(1) 软件的检查基本硬件检查完毕后,进行软件检查,首先对程序进行检查,改正程序中存在的错误语句,直到程序编译全通过。下一步则进行程序执行,结果只LED 显示为乱码,于是
17、检查软件“09”的数值表示正确与否。通过计算无误,然后检查硬件发现问题出在P1口的输出上,因为共阳极LED表示顺序“dp 、g 、f 、e 、d 、c 、b 、a”则应是P1.0对应a、P1.1对应b、P1.7对应dp,这样输出的数值才正确。于是重新焊接硬件错误的部分。全部改过来后,重新执行程序,又出现问题,首先数码管的b段亮度较弱,经检查发现244上接的电阻大小不一致,与b段相对应的那个电阻比其他的大,然后更换了电阻;对相应的线进行修改之后又发现有一路不能正常测量温度,对电路进行检查发现开关的其中一路没有导通。排除问题后本设计正常运行。(2) 烧写程序软件检查完毕则烧写程序。程序烧写完毕后把
18、AT89S52 安装在实验板上,重新接通电源,但LED显示还是4个“8”,于是用示波器检查电路的晶振,接好后示波器上显示正弦波,则表明晶振是起振的。于是检查复位电路,用电压表直接给它进行复位,则实验板上的LED显示4个“0”,并且开始显示周围温度。则确定问题一定在复位电路上,于是检查复位电路并连接好,电路开始正常工作。6.2 操作说明 将电源电压调至4.5V. 测温范围为0100,精度误差在0.5以内。可用手摸DS18B20,或用打火机点火焰放在DS18B20附近。 第7章 总结由于本设计采用了集成温度传感器,这样不仅减少了硬件电路的设计与调试,并且此温度传感元件的集成性能比传统的元件要优越得
19、多,这样简化了电路的设计难度还降低了产品的价格。如果我们采用传统的元件则在设计中还要加入A/D转换器和模拟开关,这样就增加了电路的设计难度并且感温元件的精度和转换性能也是远不及集成的感温元件DS18B20的。所以在以后的设计过程中应该尽量的采用集成元件。另外,本设计还可以实现高低温报警功能和多点温度测量功能,因此,能够适用于多种场合。此次课程设计花费了自己颇多时间,自己也很尽心尽力的去弄,但效果并不很如意,起初还认为应该会比较简单,而且自己也很有信心会弄好。经过两周的设计我了解了设计的难度,也认识到自己的许多的不足。虽然感觉理论上已经掌握,但在运用到实践的过程中仍有意想不到的困惑,经过一番努力
20、才得以解决。 在两周的课程设计过程中,我对单片机的学习的内容又有了进一步的加深,很多原来也许还不很清楚的知识现在弄清楚了,期间发现自己有很多的思维定势在里面,以至于自己有时候很容易陷入自己弄的圈套里,固执而不肯改变。设计过程中我也深刻认识到合作的重要性,通过合作可学到更多的东西,独学而无友。另外我发现程序设计是一个很灵活的东西,它反映了你解决问题的逻辑思维和创新能力,它是一个设计的灵魂所在。很多子程序是可以借鉴书本上的,但怎样衔接各个子程序却是问题关键的所在,这需要对单片机的结构很熟悉。在整个设计过程中我的大部分时间是用在程序上面了,而且调了很久才有结果,单片机的设计是软件和硬件的结合,二者是
21、密不可分的,且它有很强的实用性,因此我觉得自己很有必要把它学好。 另外在课程设计的过程中,当我们碰到不明白的问题时,指导老师总是耐心的讲解,给我的设计以极大的帮助,使我获益匪浅。电气信息学院课程设计评分表项 目评 价设计方案的合理性与创造性开发板焊接及其调试完成情况硬件设计或软件编程完成情况*硬件测试及软件调试结果*设计说明书质量设计图纸质量答辩汇报的条理性和独特见解答辩中对所提问题的回答情况完成任务情况独立工作能力组织纪律性(出勤率)综合评分 指导教师签名:_ 日 期:_ 注:表中标*号项目是硬件制作或软件编程类课题必填内容; 此表装订在课程设计说明书的最后一页。课程设计说明书装订顺序:封面
22、、任务书、目录、正文、评分表、附件(非16K大小的图纸及程序清单)。 参 考 文 献1.王迎旭编.单片机原理与应用M.机械工业出版社.2004.2.楼然苗编.51系列单片机设计实例M.北京航空航天大学出版社.3.黄勤编.计算机硬件技术基础实验教程M.重庆大学出版社4、刘乐善编.微型计算机接口技术及应用M.华中科技大学出版社.5、陈光东编.单片微型计算机原理及接口技术M.华中科技大学出版 社.6.杨忠煌编.单芯片8051实务与应用M.中国水利水电出版社.附录A 程序清单;*FLAG1 BIT F0 ;DS18B20存在标志位DQ BIT P2.4 ;18B20串口TEMPER_L EQU 29H
23、;低位TEMPER_H EQU 28H;高位A_BIT EQU 35H;十位B_BIT EQU 36H;个位DOT_BIT EQU 38H;小数点后第一位DOT_BIT1 EQU 39H;小数点后第二位;*ds18b20汇编程序起始*ORG 0000HAJMP MAINORG 0100H;*主程序开始*MAIN:LCALL INIT_18B20 ;DS18B20复位程序LCALL RE_CONFIG ;设定DS18B20暂存器设定值LCALL GET_TEMPER ;读转换后的温度值AJMP CHANGE ;读出的温度进行数据转换;*DS18B20复位程序*INIT_18B20: SETB D
24、QNOPCLR DQ;P2.4置0MOV R0,#0FBH ;延时TSR1: DJNZ R0,TSR1 ;延时SETB DQ ;P2.4置1MOV R0,#25HTSR2: JNB DQ ,TSR3;判断DQ是否为1,为1表明DS18B20不存在,为1跳转TSRDJNZ R0,TSR2TSR3: SETB FLAG1 ;置标志位,表明DS18B20存在AJMP TSR5 ;跳到TSR5延时TSR4: CLR FLAG1LJMP TSR7TSR5: MOV R0,#06BH ;延时TSR6: DJNZ R0,TSR6 ;延时TSR7:SETB DQ ;表明不存在RET;*设定DS18B20暂存器
25、设定值*RE_CONFIG:JB FLAG1,RE_CONFIG1;ds18b20存在则设定DS18B20暂存器设定值RETRE_CONFIG1: MOV A,#0CCH ;放跳过ROM命令LCALL WRITE_18B20 ;写ds18b20MOV A,#4EHLCALL WRITE_18B20 ;写暂存器命令MOV A,#00H ;报警上限中写入00HLCALL WRITE_18B20MOV A,#00H ;报警下限中写入00HLCALL WRITE_18B20MOV A,#7FH ;选择十二位精度LCALL WRITE_18B20RET;*读转换后的温度值*GET_TEMPER:SETB
26、 DQ ;P2.4置1LCALL INIT_18B20 ;DS18B20复位程序JB FLAG1,TSS2 ;ds18b20存在则读转换后的温度值RET ;若不存在则返回TSS2: MOV A,#0CCH ;跳过ROMLCALL WRITE_18B20MOV A,#44H ;发出温度转换命令LCALL WRITE_18B20 ;写ds18b20LCALL DISPLAY ;延时LCALL INIT_18B20 ;DS18B20复位程序MOV A,#0CCH ;跳过ROMLCALL WRITE_18B20 ;写ds18b20MOV A,#0BEH ;发出读温度换命令LCALL WRITE_18B
27、20LCALL READ2_18B20 ;读两个字节的温度RET;*写ds18b20汇编程序*WRITE_18B20:MOV R2,#8 ;循环8次CLR CWR1:CLR DQ ;p2.4置0MOV R3,#6 ;延时DJNZ R3,$ ;延时RRC AMOV DQ,CMOV R3,#23 ;延时DJNZ R3,$ ;延时SETB DQ ;p2.4置1NOPDJNZ R2,WR1SETB DQ ;p2.4置0RET;*读18B20程序,读出两个字节的温度*READ2_18B20:MOV R4,#2 ;低位存在29 H,高位存在28HMOV R1,#29HRE00: MOV R2,#8;循环8
28、次,将一个字节写入RE01: CLR CSETB CNOP ;延时NOP ;延时CLR DQ ;P2.4置0NOP ;延时NOP ;延时NOP ;延时SETB DQ ;P2.4置1MOV R3,#7 ;延时DJNZ R3,$ ;延时MOV C,DQ ;读p2.4MOV R3,#23;延时DJNZ R3,$ ;延时RRC ADJNZ R2,RE01 ;循环8次,将一个字节写入MOV R1,A ;将读取温度放29H(低位)DEC R1 ;R1指28H(高位)DJNZ R4,RE00 ;同样方法,数据读入28H(高位)RET;*读出的温度进行数据转换*CHANGE:mov a,29h ;低位数据存3
29、7H mov 37h,aMOV A,29HMOV C,28H.0 ;将28H中的最低位移入CRRC AMOV C,28H.1RRC AMOV C,28H.2RRC AMOV C,28H.3RRC AMOV 29H,A ;将转换好的8字节温度存29hLCALL DISPLAY ;调用数码管显示子程序LJMP MAIN;*DISPLAY*DISPLAY: mov a,29H;将29H中的十六进制数转换成10进制mov b,#10 ;10进制/10=10进制div abmov b_bit,a ;十位在amov a_bit,b ;个位在b;*获得小数部分*mov a,37h;取低位数据的低四位作为小数
30、部分anl a,#0fhmov b,#10mul abmov b,#16div ab mov dot_bit,a ;利用公式xiaoshu1 = (a&0x0f)*10/16得小数点后第一位mov a,37h;取低位数据的低四位作为小数部分anl a,#0fhmov b,#6;取16/10=6.25的近似值6mul abmov b,#10div abmov dot_bit1,b ;利用公式xiaoshu2 = (a&0x0f)*100/16%10得小数点后第二位mov dptr,#TAB ;指定查表启始地址mov r0,#4dpl1: mov r1,#250 ;显示1000次dplop:mov
31、 a,a_bit ;取个位数MOVC A,A+DPTR ;查个位数的7段代码anl a,#7fhmov p0,a ;送出个位的7段代码clr p2.1;开个位显示acall d1ms ;显示1mssetb p2.1mov a,b_bit ;取十位数MOVC A,A+DPTR ;查十位数的7段代码mov p0,a ;送出十位的7段代码clr p2.0;开十位显示acall d1ms ;显示1msacall d1mssetb p2.0mov a,dot_bit;取小数点后一位MOVC A,A+DPTRmov b,#80horl a,bMOV P0,ACLR P2.2ACALL d1mssetb p
32、2.2mov a,dot_bit1MOVC A,A+DPTRmov b,#80horl a,bmov p0,aclr p2.3acall d1ms ;1MS延时(按12MHZ算)setb p2.3djnz r1,dplop ;100次没完循环djnz r0,dpl1 ;4个100次没完循环ret;*D1MS: MOV R7,#80 ;1MS延时(按12MHZ算)DJNZ R7,$RET;*TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H END1. 温度传感器AD590基本知识 AD590产生的电流与绝对温度成正比,它可接收的工作电压为4
33、V30V,检测的温度范围为55150,它有非常好的线性输出性能,温度每增加1,其电流增加1uA。 AD590温度与电流的关系如下表所示 摄氏温度AD590电流经10K电压0273.2 uA2.732V10283.2 uA2.832 V20293.2 uA2.932 V30303.2 uA3.032 V40313.2 uA3.132 V50323.2 uA3.232 V60333.2 uA3.332 V100373.2 uA3.732 V2 实验任务 利用AD590温度传感器完成温度的测量,把转换的温度值的模拟量送入ADC0809的其中一个通道进行A/D转换,将转换的结果进行温度值变换之后送入数
34、码管显示。 3 电路原理图 图4.30.1 4 系统板上硬件连线 (1) 把“单片机系统”区域中的P1.0P1.7与“动态数码显示”区域中的ABCDEFGH端口用8芯排线连接。 (2) 把“单片机系统”区域中的P2.0P2.7与“动态数码显示”区域中的S1S2S3S4S5S6S7S8端口用8芯排线连接。 (3) 把“单片机系统”区域中的P3.0与“模数转换模块”区域中的ST端子用导线相连接。 (4) 把“单片机系统”区域中的P3.1与“模数转换模块”区域中的OE端子用导线相连接。 (5) 把“单片机系统”区域中的P3.2与“模数转换模块”区域中的EOC端子用导线相连接。 (6) 把“单片机系统”区域中的P3.3与“模数转换模块”区域中的CLK端子用导线相连接。 (7) 把“模数转换模块”区域中的A2A1A0端子用导线连接到“电源模块”区域中的GND端子上。 (8) 把“模数转换模块”区域中的IN0端子用导线连接到自制的AD590电路上。 (9) 把“单片机系统”区域中的P0.0P0.7用8芯排线连接到“模数转换模块”区域中的D0D1D2D3D4D5D6D7端子上。