单片机课程设计基于51单片机的数字温度计设计_第1页
单片机课程设计基于51单片机的数字温度计设计_第2页
单片机课程设计基于51单片机的数字温度计设计_第3页
单片机课程设计基于51单片机的数字温度计设计_第4页
单片机课程设计基于51单片机的数字温度计设计_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

课程名称:单片机原理及应用课程设计设计题目: 数字温度计 系 别: 通信与控制工程系 专 业: 自动化 班 级: 学生姓名: 学 号: 起止日期: 指导教师: 教研室主任: 摘 要随着时代的进步和发展,单片机技术已经普及到我们生活,工作,科研,各个领域,已经成为一种比较成熟的技术,本文将介绍一种基于单片机控制的数字温度计,本温度计属于多功能温度计,可以设置上下报警温度,当温度不在设置范围内时,可以报警。本设计所介绍的数字温度计与传统的温度计相比,具有读数方便,测温范围广,测温准确,其输出温度采用数字显示,主要用于对测温比较准确的场所,或科研实验室使用,该设计控制器使用单片机STC89C52,测温传感器使用DS18B20,用3位共阳极LED数码管实现温度显示。使用矩阵键盘来调节报警温度的上下限。 关键词:单片机,数字控制,温度计, DS18B20,STC89C5222目 录设计要求41设计41.1方案一41.2方案二42硬件模块设计52.1主控制器STC89C52与IO接口扩展芯片825552.2温度传感器DS18B2052.3数码管显示模块62.4复位模块63软件模块设计83.1主程序83.2读出温度子程序93.3计算温度子程序93.4显示数据刷新子程序94系统调试105总结与体会11参考文献12附录一:八段共阳数码管段码表13附录二:元器件清单14附录三:DS18B20温度与表值对应表15附录四:数字温度计的源程序16数字温度计设计要求本课题以单片机为核心,设计并制作一个数字温度计,具有以下功能:1、测温范围:1040;2、分辨率:01;3、温度输出显示:2 位;4、设定上下限(下限18,上限25),超出范围时报警。1设计1.1方案一由于本设计是测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,就可以将被测温度显示出来,这种设计需要用到A/D转换电路,感温电路比较麻烦。1.2方案二 进而考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这是非常容易想到的,所以可以采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,就可以满足设计要求。从以上两种方案,很容易看出,采用方案二,电路比较简单,软件设计也比较简单,故采用了方案二。主 控 制 器单片机复位报警点按键调时钟振荡温度计传感器LED显示图1总体设计方框图2硬件模块设计2.1主控制器STC89C52与IO接口扩展芯片8255本设计采用主控芯片是STC89C52,外加一IO接口扩展芯片8255来控制键盘与数码管的工作。8255具有3个8位并行口PA,PB和PC。如图2所示:图2 单片机STC89C52与82552.2温度传感器DS18B20DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现位的数字值读数方式。DS18B20的性能特点如下:独特的单线接口仅需要一个端口引脚进行通信;多个DS18B20可以并联在惟一的三线上,实现多点组网功能;无须外部器件;可通过数据线供电,电压范围为3.05.5;零待机功耗;温度以或位数字;用户可定义报警设置;报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作; 图3 DS18B202.3数码管显示模块LED数码管来显示当前的温度和设置报警温度时显示报警温度上下限的值。此电路采用的是共阳极的六位数码管,PA0PA5为数码管的位选,PB口为数码管的段选。低电平有效。电路如图4所示:图4 数码管显示硬件电路2.4复位模块此电路为高电平复位电路。进行复位操作时,外部电路需在RST引脚产生两个机器周期(即24个时钟周期)以上的高电平。如图6所示,按下键盘,电源对C1充电,使RST端快速产生高电平;松开按键,C1向芯片的内阻放电,恢复为低电平,从而使单片机可靠复位。图5 复位模块报警模块采用的蜂鸣器,其输入信号直接从单片机P3.3口输出,通过高低电平交错出现加上延时程序,便能发出声音。当检测到的温度超过上下限时,蜂鸣器报警。如图6所示:图6 报警电路3软件模块设计3.1主程序图 7 软件系统工作流程图主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量的当前温度值,温度测量每1s进行一次。这样可以在一秒之内测量一次被测温度,其程序流程见图7所示。3.2读出温度子程序读出温度子程序的主要功能是读出RAM中的9字节,在读出时需进行CRC校验,校验有错时不进行温度数据的改写。其程序流程图如图8所示发DS18B20复位命令发跳过ROM命令发读取温度命令读取操作,CRC校验9字节完?CRC校验正?确?移入温度暂存器结束NNYY图8读温度流程图 3.3计算温度子程序计算温度子程序将RAM中读取值进行BCD码的转换运算,并进行温度值正负的判定,其程序流程图如图9所示。3.4显示数据刷新子程序显示数据刷新子程序主要是对显示缓冲器中的显示数据进行刷新操作,当最高显示位为0时将符号显示位移入下一位,程序流程图如图10所示 温度数据移入显示寄存器十位数0?百位数0?十位数显示符号百位数不显示百位数显示数据(不显示符号) 结束NNYY 开始温度零下?温度值取补码置“”标志计算小数位温度BCD值 计算整数位温度BCD值 结束置“+”标志NY图10 显示数据刷新流程图图9计算温度流程图4系统调试系统的调试以程序调试为主。硬件调试比较简单,首先检查电路的焊接是否正确,然后可用万用表测试或通电检测。软件调试可以先编写好显示程序并进行硬件的正确性检验,然后分别进行主程序。读取温度子程序、计算温度子程序和显示数据程序等的编程和调试。由于DS18B20与单片机采用串行数据传送,因此,对DS18B20进行读/写编程时必须严格地保证读/写的时序;否则将无法读取测量的温度。本程序采用的是C语言编写,用Keil C51编译器编程调试。软件调试到能显示温度值,而且有温度变化时(例如用手去接触)说明已经DS18B20正常工作了。再按下键盘,调节报警温度的上下限。5总结与体会通过自己的努力及老师热心的帮助,终于完成了数字温度计的设计。通过这次课程设计使我进一步熟悉和掌握了单片机的结构及工作原理。从这次的课程设计中,我认识到理论联系实际的重要性。在以后的学习中,要注重理论联系实际。把我从课本上学的理论知识运用到实际当中。还有,要注意课程之间的联系。通过这次课程设计,使我对程序开发的完整过程有了一定的了解,为今后从事相应工作打下扎实的基础。在本次设计的过程中,我发现很多的问题,通过老师和同学们的帮助,问题基本上都得到了解决。总之,完成了这次课程设计使我有了一定的成就感,在以后的学习中我将多多注意在这次课程设计中碰到的问题,注重理论与实际的联系以及课程之间的联系。参考文献1张鑫. 单片机原理及应用。北京:电子工业出版社,20052楼然梦. 李光飞。单片机课程设计指导。北京:北京航空航天大学出版社,20073朱定华. 戴汝平。单片微机原理与应用。北京:清华大学出版社,20034张毅刚. 单片机原理及应用。北京:高等教育出版社,20045立全利. 迟荣强。单片机原理及接口。北京:高等教育出版社,20046蔡明文. 冯先成。单片机课程设计。武汉:华中科技大学出版社,20077潘永雄. 新编单片机原理及应用。西安:西安电子科技大学出版社,2003附录一:八段共阳数码管段码表十进制数字十六进制段码值00xA010XBB20x6230x2A40x3950x2C60x2470xBA80x2090x28附录二:元器件清单元器件名称数量30pF电容282551104电容1发光二极管1单片机AT89C521三极管90157六位八段共阳数码管2按键1712M晶振11k电阻20附录三:DS18B20温度与表值对应表温度/二进制表示十六进制表示+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 0110 1111FE6FH-551111 1100 1001 0000FC90H附录四:数字温度计的源程序/*名称:数字温度计日期:2011年12月22日*/S1OK EQU 5FHTEMPUTER EQU 39H TEMPH EQU 5EH TEMPLEQU 5DH MS50 EQU 5CHSIGN EQU 5BH S1 BIT P1.0 S2 BIT P1.1 S3 BIT P1.2 S4 BIT P1.3 ORG 0000H LJMP MAIN ORG 000BH LJMP TOIT ORG 0030HMAIN: MOV SP, #60H MOV TMOD, #01H MOV TH0, #3CH MOV TL0, #0B0H SETB ET0 SETB TR0 SETB EA MOV TEMPH, #30 MOV TEMPL, #9 MOV TEMPUTER, #15 ;温度最始值 MOV S1OK, #00H MOV SIGN, #00H MOV 38H, #0BH MOV 37H, #0CH MOV 36H, #0BH ACALL DISP ACALL T1S; 主程序START: JB S1, NET1 ACALL T12MS JB S1, NET1 JNB S1, $ INC SIGN MOV A, SIGN CJNE A, #1, TIAO ACALL TIAOTL TIAO:CJNE A, #2, NET1 MOV SIGN, #0 ACALL TIAOTH NET1: MOV A, S1OK CJNE A, #1, START MOV A, TEMPUTER SUBB A, TEMPH JNB ACC.7, ALEM MOV A, TEMPUTER SUBB A, TEMPL JB ACC.7, ALEM SETB P2.1 ACALL WENDU ACALL DISP MOV S1OK, #00H AJMP START ALEM: MOV 36H, #0CH MOV 37H, #0CH MOV 38H, #0CH CLR P2.1 ACALL DISP ACALL T1S LCALL WENDU LCALL DISP MOV S1OK, #00H SJMP START; TIAOTL:MOV 50H, TEMPUTER MOV 37H, TEMPL ACALL BIN_BCD ACALL DISP ACALL T12MS ACALL T12MS ACALL T12MS ACALL T12MS MOV 36H, #0AH MOV 37H, #0AH MOV 38H, #0AH ACALL DISP ACALL T12MS ACALL T12MS ACALL T12MS ACALL T12MS JB S2, ADD1 ACALL T12MS JB S2, ADD1 JNB S2, $ INC TEMPL MOV A, TEMPL CJNE A, #100, ADD1 MOV TEMPL, #0 ADD1: JB S3, ADD2 ACALL T12MS JB S3, ADD2 JNB S3, $ DEC TEMPL MOV A, TEMPL CJNE A, #00 , ADD2 MOV TEMPL,#100 ADD2: JB S4, TIAOTL ACALL T12MS JB S4, TIAOTL JNB S4, $ MOV TEMPUTER, 50H LJMP START ; 高位调整TIAOTH:MOV 50H, TEMPUTER MOV 37H, TEMPH ACALL BIN_BCD ACALL DISP ACALL T12MS ACALL T12MS ACALL T12MS ACALL T12MS MOV 36H, #0AH MOV 37H, #0AH MOV 38H, #0AH ACALL DISP ACALL T12MS ACALL T12MS ACALL T12MS ACALL T12MS JB S2, ADD11 ACALL T12MS JB S2, ADD11 JNB S2, $ INC TEMPH MOV A, TEMPH CJNE A, #100, ADD11 MOV TEMPH, #0 ADD11: JB S3, ADD22 ACALL T12MS JB S3, ADD22 JNB S3, $ DEC TEMPH MOV A, TEMPH CJNE A, #00 , ADD22 MOV TEMPH,#100 ADD22: JB S4, TIAOTH ACALL T12MS JB S4, TIAOTH JNB S4, $ MOV TEMPUTER, 50H LJMP START; 一秒定时中断TOIT: PUSH PSW PUSH ACC MOV TH0, #3CH MOV TL0, #0B0H INC MS50 MOV A, MS50 CJNE A, #14H, RETURN MOV S1OK, #1 MOV MS50, #00H RETURN:POP ACC POP PSW RETI; ;温度总子程序wendu: ACALL INIT_1820 ACALL RE_CONFIG ACALL GET_TEMPER ACALL TEMPER_COV RET; DS18B20 初始化程序 INIT_1820: SETB P2.0 NOP CLR P2.0 MOV R0,#06BH MOV R1,#03HTSR1: DJNZ R0,TSR1 ; 延时 MOV R0,#6BH DJNZ R1,TSR1 SETB P2.0 NOP NOP NOP MOV R0,#25HTSR2: JNB P2.0,TSR3 DJNZ R0,TSR2 LJMP TSR4 ; 延时TSR3: SETB 20H.1 ; 置标志位,表示DS1820存在 LJMP TSR5TSR4: CLR 20H.1 ; 清标志位,表示DS1820不存在 LJMP TSR7TSR5: MOV R0,#06BH MOV R1,#03HTSR6:DJNZ R0,TSR6 ; 延时 MOV R0,#6BH DJNZ R1,TSR6TSR7:SETB P2.0 RET ; 重新写DS18B20暂存存储器设定值RE_CONFIG:JB 20H.1,RE_CONFIG1 ; 若DS18B20存在,转RE_CONFIG1 RETRE_CONFIG1: MOV A,#0CCH ; 发SKIP ROM命令 LCALL WRITE_1820 MOV A,#4EH ; 发写暂存存储器命令 LCALL WRITE_1820 MOV A,#00H ; TH(报警上限)中写入00H LCALL WRITE_1820 MOV A,#00H ; TL(报警下限)中写入00H LCALL WRITE_1820 MOV A,#1FH ; 选择9位温度分辨率 LCALL WRITE_1820 RET ; 读出转换后的温度值GET_TEMPER: SETB P2.0 ; 定时入口 LCALL INIT_1820 JB 20H.1,TSS2 RET ; 若DS18B20不存在则返回TSS2: MOV A,#0CCH ; 跳过ROM匹配 LCALL WRITE_1820 MOV A,#44H ; 发出温度转换命令 LCALL WRITE_1820 LCALL INIT_1820 MOV A,#0CCH ; 跳过ROM匹配 LCALL WRITE_1820 MOV A,#0BEH ; 发出读温度命令 LCALL WRITE_1820 LCALL READ_18200 MOV 37H,A ; 将读出的温度数据保存 RET ; 写DS18B20的程序WRITE_1820: MOV R2,#8 CLR CWR1:CLR P2.0 NOP NOP NOP NOP RRC A MOV P2.0,C MOV R3,#35 DJNZ R3,$ SETB P2.0 NOP DJNZ R2,WR1 SETB P2.0 RET ; 读DS18B20的程序,从DS18B20中读出两个字节的温度数据READ_18200: MOV R4,#2 ; 将温度高位和低位DS18B20中读 RE00:MOV R2,#8RE01:CLR C SETB P2.0 NOP NOP CLR P2.0 NOP NOP NOP SETB P2.0 NOP NOP MOV C,P2.0 MOV R3,#35RE20: DJNZ R3,RE20 RRC A DJNZ R2,RE01 MOV R1,A DEC

温馨提示

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

评论

0/150

提交评论