单片机课程设计数字温度计样本Word下载.docx
《单片机课程设计数字温度计样本Word下载.docx》由会员分享,可在线阅读,更多相关《单片机课程设计数字温度计样本Word下载.docx(30页珍藏版)》请在冰豆网上搜索。
![单片机课程设计数字温度计样本Word下载.docx](https://file1.bdocx.com/fileroot1/2022-12/12/f4ab2478-7363-4be2-b219-924da3948b33/f4ab2478-7363-4be2-b219-924da3948b331.gif)
三、设计方案总体设计框图……………………………………………………………8
3.1硬件电路框图…………………………………………………………………………8
3.2硬件电路概述…………………………………………………………………………9
3.3主控电路………………………………………………………………………………9
3.4显示电路………………………………………………………………………………10
3.5报警温度调节电路……………………………………………………………………10
3.6温度传感器及DS18B20测温原理…………………………………………………11
四、系统软件算法设计………………………………………………………………15
4.1主程序…………………………………………………………………………………15
4.2读出温度子程序………………………………………………………………………16
4.3温度转换命令子程序…………………………………………………………………17
4.4计算温度子程序………………………………………………………………………17
4.5显示数据刷新子程序…………………………………………………………………17
4.61602液晶显示……………………………………………………………………18
五、软件仿真………………………………………………………………………………18
5.1系统仿真设计…………………………………………………………………………18
5.2系统原理图……………………………………………………………………………19
结与体会……………………………………………………………………………………20
附录……………………………………………………………………………………………21
参照文献………………………………………………………………………………………29
二、设计方案
2.1设计务任和规定
1、基本范畴-20℃——125℃
2、精度误差不大于0.5℃
3、LED数码直读显示
4、可以任意设定温度上下限报警功能.
2.2方案辩证
1温度计软件设计流程图:
2元器件选用:
单片机芯片选用:
方案一.
采用89C51芯片作为硬件核心,运用FlashROM,内部具备4KBROM存储空间,能于3V超低压工作,并且与MCS-51系列单片机完全兼容,但是运用于电路设计中时由于不具备ISP在线编程技术,当在对电路进行调试时,由于程序错误修改或对程序新增功能需要烧入程序时,对芯片多次拔插会对芯片导致一定损坏。
方案二:
采用AT89C51单片机与MCS-51系列单片机相比有两大优势:
第一,片内程序存储器采用闪存,使程序写入更加以便;
第二,提供了更小尺寸芯片,使整个硬件电路体积更小,且管脚数目为20个,与MCS-51相比减少一倍,使理解更容易。
综上所述:
本课设中单片机芯片采用AT89C51。
温度传感器选用:
方案一:
采用热敏电阻传感器。
运用热敏电阻随温度变化而明显变化,能直接将温度变化转换为能量变化,进而制成温度计。
但是其测温传感器比较复杂,并且不易通过编制程序来控制测温精度,增大系统设计难度。
方案二:
采用DS18B20温度传感器。
DS18B20内部3脚(或8脚)封装;
使用特有温度测量技术,将被测温度转换成数值信号;
3.0~5.5V电源供电方式和寄生电源供电方式;
ROM由64位二进制数字构成,共分为8个字节;
RAM由9个字节高速暂存器和非易失性电擦写ROM构成。
温度传感器选用智能测温器件DS18B20。
本设计显示电路采用1602液晶显示模块芯片。
3系统最后设计方案:
综上各方案所述,对本次课设方案选定:
采用AT89C51作为主控制系统;
1602液晶显示模块芯片作为温度数据显示装置;
而智能温度传感器DS18B20器件作为测温电路重要构成某些。
至此,系统最后方案拟定。
三、设计方案总体设计框图
温度计电路设计总体设计方框图如图所示,控制器采用单片机AT89C51,温度传感器采用DS18B20,用1602液晶显示屏以串口传送数据实现温度显示。
3.1硬件电路框图:
图 总体设计方框图
3.2硬件电路概述:
系统由单片机最小系统、显示电路、按键、温度传感器等构成。
本电路是由AT89C2051单片机为控制核心,具备与MCS-51系列单片机完全兼容,程序加密等功能,带2KB字节可编程闪存,工作电压范畴为2.7~6V,全静态工作频率为0~24MHZ;
显示电路由1602液晶显示模块芯片,可以进行多行显示;
温度报警按键设为五个,可以显示华氏温度,调节高低报警温度;
温度传感器电路重要由DS18B20测温器件构成,该器件重要功能有:
采用单总线技术;
每只DS18B20具备一种独立不可修改64位序列号;
低压供电,电源范畴为3~5V;
测温范畴为-20℃~+125℃,误差为±
0.5℃;
复位电路是10K电阻构成上电自动复位。
3.3主控电路
单片机AT89C51具备低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统设计需要,很适合便携手持式产品设计使用系统可用二节电池供电。
晶振采用12MHZ。
复位电路采用上电加自动复位。
主控芯片AT89C51
晶振电路
复位电路
3.4显示电路
本设计显示电路采用1602液晶显示模块芯片,该芯片可现实16x2个字符,比此前七段数码管LED显示屏在显示字符数量上要多得多。
此外,由于1602芯片编程比较简朴,界面直观,因而更加易于使用者操作和观测。
1602A芯片接口信号阐明如下表:
1602A芯片接口信号阐明
图液晶显示电路
3.5报警温度调节电路
本系统一共设立了五个按键,k1键只是显示华氏温度,k4键按下不松开显示高低报警温度,松开后恢复显示正常温度,k2键和k3键是分别用来调节高低报警温度,k键控制调节时上调或下调。
详细调节如将高温报警温度调高,第一步将k4键按下不松,k键升起位置,调节k2键,则高温报警温度向上增长,反之亦然。
低温报警同理。
图报警点调节电路
3.6温度传感器及DS18B20测温原理
DS18B20温度传感器是美国DALLAS半导体公司最新推出一种改进型智能温度传感器,与老式热敏电阻等测温元件相比,它能直接读出被测温度,并且可依照实际规定通过简朴编程实现9-12位数字值读数方式。
DS18B20性能特点如下:
(1)独特单线接口仅需要一种端口引脚进行通信,DS18B20在与微解决器连接时仅需要一条口线即可实现微解决器与DS18B20双向通讯。
(2)DS18B20支持多点组网功能,各种DS18B20可以并联在惟一三线上,实现多点组网测温;
(3)不必外部器件,所有传感元件及转换电路集成在形如一只三极管集成电路内;
(4)可通过数据线供电,电压范畴为3.0-5.5V;
(5)零待机功耗;
(6)温度以9或12位数字,相应可辨别温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温;
(7)顾客可定义报警设立;
(8)报警搜索命令辨认并标志超过程序限定温度(温度报警条件)器件;
(9)负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作;
(10)测量成果直接输出数字温度信号,以"
一线总线"
串行传送给CPU,同步可传送CRC校验码,具备极强抗干扰纠错能力
DS18B20采用3脚PR35封装或8脚SOIC封装,其引脚排列及内部构造框图如图及测温原理图如下所示:
图引脚排列
图内部构造框图
图DS18B20测温原理图
64位ROM构造开始8位是产品类型编号,接着是每个器件惟一序号,共有48位,最后8位是前面56位CRC检查码,这也是各种DS18B20可以采用一线进行通信因素。
温度报警触发器TH和TL,可通过软件写入户报警上下限。
DS18B20温度传感器内部存储器还涉及一种高速暂存RAM和一种非易失性可电擦除EERAM。
高速暂存RAM构造为8字节存储器,构造如图4所示。
头2个字节包括测得温度信息,第3和第4字节TH和TL拷贝,是易失,每次上电复位时被刷新。
第5个字节,为配备寄存器,它内容用于拟定温度值数字转换辨别率。
DS18B20工作时寄存器中辨别率转换为相应精度温度数值。
该字节各位定义如图5所示。
低5位始终为1,TM是工作模式位,用于设立DS18B20在工作模式还是在测试模式,DS18B20出厂时该位被设立为0,顾客不要去改动,R1和R0决定温度转换精度位数,来设立辨别率。
温度LSB
温度MSB
TH顾客字节1
TL顾客字节2
配备寄存器
保存
CRC
TM
R1
R0
1
图5DS18B20字节定义
DS18B20辨别率定义如表1所示
表1辨别率设立表
辨别率
最大温度转移时间
9位
96.75ms
10位
187.5ms
11位
375ms
12位
750ms
由表1可见,DS18B20温度转换时间比较长,并且辨别率越高,所需要温度数据转换时间越长。
因而,在实际应用中要将辨别率和转换时间权衡考虑。
主机控制DS18B20完毕温度转换过程是:
每一次读写之前都要对DS18B20进行复位,即将数据总线下拉500us,然后释放,DS18B20收到信号后等待16-60us左右,之后发出60-240us存在低脉冲,主CPU收到此此信号表达复位成功;
复位成功后发送一条ROM指令,然后发送RAM指令,这样才干对DS18B20进行预订读写操作。
表2ROM指令集
指令
商定代码
功能
读ROM
33H
读DS18B20中编码
符合ROM
55H
发出此命令后,接着发出64位ROM编码,访问单线总线上与该编辑相相应DS18B20使之做出响应,为下一步对该DS18B20读写作准备
搜索ROM
0F0H
用于拟定挂接在同一总线上DS18B20个数和辨认64位ROM地址,为操作各器件作准备
跳过ROM
0CCH
忽视64位ROM地址,直接向DS18B20发送温度变换指令
告警搜索命令
0ECH
执行后,只有温度跳过设定值上限或下限片子才干做出反映
表3RAM指令集
温度转换
44H
启动DS18B20进行温度转换
读暂存器
0BEH
读暂存器9个字节内容
写暂存器
4EH
将数据写入暂存器TH、TL字节
复制暂存器
48H
把暂存器TH、TL字节写到E2RAM中
重调E2RAM
0B8H
把E2RAM中TH、TL字节写到暂存器TH、TL字节
读供电方式
0B4H
启动DS18B20发送电源供电方式信号给主CPU
DS18B20测温原理是这这样,器件中低温度系数晶振振荡频率受温度影响很小,用于产生固定频率脉冲信号送给减法计数器1;
高温度系数晶振随温度变化其振荡频率明显变化,所产生信号作为减法计数器2脉冲输入。
器件中尚有一种计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生时钟脉冲进行计数进而完毕温度测量。
计数门启动时间由高温度系数振荡器来决定,每次测量前,一方面将最低温所相应一种基数分别置入减法计数器1、温度寄存器中,计数器1和温度寄存器被预置在最低温所相应一种基数值。
减法计数器1对低温度系数晶振产生脉冲信号进行减法计数,当减法计数器1预置值减到0时,温度寄存器值将加1,减法计数器1预置将重新被装入,减法计数器1重新开始对低温度系数晶振产生脉冲信号进行计数,如此循环直到减法计数器计数到0时,停止温度寄存器累加,此时温度寄存器中数值就是所测温度值。
其输出用于修正减法计数器预置值,只要计数器门仍未关闭就重复上述过程,直到温度寄存器值大体被测温度值。
测温电路
四、系统软件算法设计
整个系统是由硬件配合软件来实现,在硬件拟定后,编写软件功能也就基本定型了。
因此软件功能大体可分为两个某些:
一是监控,这也是系统核心某些,二是执行某些,完毕各个详细功能。
系统程序重要涉及主程序,读出温度子程序,温度转换命令子程序,计算温度子程序,显示数据刷新子程序等。
4.1主程序
主程序重要功能是负责温度实时显示、读出并解决DS18B20测量当前温度值,温度测量每1s进行一次。
这样可以在一秒之内测量一次被测温度,其程序流程见图所示。
图主程序流程图图读温度流程图
4.2读出温度子程序
读出温度子程序重要功能是读出RAM中9字节,在读出时需进行CRC校验,校验有错时不进行温度数据改写。
其程序流程图如图示
图温度转换流程图
4.3温度转换命令子程序
温度转换命令子程序重要是发温度转换开始命令,当采用12位辨别率时转换时间约为750ms,在本程序设计中采用1s显示程序延时法等待转换完毕。
温度转换命令子程序流程图如上图,图9所示
4.4计算温度子程序
计算温度子程序将RAM中读取值进行BCD码转换运算,并进行温度值正负鉴定,其程序流程图如图所示。
图 计算温度流程图 图 显示数据刷新流程图
4.5显示数据刷新子程序
显示数据刷新子程序重要是对显示缓冲器中显示数据进行刷新操作,当最高显示位为0时将符号显示位移入下一位。
程序流程图如图。
4.61602液晶显示
1602液晶显示流程图:
五、软件仿真
5.1系统仿真设计
本设计是在Proteus环境下进行仿真,仿真所用到器件有:
单片机AT89C51,DS1820温度传感器,蜂鸣器,液晶显示屏,某些电阻,电容等。
仿真成果如下:
显示屏显示传感器温度
高低报警温度
高温报警低温报警
报警时led灯提示
5.2系统原理图
六、总结与体会
通过将近三周单片机课程设计,终于完毕了我数字温度计设计,虽然没有完全达到设计规定,但从心底里说,还是高兴,毕竟这次设计把实物都做了出来,高兴之余不得不深思呀!
在本次设计过程中,我发现诸多问题,虽然此前还做过这样设计但这次设计真让我长进了诸多,单片机课程设计重点就在于软件算法设计,需要有很巧妙程序算法,虽然此前写过几次程序,但我觉写好一种程序并不是一件简朴事,举个例子,此前写那几次,数据加减时,我用都是BCD码,这一次,我所有用都是16进制数直接加减,显示解决时在用除法去删分,感觉效果比较好,有好多东西,只有咱们去试着做了,才干真正掌握,只学习理论有些东西是很难理解,更谈不上掌握。
从这次课程设计中,我真真正正意识到,在后来学习中,要理论联系实际,把咱们所学理论知识用到实际当中,学习单机片机更是如此,程序只有在经常写与读过程中才干提高,这就是我在这次课程设计中最大收获。
通过这次对数字温度计设计与制作,让我理解了设计电路程序,也让我理解了关于数字温度计原理与设计理念,要设计一种电路总要先用仿真仿真成功之后才实际接线。
但是最后成品却不一定与仿真时完全同样,由于,再实际接线中有着各种各样条件制约着。
并且,在仿真中无法成功电路接法,在实际中由于芯片自身特性而可以成功。
因此,在设计时应考虑两者差别,从中找出最适合设计办法。
通过这次学习,让我对各种电路均有了大概理解,因此说,坐而言不如立而行,对于这些电路还是应当自己动手实际操作才会有深刻理解。
从这次课程设计中,我真真正正意识到,在后来学习中,要理论联系实际,把咱们所学理论知识用到实际当中,学习单机片机更是如此,程序只有在经常写与读过程中才干提高,这就是我在这次课程设计中最大收获。
附录:
//******************************************************
#include<
reg51.h>
intrins.h>
//shiyongyanshi
math.h>
#defineucharunsignedchar
#defineuintunsignedint
sbitDQ=P3^3;
sbitRS=P2^0;
sbitRW=P2^1;
sbitEN=P2^2;
sbitk=P1^0;
sbitk1=P1^4;
sbitk2=P1^5;
sbitk3=P1^6;
sbitk4=P1^7;
sbitled_red=P2^5;
sbitled_blue=P2^6;
sbitBEEP=P3^7;
ucharbz=1;
//BEEP=0;
ucharng=0;
//fuhaobiaoshiwei
ucharTempBuffer[]={"
TEMP:
"
};
inttemp_value;
//温度值
ucharcodedis_title[]={"
--currenttemp--"
voidxianshi_huashi();
uchargw=40;
chardw=10;
ucharxianshi_title[]={"
TEMPALARM"
ucharxianshi_baojing[]={"
HI:
LO:
//34510``12
//----------------延时--------------------------------
voiddelayxus(uintx)
{
uchari;
while(x--)for(i=0;
i<
200;
i++);
}
//*********************LCD控制********************
//读lcd状态
ucharread_lcd_state()
{
ucharstate;
RS=0;
RW=1;
EN=1;
delayxus
(1);
state=P0;
EN=0;
returnstate;
}
//忙等待
voidlcd_busy_wait()
while((read_lcd_state()&
0x80)==0x80);
delayxus(5);
}
//向LCD写数据
voidwrite_lcd_data(uchardat)
lcd_busy_wait();
RS=1;
RW=0;
P0=dat;
//向LCD写指令
voidwrite_lcd_cmd(ucharcmd)
{lcd_busy_wait();
P0=cmd;
//-----------------------------------------------------------------------------------------------------
//LCD初始化
voidinit_lcd()
write_lcd_c