单片机测温.docx

上传人:b****5 文档编号:28337147 上传时间:2023-07-10 格式:DOCX 页数:24 大小:110.51KB
下载 相关 举报
单片机测温.docx_第1页
第1页 / 共24页
单片机测温.docx_第2页
第2页 / 共24页
单片机测温.docx_第3页
第3页 / 共24页
单片机测温.docx_第4页
第4页 / 共24页
单片机测温.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

单片机测温.docx

《单片机测温.docx》由会员分享,可在线阅读,更多相关《单片机测温.docx(24页珍藏版)》请在冰豆网上搜索。

单片机测温.docx

单片机测温

测温

20086497刘笑

一、设计目的

1.熟悉测温的工作原理

2.加深对单片机编程语言的理解

3.熟练掌握单片机伟福实验箱的使用

二、设计要求

1、通过按键设置温度上、下限(比如20℃~80℃)

2、读入A/D转换数据,

若数据<下限,则显示温度并显示L,并使一个发光二极管点亮。

若数据>上限,则显示温度并显示H,并使另一个发光二极管点亮。

下限<若数据<上限,则显示C(可将AD信号的0V~5V对应0℃~100℃)

(本机地址为06H,当接到上位机发的06H时,则回发06H、当接到上位机发的AAH时,则将当前温度发给上位机、当接到上位机发的55H时,则修改设定上、下限)

三、硬件电路设计

图1硬件电路图

该电路实现的功能:

实时检测外界温度,将该温度值转换为数字量,然后通过四位的数码管显示。

其中外界温度值用一个可调的电位器进行模拟调节,然后通过ADC0809转换为数字量后,通过单片机的P1口送到单片机内部存储单元。

之后将该温度值转换为十进制后,将个十百位分别通过P1口送出,然后经74HC573的锁存,输出段码,之后通过P1口送出位码,经另一片74HC573锁存后驱动相应的数码管显示。

其次还用到一个晶振为单片机提供脉冲,连同内部的时钟电路产生单片机工作所需要的时钟信号。

还用到一个复位电路,当单片机因为异常原因失控时,可以通过复位按钮来恢复单片机的正常运行,提高系统的可靠性。

四、使用说明

1、开启单片机,进入程序执行状态。

2、下位机检测外界温度值,并转换为数字量后,数码管显示,若数据<下限,则显示温度并显示L,并使一个发光二极管点亮,若数据>上限,则显示温度并显示H,并使另一个发光二极管点亮,下限<若数据<上限,则显示温度并显示C。

3、上位机将06H发到下位机,下位机收到后则自动回发06H。

说明串口通信成功

4、按上位机的发AAH按键,则上位机将AAH发到下位机,下位机收到后则自动回发当前时刻温度值,上位机显示该温度值,5S后关闭显示。

可以实现实时远程的温度监控。

5、按上位机的发55H按键,则上位机将55H发到下位机,下位机收到后关闭指示温度高低的二极管显示,并点亮第一位的数码管并显示L,提示用户输入温度下限,输入的温度会在数码管上显示,并注意其输入范围应在0℃~255℃之间,按确认键确认输入并转换到温度上限的输入,同理第一位数码管显示H用来提示用户输入上限温度,按确认后结束温度上下限的输入,转到对外界温度的检测并显示环节。

当不希望改变温度上下限时,可以直接按两次确认键,结束温度的修改。

当输入的温度时发生按错键或想修改输入时,可以按取消键重新输入温度,但一定要注意按取消按键应在按确认键之前,否则无法达到重新输入的效果。

 

五、流程图设计

主机:

从机:

开始

初始化部分

启动AD转换

Y

F0=1?

判别温度与上下限关系

N

显示温度程序

N

00H=1?

Y

键盘扫描初始化

提示上下限及用户输入

N

N

程控扫描

有无按键

有无确认键

按下

Y

Y

读键值

存储

存数据

N

51H=0?

Y

六、程序设计如下:

主机程序:

ORG0000H

SJMPSTART

ORG0003H

LJMPF06

ORG000BH

LJMPFAA

ORG0013H

LJMPF55

ORG001BH

LJMPJIS

ORG0023H

LJMPQSJ

ORG0033H

DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH

START:

MOVSP,#30H

MOVIE,#9FH

SETBIT0

SETBIT1

MOVTMOD,#27H

MOVTH1,#0FAH

MOVTL1,#0FAH

MOVTL0,#0FFH

MOVSCON,#50H

SETBTR0

CLR00H

CLR01H

CLR02H;初始化

MOVP1,#0

SETBP2.0

CLRP2.0;关显示

NEXT:

JNB00H,NEXT;判有无发AAH

NEXT1:

JNB01H,NEXT1;判接收完成没有

CLR00H

CLR01H

MOVR2,#3

MOVR0,#07H

NEXTT1:

MOVB,#10

DIVAB

MOV@R0,B

DECR0

DJNZR2,NEXTT1;将温度转换为个十百为显示做准备

SETBTR1;开启5S显示计时

NEXT2:

MOVR2,#3

MOVR0,#05H

MOVR3,#0FEH

NEXTT2:

MOVP1,#0

SETBP2.0

CLRP2.0

MOVA,@R0

MOVP1,#0FFH

SETBP2.1

CLRP2.1

MOVDPTR,#0033H

MOVCA,@A+DPTR

MOVP1,A

SETBP2.0

CLRP2.0

MOVP1,R3

SETBP2.1

CLRP2.1

LCALLYAN

INCR0

MOVA,R3

RLA

MOVR3,A

DJNZR2,NEXTT2;显示温度值

JB00H,NEXT1;判有无再一次发AAH,重新开启5S显示计时

JNB02H,NEXT2;判5S显示是否到

CLR02H

MOVP1,#0

SETBP2.0

CLRP2.0;关闭显示

SJMPNEXT

F06:

MOVSBUF,#06H

RETI;发06H

FAA:

MOVSBUF,#0AAH

MOVTL0,#0FFH

SETB00H

CLRTR1

MOVTH0,#0CH

MOV60H,#200

MOV61H,#50

RETI;发AAH并初始化5S计时

F55:

MOVSBUF,#55H

RETI;发55H

JIS:

MOVTH0,#0CH

DJNZ60H,NEXT3

MOV60H,#200

DJNZ61H,NEXT3

MOV61H,#50

SETB02H

CLRTR1

NEXT3:

RETI;计时5S程序

QSJ:

JBCTI,NEXT4

JNB00H,NEXT5

MOVA,SBUF

SETB01H

NEXT5:

CLRRI

NEXT4:

RETI;取下位机发送过来数据

YAN:

MOV7FH,#255

HX:

NOP

NOP

DJNZ7FH,HX

RET;延时子程序

从机程序:

ORG0000H

LJMPSTART

ORG0013H

LJMPZW

ORG0023H

LJMPSF

ORG0033H

DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,00H,00H,00H

ORG0040H

DB07H,08H,09H,0AH,00H,00H,04H,05H,06H,0BH,00H,00H

DB01H,02H,03H,0CH,00H,00H,00H,0FH,0EH,0DH,00H,00H

START:

MOVSP,#30H

MOVR2,#20

MOVR3,#80

CLR00H

SETBIT1

SETBEX1

SETBEA

SETBES

MOVTMOD,#20H

MOVTH1,#0FDH

MOVTL1,#0FDH

MOVSCON,#50H

MOVP1,#0

SETBTR1;初始化

NEXT2:

MOVDPTR,#8000H

CLRF0

MOVX@DPTR,A;启动一次AD转换

NEXT:

JNBF0,NEXT;转换完成等待

MOV60H,A

CLRC

SUBBA,R2

JZXIANG

JCXIAO

MOVA,60H

SUBBA,R3

JZXIANG

JNCDAA

XIANG:

MOVR4,#39H

CLRP1.0

CLRP1.1

SJMPNEXT1

XIAO:

MOVR4,#38H

CLRP1.1

SETBP1.0

SJMPNEXT1

DAA:

MOVR4,#76H

CLRP1.0

SETBP1.1;比较温度与上下限关系,并使相应的指示灯点亮

NEXT1:

MOVA,60H

MOV61H,#3

MOVR0,#07H

NEXT8:

MOVB,#10

DIVAB

MOV@R0,B

DECR0

DJNZ61H,NEXT8;转换显示个十百位

MOV62H,#4

MOV63H,#20H

NEXT9:

MOVA,#0

MOVDPTR,#9004H

MOVX@DPTR,A

MOVDPTR,#9002H

MOVA,63H

MOVX@DPTR,A

MOVDPTR,#0033H

MOVA,@R0

CJNER0,#04H,DELP

MOVDPTR,#9004H

MOVX@DPTR,A

SJMPDELPP

DELP:

MOVCA,@A+DPTR

MOVDPTR,#9004H

MOVX@DPTR,A

DELPP:

LCALLYAN

INCR0

MOVA,63H

RRA

MOV63H,A

DJNZ62H,NEXT9;显示温度

JB00H,NEXT23;判有无上位机发来的修改上下限指令

SJMPNEXT2

ZW:

MOVXA,@DPTR

SETBF0

RETI;取温度值

SF:

JBCTI,NEXT10

MOVR1,SBUF

CJNER1,#06H,NEXT11

MOVSBUF,R1

SJMPNEXT13

NEXT11:

CJNER1,#0AAH,NEXT12

MOVSBUF,60H

SJMPNEXT13

NEXT12:

SETB00H

NEXT13:

CLRRI

NEXT10:

RETI;取上位机发来的数据并作相应处理

NEXT23:

MOVR0,#02H

MOV51H,#2

CLR08H

MOVA,#0

MOVDPTR,#9004H

MOVX@DPTR,A

CLRP1.0

CLRP1.1

CLRREN

CLRES

CLREA;键盘扫描初始化

NEXT14:

MOVR4,#0CH

MOVR5,#0CH

MOVR6,#0CH

MOVR1,#04H

MOVR7,#0CH;初始化

NEXT18:

MOVA,#0

MOVDPTR,#9004H

MOVX@DPTR,A

MOVA,#20H

MOVDPTR,#9002H

MOVX@DPTR,A

CJNER0,#02H,CGUO

MOVA,#38H

SJMPCGUO1

CGUO:

MOVA,#76H

CGUO1:

MOVDPTR,#9004H

MOVX@DPTR,A

LCALLYAN

PUSH00H

MOV65H,#10H

MOVR0,#04H

MOV66H,#3

CGU1:

MOVA,#0

MOVDPTR,#9004H

MOVX@DPTR,A

MOVDPTR,#9002H

MOVA,65H

MOVX@DPTR,A

MOVA,@R0

MOVDPTR,#0033H

MOVCA,@A+DPTR

MOVDPTR,#9004H

MOVX@DPTR,A

LCALLYAN

MOVA,65H

RRA

MOV65H,A

INCR0

DJNZ66H,CGU1

POP00H;提示输入上下限以及用户输入按键

CJNER4,#0AH,NEXT15

LJMPNEXT19

NEXT15:

CJNER5,#0AH,NEXT16

LJMPNEXT20

NEXT16:

CJNER6,#0AH,NEXT17

LJMPNEXT21

NEXT17:

CJNER7,#0AH,NEXT225

LJMPNEXT22;判有无确认键按下

NEXT225:

CJNER1,#09H,NEXT226

LJMPNEXT14;判有无多次输入超出范围

NEXT226:

JNB08H,NEXT227

CLR08H

LJMPNEXT14;判有无重新输入键按下

NEXT227:

MOVA,#0

MOVDPTR,#9002H

MOVX@DPTR,A

MOVDPTR,#9001H

MOVXA,@DPTR

ANLA,#0FH

CJNEA,#0FH,NEXTP

SJMPNEXT18;程控判有无按键按下

NEXTP:

MOVA,#0

MOVDPTR,#9004H

MOVX@DPTR,A;关显示

MOV55H,#0DFH

MOV56H,#0

MOVDPTR,#9001H

MOVXA,@DPTR

MOV57H,A;读行值

MOV58H,#100

NEX:

MOV59H,#23

NEX1:

DJNZ59H,NEX1

DJNZ58H,NEX

MOVXA,@DPTR

CJNEA,57H,NEXTPP4;按键消抖

JBACC.3,NEXTC

MOV5AH,#0

SJMPLSM

NEXTC:

JBACC.2,NEXTC1

MOV5AH,#1

SJMPLSM

NEXTC1:

JBACC.1,NEXTC2

MOV5AH,#2

SJMPLSM

NEXTC2:

MOV5AH,#3

LSM:

MOVDPTR,#9002H

MOVA,55H

MOVX@DPTR,A

MOVDPTR,#9001H

MOVXA,@DPTR

CJNEA,#0FH,QD

MOVA,55H

RRA

MOV55H,A

INC56H

SJMPLSM;确定行列值

QD:

MOVA,5AH

MOVB,#6

MULAB

ADDA,56H

MOVDPTR,#0040H

MOVCA,@A+DPTR

MOV@R1,A;存储用户输入按键值

INCR1

CJNEA,#0BH,NEXTPP3

SETB08H;判按键是否为取消键

NEXTPP3:

MOVDPTR,#9001H

NEXTPP2:

MOVXA,@DPTR

ANLA,#0FH

CJNEA,#0FH,NEXTPP2;判是否按键松开

NEXTPP4:

LJMPNEXT18

NEXT20:

MOV@R0,04H

SJMPNEXT19

NEXT21:

MOVA,R4

MOVB,#10

MULAB

ADDA,R5

MOV@R0,A

SJMPNEXT19

NEXT22:

MOVA,R4

MOVB,#100

MULAB

MOV50H,A

MOVA,R5

MOVB,#10

MULAB

ADDA,50H

ADDA,R6

MOV@R0,A;处理用户输入数据存储上下限

NEXT19:

INCR0

DJNZ51H,NEXT1445

CLR00H

CLREX0

SETBREN

SETBES

SETBEA

LJMPNEXT2;判输入是否结束

NEXT1445:

LJMPNEXT14

YAN:

MOV7FH,#124

HX:

NOP

NOP

DJNZ7FH,HX

RET;延时子程序

七、设计总结

本次的单片机课程设计一共包括两个方面:

软件部分的设计和硬件部分的设计。

我做的是测温系统的设计,由于涉及到了键盘扫描与数码管显示,我们在平时很少注意到这些内容,因此在软件部分的设计过程中遇到了很多的问题。

发现思路正确,然而程序并不成功,我从很多资源丰富的地方查询资料,如:

图书馆,互联网等。

但结果总是差强人意,甚至都想到了放弃。

可是,我还是选择了坚持下去。

经过多方查询,并且求助老师与同学,最终得到了满意的结果。

通过软件的设计部分,我意识到耐心,恒心的重要性。

接下来做的是硬件的设计,我一开始以为参照电路图焊电路板很简单,会比软件的设计容易得多,然而真正实施起来发现并不是想象的那样,一个小零件焊错了地方,就会导致整个的失败。

最初,我把发光二极管的极性接反了,电源灯不亮,却一时想不起来是怎么回事,导致需要拆下来重新焊接。

浪费了很多时间。

在做硬件的时候,不单单要参照电路图,还要多注意极性的正反,芯片的方向。

这些小疏忽很容易导致最终的失败。

通过这次的单片机课程设计,提高了我们编写程序的能力与动手能力。

只有多动手实践,才能发现自己很多的不足之处,比如,平时所学的基础知识没有掌握扎实,遇到更复杂些的设计就会出现很多状况,才能在以后的实践中多加注意与改正。

这次的课程设计使我充分认识到了亲自动手的重要性。

理论应用于实践,实践检验理论基础,二者结合,使我们各方面的能力得到进一步的提升。

最后,我要感谢老师对我们的帮助,正因为这样,我们的设计才能顺利地进行下去直至成功。

我们在此对老师表示衷心的感谢!

八、参考文献:

[1]高峰.单片微型计算机原理与接口技术.科学出版社,2007

[2]李飞.单片机原理及其应用西安电子科技大学出版社,2007

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

当前位置:首页 > PPT模板 > 其它模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1