单片机课程设计数字温度计的设计Word格式文档下载.docx
- 文档编号:16878861
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:18
- 大小:137.04KB
单片机课程设计数字温度计的设计Word格式文档下载.docx
《单片机课程设计数字温度计的设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《单片机课程设计数字温度计的设计Word格式文档下载.docx(18页珍藏版)》请在冰豆网上搜索。
图3.1 总体设计方框图
(1)主控制器
单片机AT89S51具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要,很适合便携手持式产品的设计使用系统可用二节电池供电。
(2)显示电路
显示电路采用共阴LED数码管,从P3口RXD,TXD串口输出段码。
(3)温度传感器
DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。
DS18B20的性能特点如下:
●独特的单线接口仅需要一个端口引脚进行通信;
●多个DS18B20可以并联在惟一的三线上,实现多点组网功能;
●无须外部器件;
●可通过数据线供电,电压范围为3.0~5.5V;
●零待机功耗;
●温度以9或12位数字;
●用户可定义报警设置;
●报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;
●负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。
3.2整体硬件电路
(1)主板电路
系统整体硬件电路包括,传感器数据采集电路,温度显示电路,上下限报警调整电路,单片机主板电路等,如图3.2所示。
图3.2中有三个独立式按键可以分别调整温度计的上下限报警设置,图中蜂鸣器可以在被测温度不在上下限范围内时,发出报警鸣叫声音,同时LED数码管将没有被测温度值显示,这时可以调整报警上下限,从而测出被测的温度值。
图3.2中的按健复位电路是上电复位加手动复位,使用比较方便,在程序跑飞时,可以手动复位,这样就不用在重起单片机电源,就可以实现复位。
显示电路是使用的串口显示,这种显示最大的优点就是使用口资源比较少,只用p3口的RXD,和TXD,串口的发送和接收,四只数码管采用74LS164右移寄存器驱动,显示比较清晰。
图3.2单片机主板电路
图3.3温度显示电路
4软件设计
4.1模块划分
系统程序主要包括主程序,读出温度子程序,温度转换命令子程序,计算温度子程序,显示数据刷新子程序等。
4.2主要程序描述
(1)主程序
主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量的当前温度值,温度测量每1s进行一次。
这样可以在一秒之内测量一次被测温度,其程序流程见图4.1所示。
图4.1主程序流程图图4.2读温度流程图
(2)读出温度子程序
读出温度子程序的主要功能是读出RAM中的9字节,在读出时需进行CRC校验,校验有错时不进行温度数据的改写。
其程序流程图如图4.2所示。
(3)温度转换命令子程序
温度转换命令子程序主要是发温度转换开始命令,当采用12位分辨率时转换时间约为750ms,在本程序设计中采用1s显示程序延时法等待转换的完成。
温度转换命令子程序流程图如上图,图4.3所示。
图4.3温度转换流程图
(4)计算温度子程序
计算温度子程序将RAM中读取值进行BCD码的转换运算,并进行温度值正负的判定,其程序流程图如图4.4所示。
图4.4计算温度流程图
(5)显示数据刷新子程序
显示数据刷新子程序主要是对显示缓冲器中的显示数据进行刷新操作,当最高显示位为0时将符号显示位移入下一位。
程序流程图如图4.5所示。
图4.5 显示数据刷新流程图
5仿真分析
加载好程序后,按下桌面的左下角的play见出现图5.1所示的现象。
图5.1仿真结果
按下停止键,将上次仿真停止。
将DS18B20的参数CurrentValue设置为50.1,按下play键出现如图5.2所示现象。
说明此设计误差在0.5℃以内。
图5.2仿真结果
将DS18B20的参数CurrentValue设置为-55,按下play键出现如图5.3所示现象。
说明此设计温度测试可到-55℃。
图5.3仿真结果
将DS18B20的参数CurrentValue设置为125.0,按下play键出现如图5.4所示现象。
说明此设计温度测试可到125℃。
图5.4仿真结果
6课程设计的总结与体会
起先对单片机不太了解的我,为了完成此次的课程设计,翻书、上网查资料,但还是有很多不了解的地方。
无奈就去问同学,同学们热心的态度令我很欣慰。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,在以后的学习中还要多加改正。
两个星期的课程设计结束了,感觉到从总得到了很多成长,学到了很多东西,有对单片机更深的理解,有自己的努力和汗水,有同学们的帮助,还有大家的合作能力,我要把它们好好地收藏起来,今后都是我生活中的无价之宝。
在此我非常要感谢的是我的指导老师申寿云老师,感谢老师的细心认真的辅导,让我对单片机这门课程有了更新的认识和理解。
这次课程设计能够顺利的完成,当然有我个人的努力,但同时也离不开指导老师的答疑解惑,以及班上同学的帮助。
在此我再次向成老师以及帮助过我的同学表示诚挚感谢。
参考文献
[1]张靖武,周灵彬.单片机系统的Proteus设计与仿真.北京:
电子工业出版社,2007
[2]周澜景,张丽娜.基于Proteus的电路及单片机系统设计与仿真.北京:
北京航空航天大学出版社,2006
[3]江世明.基于Proteus的单片机应用技术.北京:
电子工业出版社,2009
[4]邹久朋.80C51单片机应用技术.北京:
北京航空航天大学出版社,2008
附录(源程序清单)
ORG0000H;
单片机内存分配申明!
TEMPER_LEQU29H;
保存读出温度的低8位
TEMPER_HEQU28H;
保存读出温度的高8位
T_DFEQU27H;
保存读出温度的小数部份
FLAG1BIT50H;
是否检测到DS18B20标志位38H
A_BITEQU20H;
百位数存放内存位置
B_BITEQU21H;
十位数存放内存位置
C_BITEQU22H;
个位数存放内存位置
D_BITEQU23H;
个位小数存放内存位置
S_BITEQU24H;
正负号存放内存位置
MAIN:
LCALLGET_TEMPER;
调用读温度子程序
MOVA,29H
MOVT_DF,A;
温度低字节暂存,待后作小数处理
MOVA,28H
JNBACC.7,POSI
CLRC
MOVA,29H
SUBBA,#01H
CPLA
MOVT_DF,A;
温度低字节暂存
MOVA,28H
SUBBA,#00H
MOV28H,A
ACALLPROD
AJMPNEG
PROD:
MOVA,T_DF
MOVC,40H;
将28H中的最低位移入C。
28H的8位位寻址是40H~47H
RRCA
MOVC,41H
MOVC,42H
MOVC,43H
MOV29H,A
RET
POSI:
MOVS_BIT,#00H
AJMPMAIN1
NEG:
MOVS_BIT,#40H
MAIN1:
LCALLDISPLAY;
调用数码管显示子程序
AJMPMAIN
;
这是DS18B20复位初始化子程序
INIT_1820:
SETBp2.2
NOP
CLRp2.2
主机发出延时496微秒的复位低脉冲
MOVR1,#3
TSR1:
MOVR0,#100;
#80
DJNZR0,$
DJNZR1,TSR1
SETBp2.2;
然后拉高数据线
MOVR0,#25;
#25H
TSR2:
JNBp2.2,TSR3;
等待DS18B20回应
DJNZR0,TSR2;
延时15—60us
LJMPTSR4
TSR3:
SETBFLAG1;
置标志位,表示DS1820存在
LJMPTSR5
TSR4:
CLRFLAG1;
清标志位,表示DS1820不存在
LJMPTSR7
TSR5:
MOVR0,#80
TSR6:
DJNZR0,TSR6;
时序要求延时一段时间
TSR7:
SETBp2.2
读出转换后的温度值
GET_TEMPER:
SETBP2.2
LCALLINIT_1820;
先复位DS18B20
JBFLAG1,TSS2
RET;
判断DS1820是否存在?
若DS18B20不存在则返回
TSS2:
MOVA,#0CCH;
跳过ROM匹配
LCALLWRITE_1820
MOVA,#44H;
发出温度转换命令
这里通过调用显示子程序实现延时一段时间,等待AD转换结束,12位的话750微秒
LCALLDISPLAY
LCALLINIT_1820;
准备读温度前先复位
MOVA,#0CCH;
MOVA,#0BEH;
发出读温度命令
LCALLREAD_18200;
将读出的温度数据保存到35H/36H
RET
;
写DS18B20的子程序(有具体的时序要求)
WRITE_1820:
MOVR2,#8;
一共8位数据
CLRC
WR1:
MOVR3,#6
DJNZR3,$
MOVp2.2,C
MOVR3,#23
DJNZR2,WR1
读DS18B20的程序,从DS18B20中读出两个字节的温度数据
READ_18200:
MOVR4,#2;
将温度高位和低位从DS18B20中读出
MOVR1,#29H;
低位存入29H(TEMPER_L),高位存入28H(TEMPER_H)
RE00:
MOVR2,#8;
数据一共有8位
RE01:
CLRC
MOVR3,#9
RE10:
DJNZR3,RE10
MOVC,p2.2
RE20:
DJNZR3,RE20
DJNZR2,RE01
MOV@R1,A
DECR1
DJNZR4,RE00
setbp2.2
显示子程序
DISPLAY:
MOVA,29H;
将29H中的十六进制数转换成10进制
MOVB,#100
DIVAB
MOVA_BIT,A
MOVA,B
MOVB,#10
MOVB_BIT,A
MOVA,B
MOVB,#10
DIVAB
MOVC_BIT,B
MOVR0,#2
DPL1:
MOVR1,#20;
DPLOP:
MOVA,#0FH;
取小数值
ANLA,T_DF
MOVDPTR,#DFTAB
MOVCA,@A+DPTR;
查个位小数的7段代码
MOVP1,A;
送出个位小数的7段代码
CLRP3.7;
开个位小数显示
ACALLD1MS;
显示1ms
SETBP3.7
MOVA,C_BIT;
取个位数
MOVDPTR,#NUMTAB;
指定查表启始地址
查个位数的7段代码
送出个位数的7段代码
CLRP3.6;
开个位显示
SETBP1.7;
个位小数点显示
ACALLD1MS;
SETBP3.6
MOVA,B_BIT;
取十位数
MOVCA,@A+DPTR;
查十位数的7段代码
MOVP1,A;
送出十位的7段代码
CJNEA,#3FH,DISP1
SETBP3.5
AJMPDISP2
DISP1:
CLRP3.5;
开十位显示
ACALLD1MS;
DISP2:
MOVA,A_BIT;
取百位数
MOVCA,@A+DPTR
CJNEA,#3FH,DISP3;
百位数是0,转DISP4
AJMPDISP4
DISP3:
MOVA,B_BIT
MOVCA,@A+DPTR;
MOVP1,A;
CLRP3.5
ACALLD1MS
MOVA,A_BIT
MOVCA,@A+DPTR
MOVP1,A
CLRP3.4
SETBP3.4
DISP4:
MOVA,S_BIT
CJNEA,#00H,D41
AJMPDISP5
D41:
CLRP3.4;
因负温度最小55度,"
-"
号移到百位
DISP5:
DJNZR1,DPLOP;
250次没完循环
DJNZR0,DPL1;
2个250次没完循环
RET
1MS延时(按12MHZ算)
D1MS:
MOVR7,#2
MOVR6,#250
DJNZR6,$
DJNZR7,$-4
7段数码管0~9数字的共阴显示代码
NUMTAB:
DB3FH;
DB06H;
1
DB5BH;
2
DB4FH;
3
DB66H;
4
DB6DH;
5
DB7DH;
6
DB07H;
7
DB7FH;
8
DB6FH;
9
DFTAB:
DB3FH;
06H,06H,5BH
DB5BH,4FH,66H,66H
DB6DH,7DH,7DH,07H
DB07H,7FH,6FH,6FH
END
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 课程设计 数字 温度计 设计
![提示](https://static.bdocx.com/images/bang_tan.gif)