单片机测温.docx
- 文档编号:28337147
- 上传时间:2023-07-10
- 格式:DOCX
- 页数:24
- 大小:110.51KB
单片机测温.docx
《单片机测温.docx》由会员分享,可在线阅读,更多相关《单片机测温.docx(24页珍藏版)》请在冰豆网上搜索。
单片机测温
测温
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文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 测温