单片机课程设计报告数字温度计.docx
- 文档编号:18274600
- 上传时间:2023-08-15
- 格式:DOCX
- 页数:24
- 大小:571.37KB
单片机课程设计报告数字温度计.docx
《单片机课程设计报告数字温度计.docx》由会员分享,可在线阅读,更多相关《单片机课程设计报告数字温度计.docx(24页珍藏版)》请在冰点文库上搜索。
单片机课程设计报告数字温度计
惠州学院课程设计报告
课程名称:
单片机课程设计
系部:
电子科学系
专业班级:
08电子信息工程
(1)班
学生姓名:
XXX
学生姓名:
08XXXXXX
指导老师:
XXX
完成时间:
2011年6月16日
报告成绩:
摘要
本设计以STC89C52RC单片机为核心,由温度采集、温度显示,温度报警等功能模块组成。
基于题目基本要求,本系统对温度采集和温度显示系统行了重点设计。
本系统大部分功能由软件来实现,吸收了硬件软件化的思想,大部分功能通过软件来实现,使电路简单明了,系统稳定性大大提高。
本系统不仅成功的实现了要求的基本功能,多数发挥部分也得到了实现。
关键字:
STC89C52RC单片机、数码管显示、温度采集
一、任务设计..............................................1
二、总体方案..............................................1
1、工作原理..........................................1
2、总体设计..........................................1
3、元件清单...........................................1三、系统硬件设计...........................................2
1、单片机最小系统....................................2
2、温度测量模块......................................2
3、数码管显示模块.....................................2
4、系统电源..........................................3
四、系统软件设计..........................................3
1、主程序流程图......................................3
2、DS18B20初始化子程序流程图..........................5
3、DS18B20写子程序流程图..............................6
4、DS18B20读子程序流程图..............................6
5、系统片内RAM资源分配表..............................7
五、源程序.................................................8
六、测量及其结果分析.....................................13
七、设计心得体会.........................................13
参考文献..............................................14
附录DS18B20部分资料...................................15
致谢..............................................................17
数字温度计设计
一、任务设计:
1、设计任务:
利用数字温度传感器DS18B20与单片机结合来测量温度。
2、设计要求:
利用数字温度传感器DS18B20测量温度信号,计算后在LED数码管上显示相应的温度值。
其温度测量范围为-55~125℃,精确到0.1℃。
本温度计属于多功能温度计,可以设置上下报警温度,当温度不在设置范围内时,可以报警。
数字温度计所测量的温度采用数字显示,控制器使用单片机89C51,测温传感器使用DS18B20,用2位共阴极LED数码管以串口传送数据,实现温度显示。
二、总体方案:
1.工作原理:
本设计采用STC89C52RC单片机作为本系统的控制模块。
单片机把由DS18B20发送过来的数据利用软件来进行处理,从而把数据传输到显示模块和报警模块,实现温度的显示和报警作用。
2.总体设计:
设计总体框架图如图1
图1、系统框架图
3、元件清单
表1数字温度计电路元器件清单
元器件名称
参数
数量
元器件名称
参数
数量
单片机
89C52
1
数码管
1
晶体振荡器
12MHz
1
蜂鸣器
1
电容
3
温度传感器
DS18B20
1
电阻
19
三、系统硬件设计(单元电路设计及分析):
1.STC89C52RC单片机最小系统:
最小系统包括晶体振荡电路、复位开关和电源部分。
图2为STC89C52RC单片机的最小系统。
图2最小系统电路图
2.温度测量模块:
温度测量传感器采用DALLAS公司DS18B20的单总线数字化温度传感器,测温范围为-55℃~125℃,可编程为9位~12位A/D转换精度,测温分辨率达到0.0625℃,采用寄生电源工作方式,CPU只需一根口线便能与DS18B20通信,占用CPU口线少,可节省大量引线和逻辑电路。
接口电路如图3所示。
图3DS18B20测量电路
3.数码管显示模块:
系统使用最右边的两个数码管,段选J12接单片机的P0口,位选J16接单片机的P2口。
其接线如图4所示:
图4数码管显示电路
4.系统电源:
系统采用USB供电,USB输出电压5V,电流200mA,能使系统正常工作。
电路图如图5:
图5电源电路
四、系统软件设计流程:
1.主程序流程如图6所示:
图6系统主程序流程
2.DS18B20初始化子程序流程如图7所示:
图7DS18B20初始化子程序流程
3.DS18B20写子程序流程图如图8所示:
图8DS18B20写子程序流程图
4.DS18B20读子程序流程图如图9所示:
图9DS18B20读子程序流程图
5、数字温度计系统片内RAM资源分配表
表2数字温度计系统片内RAM资源分配表
地址分配
用途
名称
初始值
32H
设定最高温度的存储单元
HIG_MK
32
33H
设定最低温度的存储单元
LOW_MK
18
续表
地址分配
用途
名称
初始值
34H
存放当前温度的低8位单元
00H
35H
存放当前温度的高8位单元
00H
36H
存放当前温度整数部分的单元
00H
37H
存放当前温度小数部分的单元
00H
P0.0
DS18B20与单片机接口
DQ
0
P1.5
蜂鸣器与单片机接口
BZ
0
五、源程序:
/******************************************************************************
主程序名称:
主程序功能:
温度测控系统,两位数码管显示当前温度。
温度超出范围蜂鸣器报警
入口参数:
无
出口参数:
无
******************************************************************************/
HIG_MKEQU32H;最高温度阈值变量声明
LOW_MKEQU33H;最低温度阈值变量声明
TEM_LEQU34H;当前温度的低字节变量声明
TEM_HEQU35H;当前温度的高字节变量声明
TEM_NUMEQU36H;当前温度整数部分变量声明
FLAG1EQU00H;DS18B20存在标志位
DQEQUP3.7;单片机与DS18B20连接口
BZEQUP1.5;蜂鸣器与单片机的接口
ORG0000H
START:
MOVSP,#60H;堆栈指针初始化
SETBDQ
START1:
CLRBZ
MOVHIG_MK,#32
MOVLOW_MK,#18
LCALLINIT_1820
GON:
LCALLGET_TEMPER
LCALLTEM_COV
ACALLTEM_DISP
ACALLbaojing
AJMPGON
/******************************************************************************
子程序名称:
GET_TEMPER
子程序功能:
操作DS18B20,通过调用DS18B20的读写子程序,实现采集温度数据的功能
入口参数:
无
出口参数:
存放原始温度数据到34H和35H
******************************************************************************/
GET_TEMPER:
SETBDQ
GET_MK1:
LCALLINIT_1820;调用初始化子程序
JBFLAG1,GET_MK2;判断DS18B20是否初始化成功,
;FLAG1=1说明初始化成功
LJMPGET_MK1;初始化不成功则需继续重新初始化
GET_MK2:
LCALLYS50;调用延时50us子程序
MOVA,#0CCH
LCALLWRITE_1820
MOVA,#44H
LCALLWRITE_1820
GET_MK5:
NOP
CLRDQ
NOP
SETBDQ;发复位脉冲
MOVR7,#4
DJNZR7,$
CLRC
MOVC,DQ
JCGET_MK5;判断DS18B20是否复位成功
GET_MK3:
LCALLINIT_1820
JBFLAG1,GET_MK4
LJMPGET_MK3
GET_MK4:
LCALLYS50
MOVA,#0CCH
LCALLWRITE_1820
MOVA,#0BEH
LCALLWRITE_1820;发送读温度命令
LCALLREAD_1820;调用子程序读取温度数据
RET
/******************************************************************************
子程序名称:
INIT_1820
子程序功能:
初始化DS18B20
入口参数:
无
出口参数:
无
******************************************************************************/
INIT_1820:
SETBDQ
NOP
NOP
CLRDQ;发复位脉冲
ACALLYS500;调用延时500us子程序
SETBDQ
ORLP3,#0FFH;将P3口设为输入端口
ACALLYS50;等待50us
JNBDQ,TSR1;判断DS18B20是否复位成功
AJMPINIT_1820;重发复位脉冲
TSR1:
MOVR7,#6BH
TSR2:
DJNZR7,TSR2
SETBDQ;初始化结束,将DQ拉高
SETBFLAG1;DS18B20初始化成功标志
RET
/******************************************************************************
子程序名称:
YS50
子程序功能:
延时50us
入口参数:
无
出口参数:
无
******************************************************************************/
YS50:
MOVR7,#18H
DJNZR7,$
RET
/******************************************************************************
子程序名称:
YS500
子程序功能:
延时500us
入口参数:
无
出口参数:
无
******************************************************************************/
YS500:
MOVR7,#0F9H
DJNZR7,$
RET
/******************************************************************************
子程序名称:
WRITE_1820
子程序功能:
DS18B20写程序
入口参数:
A
出口参数:
无
******************************************************************************/
WRITE_1820:
MOVR2,#8;设置串行数据传送位数
CLRC
WRITE1:
CLRDQ;将DS18B20的DQ数据总线电平拉低
MOVR7,#8;延时>15us
DJNZR7,$
RRCA;写入一位数据
MOVDQ,C
MOVR7,#24;延时50us
DJNZR7,$
SETBDQ;设置为恢复状态
NOP;延时1us
DJNZR2,WRITE1;判断8位数据写入是否完成
RET
/******************************************************************************
子程序名称:
READ_1820
子程序功能:
DS18B20读程序
入口参数:
无
出口参数:
34H和35H单元
******************************************************************************/
READ_1820:
MOVR4,#2;设置读双字节次数
MOVR1,#34H;结果低8位存34H单元,高8位存35H单元
READ0:
MOVR2,#8;每次读取8位
MOVA,#00H
READ1:
CLRC
SETBDQ
NOP
NOP
CLRDQ;保持至少1us的低电平
NOP
SETBDQ;恢复高电平
MOVR7,#8;延时>15us
DJNZR7,$
MOVC,DQ;取一位数据
RRCA
MOVR7,#26
DJNZR7,$
DJNZR2,READ1;判断8位数据是否读完
MOV@R1,A;低8位数据读完,存入34H单元
INCR1;指向35H
DJNZR4,READ0;低8位数据读完,存入34H单元
SETBDQ;读取完毕,DQ拉高
NOP
NOP
RET
/******************************************************************************
子程序名称:
TEM_COV
子程序功能:
温度数据格式转换
入口参数:
TEM_H和TEM_L单元
出口参数:
TEM_NUM单元
******************************************************************************/
TEM_COV:
MOVA,TEM_L;取温度值低字节数据到A
ANLA,#0F0H
SWAPA;屏蔽低字节的低4位
MOVTEM_NUM,A;暂存TEM_NUM
TEM_COV3:
MOVA,TEM_H;取温度值高字节数据到A
ANLA,#0FH
SWAPA;屏蔽高字节的高4位
ORLA,TEM_NUM
MOVTEM_NUM,A;将温度转换结果存入TEM_NUM
MOVA,TEM_L;转换温度小数部分
ANLA,#0FH
MOVB,#10
MULAB
MOVB,#10H
DIVAB
MOVTEM_F,A;小数部分存入TEM_F单元
RET
/******************************************************************************
子程序名称:
TEM_DISP
子程序功能:
温度显示
入口参数:
TEM_NUM
出口参数:
无
******************************************************************************/
TEM_DISP:
MOVA,TEM_NUM
MOVB,#10
DIVAB
MOV38H,B;温度值的个位数存入37H单元
MOV39H,A;温度值的十位数存入38H单元
MOVR5,#02H;两位数字循环显示次数设置
MOVR0,#37H;指针R0指向个位显示首地址
MOVR3,#7FH;数码管动态显示位码初值设置
MOVDPTR,#TAB;共阴数码管段码表首地址
SCAN_1:
MOVA,@R0
MOVCA,@A+DPTR;查表取段码
CJNER0,#38H,SCAN_2;判断当前段选是否为个位
ORLA,#80H;各位显示小数点
SCAN_2:
MOVP0,A;输出段码到P0端口
INCR0;指向十位
MOVA,R3
MOVP2,A;输出位选
MOVR7,#0;动态显示256us延时
DJNZR7,$
RRA;修改位选
MOVR3,A
DJNZR5,SCAN_1;判断循环显示2位数码管是否完成
RET
TAB:
DB0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f
/******************************************************************************
子程序名称:
baojing
子程序功能:
温度超出范围,蜂鸣器报警
入口参数:
TEM_NUM
出口参数:
无
******************************************************************************/
baojing:
MOVA,TEM_NUM
CJNEA,HIG_MK,MAIN2
MAIN2:
JNCMAIN3;判断温度是否超过最高限度
SETBBZ;启动蜂鸣器
AJMPMAIN6
MAIN3:
CJNEA,LOW_MK,MAIN4;判断温度是否低于最低限度
MAIN4:
JNCMAIN5
SETBBZ;启动蜂鸣器
AJMPMAIN6
MAIN5:
CLRBZ
MAIN6:
RET
END
六、测量及其结果分析:
(1)测试仪器:
温度计
(2)基本要求部分的测试与分析:
●系统上电后,显示温度。
●当温度超出范围后蜂鸣器报警。
表1数字温度计与标准温度计测量值比较表:
温度计示值(摄氏度)
29.0
29.0
29.1
29.1
温度输出(摄氏度)
29.0
29.1
29.0
29.1
由测试知,数字钟的输出与温度计值基本上相等。
七、设计心得体会:
经过几天的努力,终于完成了这次的课程设计。
这次设计主要是调试过程花费了好长的时间,因为没有在线仿真设备,而且不能通过纯软件仿真,所以调试起来比较困难。
系统刚开始运行的时候测量的温度不正确,而且温度逢十六溢出,经过几天的仔细分析,原来是温度转换子程序中的程序出错。
此次课程设计的主要难点在于DS18B20温度传感器芯片,为了完成这次任务,前期花了一些时间专门学习这块芯片,了解了DS18B20的工作原理的时序图。
经过这次的实践,也可以说是经过了多天的学习,尽管期间苦难重重,但我还是从中学习了不少新的知识和解决困难的方法,也体验到了创作的快乐。
参考文献:
[1]单片微型计算机与接口技术(第3版).北京:
电子工业出版社.2010.7
[2]单片机实用技术教程.北京:
人民邮电出版社.2009.10
[3]《DS18B20数据手册》
附录:
DS18B20部分资料
1、DS18B20初始化DQ状态时序图
2、DS18B20写操作时序图
3、DS18B20读操作时序图
4、DS18B20温度值格式
5、DS18B20的部分温度值
致谢
首先要感谢XXX老师一学期的学习指导,带我进入了单片机的世界,并且帮我解决了很多有关单片机的疑问。
此次课程的题目,也是XXX老师精心挑选出来的。
其次要感谢在这次课程设计中帮助我的同学,在他们的帮助之下,使得这次的课程设计顺利完成。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 课程设计 报告 数字 温度计
![提示](https://static.bingdoc.com/images/bang_tan.gif)