4位数字温度计.docx

上传人:b****4 文档编号:4385078 上传时间:2023-05-07 格式:DOCX 页数:26 大小:140.81KB
下载 相关 举报
4位数字温度计.docx_第1页
第1页 / 共26页
4位数字温度计.docx_第2页
第2页 / 共26页
4位数字温度计.docx_第3页
第3页 / 共26页
4位数字温度计.docx_第4页
第4页 / 共26页
4位数字温度计.docx_第5页
第5页 / 共26页
4位数字温度计.docx_第6页
第6页 / 共26页
4位数字温度计.docx_第7页
第7页 / 共26页
4位数字温度计.docx_第8页
第8页 / 共26页
4位数字温度计.docx_第9页
第9页 / 共26页
4位数字温度计.docx_第10页
第10页 / 共26页
4位数字温度计.docx_第11页
第11页 / 共26页
4位数字温度计.docx_第12页
第12页 / 共26页
4位数字温度计.docx_第13页
第13页 / 共26页
4位数字温度计.docx_第14页
第14页 / 共26页
4位数字温度计.docx_第15页
第15页 / 共26页
4位数字温度计.docx_第16页
第16页 / 共26页
4位数字温度计.docx_第17页
第17页 / 共26页
4位数字温度计.docx_第18页
第18页 / 共26页
4位数字温度计.docx_第19页
第19页 / 共26页
4位数字温度计.docx_第20页
第20页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

4位数字温度计.docx

《4位数字温度计.docx》由会员分享,可在线阅读,更多相关《4位数字温度计.docx(26页珍藏版)》请在冰点文库上搜索。

4位数字温度计.docx

4位数字温度计

湖南工程学院

课程设计

课程名称微机原理与应用

课题名称4位数字温度计

专业

班级

学号

姓名

指导教师

湖南工程学院

课程设计任务书

 

课程名称微机原理与应用

课题4位数字温度计

 

专业班级

学生姓名

学号

指导老师

审批

 

任务书下达日期

任务完成日期

目录

第1章概述4

第2章系统总体方案设计5

第3章硬件设计6

3.1复位电路设计6

3.2时钟晶振电路6

3.3显示电路7

3.4数字温度传感器DS18B208

第4章开发板焊接及其测试10

4.1焊接过程10

4.2测试10

第5章软件设计及调试11

5.1主程序11

5.2读出温度子程序12

5.3温度转换命令子程序12

5.4计算温度子程序12

第6章系统联调及操作说明14

第7章总结15

参考文献16

附录A系统硬件原理图17

附录B程序清单18

 

第1章概述

作为理工科的学生应该在学习与动手实践中提高自己的专业技能知识,通过课程设计使我进一步熟悉了单片机的内部结构和工作原理,掌握了单片机应用系统设计的基本方法和步骤;通过利用MCS-51单片机,理解单片机在自动化装置中的作用以及掌握单片机的编程调试方法;通过设计一个简单的实际应用输入控制及显示系统,掌握protues和Wave以及各种仿真软件的使用。

现在的学习都是为以后的发展而做铺垫,通过课程设计提高自己的动手能力。

本设计是测量温度电路,使用温度传感器,此传感器,可以很容易直接读取被测温度值,进行转换就从而满足设计要求。

本设计所介绍的数字温度计与传统的温度计相比,具有读数方便,测温范围广,测温准确,其输出温度采用数字显示,主要用于对测温比较准确的场所,或科研实验室使用,该设计控制器使用单片机AT89C52,测温传感器使用DS18B20,用4位共阴极LED数码管以串口传送数据,实现温度显示,能准确达到以上要求。

 

第2章系统总体方案设计

传统的温度监控系统大多是利用热敏电阻组成的测温电路,测温元件一般用的是热电偶和热电阻。

而热电偶和热电阻测出的一般都是电压或者电流,经过A/D与D/A转换后才能实现测温.需要比较多的外部硬件支持。

而且由于热敏电阻的不稳定性.导致测温易受外界干扰、且精度不高。

本数字温度计设计采用一种改进型智能温度传感器DSl8820作为检测元件.与传统的热敏电阻不同,DSl8820可直接将被测温度转换为串行数字信号.测温范围为一55~125℃.最高分辨可达0.0625℃。

温度传感器DSl8820采用三线制与5l单片机相连.减少了外部的硬件电路.具有低成本、易使用和精度等特点。

按照系统设计功能的要求,确定本数字温度计由三个模块组成:

主控制器、测温电路和显示电路。

数字温度计总体电路结构框如图l所示。

 

 

图1 总体设计方框图

 

第3章硬件设计

3.1复位电路设计

MCS-52单片机通常采用上电自动复位、按钮电平复位、外部脉冲复位、上电+按钮电平复位、程序运行监视复位等方式。

AT89S52需要外加复位电路,本设计采用按键+上电复位,上电复位是利用电容充电来实现的,即上电瞬间RST/Vpd端的电位与Vcc相同,随着充电电流的减少,最后被嵌位在0V,采用10uF的C3和10K的R2可以保证加在引脚上的高电平持续2个机器周期,即使单片机有效地复位。

按键可以随时使电路复位,当键按下时1K的R1和10K的R2串联分压使RST为高电平,即复位。

图2

3.2时钟晶振电路

MCS-51内部有一个用于构成震荡器的高增益反向放大器,此放大器的输入端和输出端分别是XTAL1和XTAL2,在XTAL1和XTAL2上外接晶振可构成时钟电路。

时钟电路在单片机系统中起着非常重要的作用,是保证系统正常工作的基础。

晶振频率的大小决定了单片机系统工作的快慢。

本次设计采用内部方式的外部时钟接法。

为达到振荡周期是12MHZ的要求,这里要采用12MHZ的晶振,电容C1、C2对频率有微调作用,故外接晶振时,C1和C2在本设计中选择30pF,振荡频率取12MHz。

晶振的两个引脚分别连到XTAL1和XTAL2振荡脉冲输入引脚。

具体连接图如图3所示:

图3

3.3显示电路

本次设计中采用共阴极数码管作为显示器。

LED的驱动电路简单,使用方便,具有耗电少、成本低廉、配置简单灵活、安装方便、耐振动、使用寿命长等优点。

LED显示器与单片机的接口一般有动态显示与静态显示接口两种电路。

1、静态显示方式:

是指当显示器显示某一字符时,发光二极管的位选始终被选中。

在这种显示方式下,每一个LED数码管显示器都需要一个8位的输出口进行控制,显示稳定,提高了CPU的工作效率。

其不足之处是占用硬件资源较多,每个LED数码管需要独占8条输出线。

随着显示器位数的增加,需要的I/O口线也将增加。

2、动态显示方式:

动态显示方式是指一位一位地轮流点亮每位显示器(称为扫描),即每个数码管的位选被轮流选中,多个数码管公用一组段选,段选数据仅对位选选中的数码管有效。

对于每一位显示器来说,每隔一段时间轮流点亮。

显示器的亮度既与导通电流有关,也与点亮时间和间隔时间的比例有关,由于扫描速度极快,显示效果与静态驱动相同。

通过调整电流和时间参数,可以既保证亮度,又保证显示。

本次设计中,由于单片机本身提供的I/O口有限,本次设计采用动态显示,数码管采用的是共阴极接法。

用AT89S52的P0口作段码输出时,驱动能力相当大,但由于输出极为漏极开路电路,驱动拉电流负载,引脚上应外接上拉电阻。

因此,在本次设计中我们将数码管各段加上拉电阻后接单片机P0口。

我们把P2口的输出信号直接接到数码管的位选端作为位选信号,低电平有效。

图4

3.4数字温度传感器DS18B20

本次设计的硬件电路简单,关键的地方在DS18B20,也是最复杂难懂的。

由DALLAS半导体公司生产的DS18B20型单线智能温度传感器,属于新一代适配微处理器的智能温度传感器,可广泛用于工业、民用、军事等领域的温度测量及控制仪器、测控系统和大型设备中。

它具有体积小,接口方便,传输距离远等特点。

DS1820主要包括寄生电源、温度传感器、64位激光ROM单线接口、存放中间数据的高速暂存器(内含便笺式RAM),用于存储用户设定的温度上下限值的TH和TL触发器存储与控制逻辑、8位循环冗余校验码(CRC)发生器等七部分内部,其内部结构框图如图6所示。

 

图6DS18B20内部结构

64位ROM的结构开始8位是产品类型的编号,接着是每个器件的惟一的序号,共有48位,最后8位是前面56位的CRC检验码。

温度报警触发器TH和TL,可通过软件写入户报警上下限。

DS18B20温度传感器与单片机的接口电路DS18B20采用电源供电方式,此时DS18B20的1脚接地,2脚作为信号线,3脚接电源。

由于DS18B20的单线通讯功能是分时完成的,它有严格的时隙概念,因此读写时序很重要。

系统对DS18B20的各种操作按协议进行,操作协议为:

初始化DS18B20发复位脉冲--写ROM功能指令--发存储器操作命令--处理数据。

 

第4章开发板焊接及其测试

4.1焊接过程

   需要工具:

焊接工具、万用表,原理图。

准备工作:

对照PCB板,查看原理图,理解原理图上各个器件的作用、功能、原理。

检查排针和40PIN座的引脚,如果需要则进行清洁处理,刮掉氧化层。

焊接注意点:

焊接从低的器件开始,逐渐到高的器件。

电解电容、蜂鸣器、LED二极管和8*8LED点阵LED焊接前注意正负极要正确。

LCD的排针和排座的位置不要焊错。

ISP、JTAG的插座的缺口方向按照成品样板上放置。

按键4个脚在内部为2-2通的,注意2-2通的方向为上下放置,与PCB上表明方向相同。

4.2测试

在电路焊接完成之后应检查各电源线正负极是否接反或漏接,其他接线有无错误,然后通电逐个测量各预先设定好的被测点电压值,与设计值相比较。

若误差较大就纠正,若无误差可以进行后续工作。

 

第5章软件设计及调试

系统程序主要包括主程序,读出温度子程序,温度转换命令子程序,计算温度子程序,显示数据刷新子程序等。

5.1主程序

主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量的当前温度值,温度测量每1s进行一次。

这样可以在一秒之内测量一次被测温度,其程序流程见图7所示。

 

 

 

图7主程序流程图图8读温度流程图

5.2读出温度子程序

读出温度子程序的主要功能是读出RAM中的9字节,在读出时需进行CRC校验,校验有错时不进行温度数据的改写。

其程序流程图如图8示

 

图9温度转换流程图

5.3温度转换命令子程序

温度转换命令子程序主要是发温度转换开始命令,当采用12位分辨率时转换时间约为750ms,在本程序设计中采用1s显示程序延时法等待转换的完成。

温度转换命令子程序流程图如上图,图9所示

5.4计算温度子程序

计算温度子程序将RAM中读取值进行BCD码的转换运算,并进行温度值正负的判定,其程序流程图如图10所示。

计算温度子程序

计算温度子程序将RAM中读取值进行BCD码的转换运算,并进行温度值是否超限的的判定,其程序流程图如图11所示。

 

 

 

图11 计算温度流程图图12 显示数据刷新流程图

5.5显示数据刷新子程序

显示数据刷新子程序主要是对显示缓冲器中的显示数据进行刷新操作,当最高显示位为0时将符号显示位移入下一位。

程序流程图如图12。

 

第6章系统联调及操作说明

调试方法:

写好一段程序后不能急于上机调试,而是先进行逻辑分析、可行性分析。

用Keilμ&Vision2软件进行调试,不能出现错误,警告可以有,只要不影响生成HEX文件即可。

理解其实现的功能,预想程序应该出现的结果。

先进行软件仿真,出现错误马上修改,不断进行。

先一个模块一个模块的仿真,准确后再连线总体仿真。

仿真完后出现预期的效果后再下载程序到硬件进行验证,往往还有问题,还得反复修改,编译,调试,下载,验证。

可以一个模块一个模块的下载调试这样就可以知道问题的所在。

采用Proteus和Keil结合仿真的可以大大简化软、硬件电路的设计过程。

 

第7章总结

在本次设计的过程中,我们发现很多的问题。

比如在硬件仿真时往往出现乱码的情况,原因在于共阳数码管和共阴数码管显示时所送的段码是不一样的,所以我们将段码取反,但仍然没有成功,网上查阅资料找到问题的关键在于如果采用动态扫描的方法,控制程序先送段码再送位码,由于人眼的“滞留”效应,将会产生乱码现象;为了让显示器不显示乱码,其控制程序要么在每次显示更新前先关闭显示器再送段位及位码,要么先送位码再送段码,都可解决这一问题。

所以我们采用先送位码再送段码的方法解决了此问题。

智能化课程设计重点就在于软件算法的设计,虽然以前还做过这样的设计但这次设计,但都比较简单程序也不是很长也不需要有很巧妙的程序算法。

这次软件设计中让我充分理解到了利用子程序的好处。

在设计中也遇到很多问题比如温度转化的时候我们的程序看起来是合乎逻辑的但始终没有小数部分的值,经过多次调试修改终于显示成功。

还有很多下问题则不必累述。

下载程序验证的时候也出现问题,并没有显示实际的温度,全是“0”,究其原因在于参数传递并没有传递到显示程序中。

在这次的智能化课程设计中,虽然我们已经做出结果,但仍然有很多问题未得到解决。

一是Proteus仿真正确但下载到实际的电路板中却存在问题。

二是小组联合调试没有完成。

这次设计让我真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的写与读的过程中才能提高,这就是我在这次课程设计中的最大收获。

 

参考文献

1、王迎旭编.《单片机原理与应用》[M].机械工业出版社.

2、楼然苗编.《51系列单片机设计实例》[M].北京航空航天大学出版社.

3、黄勤编.《计算机硬件技术基础实验教程》[M].重庆大学出版社

4、刘乐善编.《微型计算机接口技术及应用》[M].华中科技大学出版社.

5、陈光东编.《单片微型计算机原理及接口技术》[M].华中科技大学出版社.

 

附录A系统硬件原理图

附录B程序清单

#include

#include"math.h"

#include"DS18B20.h"

#defineuintunsignedint

#defineucharunsignedchar//宏定义

#defineONP3_0//定义控制显示的开关键

#defineSETP3_1//定义调整键

#defineDECP3_2//定义减少键

#defineADDP3_3//定义增加键

#defineHBP3_6//定义超过上限的报警灯

#defineLBP3_7//定义低于下限的报警灯

#defineBEEPP3_5//定义蜂鸣器

bitshanshuo_st;//闪烁间隔标志

bitbeep_st;//蜂鸣器间隔标志

sbitDIAN=P0^7;//小数点

ucharx=0;//计数器

ucharset_st=0;//状态标志

ucharstate=0;//开关状态标志

signedcharm;//温度值全局变量

ucharn;//温度值全局变量

signedcharshangxian=33;//上限报警温度,默认值为33

signedcharxiaxian=-5;//下限报警温度,默认值为-5

ucharcodeLEDData[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};

/*****延时子程序*****/

voidDelay(uintnum)

{

while(--num);

}

/*****初始化定时器0*****/

voidInitTimer(void)

{

TMOD=0x1;

TH0=0x3c;

TL0=0xb0;//50ms(晶振12M)

}

/*****定时器0中断服务程序*****/

voidtimer0(void)interrupt1

{

TH0=0x3c;

TL0=0xb0;

x++;

}

/*****外部中断0服务程序*****/

voidint0(void)interrupt0

{

EX0=0;//关外部中断0

if(DEC==0&&set_st==1)

{

shangxian--;

if(shangxian

}

elseif(DEC==0&&set_st==2)

{

xiaxian--;

if(xiaxian<-50)xiaxian=-50;

}

}

/*****外部中断1服务程序*****/

voidint1(void)interrupt2

{

EX1=0;//关外部中断1

if(ADD==0&&set_st==1)

{

shangxian++;

if(shangxian>110)shangxian=110;

}

elseif(ADD==0&&set_st==2)

{

xiaxian++;

if(xiaxian>shangxian)xiaxian=shangxian;

}

}

/*****读取温度*****/

voidcheck_wendu(void)

{

intc;

c=ReadTemperature();//获取温度值

m=c/10;//计算得到整数

n=abs(c)%10;//计算得到小数

}

/*****显示开机初始化等待画面*****/

Disp_init()

{

P0=0x40;//显示-

P2=0xf7;

Delay(200);

P2=0xfb;

Delay(200);

P2=0xfd;

Delay(200);

P2=0xfe;

Delay(200);

P2=0xff;//关闭显示

}

/*****显示温度子程序*****/

Disp_Temperature()//显示温度

{

P0=LEDData[n];//显示个位

P2=0xfe;

Delay(300);

P0=LEDData[abs(m)%10];//显示十位

DIAN=1;//显示小数点

P2=0xfd;

Delay(300);

P0=LEDData[abs(m)/10-abs(m)/100*10];//显示百位

P2=0xfb;

Delay(300);

if(m<0)P0=0x40;

elseif(m/100)P0=LEDData[m/100];

elseP0=0x00;

P2=0xf7;

Delay(300);

P2=0xff;//关闭显示

}

/*****显示报警温度子程序*****/

Disp_alarm(signedcharbaojing)

{if(baojing<0)P0=0x40;//显示-

elseif(baojing/100)P0=LEDData[baojing/100];

elseP0=0x00;

P2=0xf7;

Delay(200);

P0=LEDData[abs(baojing)/10-abs(baojing)/100*10];//显示百位

P2=0xfb;

Delay(200);

P0=LEDData[abs(baojing)%10];//显示十位

P2=0xfd;

Delay(200);

if(set_st==1){P0=0x76;P2=0xfe;Delay(200);}//显示上限‘H’

elseif(set_st==2){P0=0x38;P2=0xfe;Delay(200);}//显示下限‘L’

P2=0xfe;

Delay(200);

P2=0xff;//关闭显示

}

/*****报警子程序*****/

voidAlarm()

{

if(x>=10){beep_st=~beep_st;x=0;}

if(m>=shangxian&&beep_st==1){HB=0;BEEP=0;}

elseif(m

else{BEEP=1;HB=1;LB=1;}

}

/*****主函数*****/

voidmain(void)

{

uintz;

InitTimer();//初始化定时器

EA=1;//全局中断开关

TR0=1;

ET0=1;//开启定时器0

IT0=1;

IT1=1;

check_wendu();

for(z=0;z<300;z++)

{

Disp_init();

}

while

(1)

{if(ON==0)

{

Delay(2000);

do{}while(ON==0);

state++;

if(state>1)state=0;

}

if(SET==0&&state==1)

{

Delay(2000);

do{}while(SET==0);

set_st++;x=0;shanshuo_st=1;

if(set_st>2)set_st=0;

}

if(set_st==0&&state==1)

{

EX0=0;//关闭外部中断0

EX1=0;//关闭外部中断1

check_wendu();

Disp_Temperature();

Alarm();//报警检测

}

elseif(set_st==1&&state==1)

{

BEEP=1;HB=1;LB=1;//关闭蜂鸣器与灯

EX0=1;//开启外部中断0

EX1=1;//开启外部中断1

if(x>=10){shanshuo_st=~shanshuo_st;x=0;}

if(shanshuo_st){Disp_alarm(shangxian);}

}

elseif(set_st==2&&state==1)

{

BEEP=1;HB=1;LB=1;//关闭蜂鸣器与灯

EX0=1;//开启外部中断0

EX1=1;//开启外部中断1

if(x>=10){shanshuo_st=~shanshuo_st;x=0;}

if(shanshuo_st){Disp_alarm(xiaxian);}

}

}

}

/*****END*****/

#include

#defineDQP3_4//定义DS18B20总线I/O

/*****延时子程序*****/

voidDelay_DS18B20(intnum)

{

while(num--);

}

/*****初始化DS18B20*****/

voidInit_DS18B20(void)

{

unsignedcharx=0;

DQ=1;//DQ复位

Delay_DS18B20(8);//稍做延时

DQ=0;//单片机将DQ拉低

Delay_DS18B20(80);//精确延时,大于480us

DQ=1;//拉高总线

Delay_DS18B20(14);

x=DQ;//稍做延时后,如果x=0则初始化成功,x=1则初始化失败

Delay_DS18B20(20);

}

/*****读一个字节*****/

unsignedcharReadOneChar(void)

{

unsignedchari=0;

unsignedchardat=0;

for(i=8;i>0;i--)

{

DQ=0;//给脉冲信号

dat>>=1;

DQ=1;//给脉冲信号

if(DQ)

dat|=0x80;

Delay_DS18B20(4);

}

return(dat);

}

/*****写一个字节*****/

voidWriteOneChar(unsignedchardat)

{

unsignedchari=0;

for(i=8;i>0;i--)

{

DQ=0;

DQ=dat&0x01;

Delay_DS18B20(5);

DQ=1;

dat>>=1;

}

}

/*****读取温度*****/

unsignedintReadTemperature(void)

{

unsignedchara=0;

unsigned

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

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2