单片机课程设计报告数字温度计.docx

上传人:b****8 文档编号:30432948 上传时间:2023-08-15 格式:DOCX 页数:24 大小:571.37KB
下载 相关 举报
单片机课程设计报告数字温度计.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

单片机课程设计报告数字温度计

 

惠州学院课程设计报告

课程名称:

单片机课程设计

系部:

电子科学系

专业班级:

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老师精心挑选出来的。

其次要感谢在这次课程设计中帮助我的同学,在他们的帮助之下,使得这次的课程设计顺利完成。

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

当前位置:首页 > 表格模板 > 合同协议

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

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