收藏 分销(赏)

单片机数字温度计优秀课程设计优质报告.doc

上传人:丰**** 文档编号:2658567 上传时间:2024-06-03 格式:DOC 页数:30 大小:256.54KB
下载 相关 举报
单片机数字温度计优秀课程设计优质报告.doc_第1页
第1页 / 共30页
单片机数字温度计优秀课程设计优质报告.doc_第2页
第2页 / 共30页
单片机数字温度计优秀课程设计优质报告.doc_第3页
第3页 / 共30页
单片机数字温度计优秀课程设计优质报告.doc_第4页
第4页 / 共30页
单片机数字温度计优秀课程设计优质报告.doc_第5页
第5页 / 共30页
点击查看更多>>
资源描述

1、目 录1.设计任务. . . .1 1.1 设计目标. . .1 1.2 设计指标. . .11.3 设计要求. .12. 设计思绪和总体框图. .13. 系统硬件电路设计. .23.1主控电路. . .23.2液晶显示电路. .33.3按键电路. . . .33.4报警电路. . .44. 系统仿真设计.4 4.1仿真原理图. . . .4 4.2各功效元件分析.55. 系统软件设计.10 5.1 主程序.11 5.2 读出温度子程序.11 5.3 温度转换命令子程序.12 5.4 设计温度子程序.12 5.5 1602温度显示.136. 总结和体会. . . .136 1 总结. . .

2、.136. 2体会. . . .147. 参考文件. . . .158. 附录.161. 设计任务1.1 设计目标1. 了解数数字温度计及工作原理。2. 深入掌握数字温度计设计方法。 3. 深入掌握各芯片逻辑功效及使用方法。 4. 深入掌握keil和仿真软件应用。5. 深入熟悉集成电路引脚安排.。1.2 设计指标1. 显示温度。2. 能够显示大于零度温度也能够显示小于零度温度。3. 含有显示对应环境温度功效,而且含有超出设定范围内温度时能够报 警功效,对应环境能够人为选择。1.3 设计要求1.画出总体设计框图,以说明数字温度计由哪些相对独立功效模块组 成,标出各个模块之间相互联络。并以文字对原

3、理作辅助说明。2.设计各个功效模块电路图,加上原理说明。3.选择适宜元器件,在面包板上接线验证、调试各个功效模块电路,在接线验证时设计、选择适宜输入信号和输出方法,在确定电路充足正确性同时,输入信号和输出方法要便于电路测试和故障排除。4.在验证各个功效模块基础上,对整个电路元器件和布线进行合理布局,进行整个数字温度电路接线调试。2.设计思绪和总体框图.数字温度计由主控制器(单片机)、温度传感器(DS18B20)、显示器(LCD1602)、独立按键和报警电路组成,温度传感器所感应温度信号经过其数据传输引脚传送给单片机,单片机将所接收到温度信号经过处理,将其送至显示器LCD1602显示,而且能够经

4、过独立按键设置温度报警值,若温度处于报警上限和下限之外,报警电路工作。图1所表示为数字温度计通常结构框图:报警温度调整键 LCD1602显示 STC90C51 主 控 制 器 蜂鸣器,指示灯单片机时钟振荡 DS18B20传感器 图1 数字温度计结构框图3. 系统硬件电路设计3.1 主控电路单片机STC90C51含有低电压供电和体积小等特点,四个端口同时使用以满足电路系统设计需要,很适合便携手持式产品设计使用系统可用二节电池供电。晶振采取12MHZ。 图2 主控电路 图3 晶振电路 3.2 温度显示电路采取液晶显示器LCD1602显示,第一行显示“18B20 OK TL”和报警下限值,第二行显示

5、实时温度和报警上限值,而且能够显示负温度值。用P0口进行LCD1602数据写操作,P2.5P2.7口进行LCD1602命令控制端口。电路图以下: 图4 温度显示电路 3.3 按键电路本系统一共设置了四个按键,k1键设置温度下限加,k2键设置温度下限减k3键设置温度上限加,k4键设置温度上限减。 图5 按键电路3.4 报警电路本设计采取蜂鸣器和LED灯组成报警电路,电路图以下: 图6 报警电路4系统设计仿真4.1仿真原理图依据数字温度计通常结构框图,我们经过查阅资料书和上网查询,了解不一样元件功效和实用性,考虑性价比后,制作出数字温度计仿真电路原理图,图7所表示。 图7 数字温度计仿真电路原理图

6、4.2各功效元件分析2设计原理图中各功效元件引脚图分析以下所表示:1DS18B20:DS18B20温度传感器是美国DALLAS半导体企业最新推出一个改善型智能温度传感器,和传统热敏电阻等测温元件相比,它能直接读出被测温度,而且可依据实际要求经过简单编程实现9-12位数字值读数方法。DS18B20性能特点以下:(1)独特单线接口仅需要一个端口引脚进行通信,DS18B20在和微处理器连接时仅需要一条口线即可实现微处理器和DS18B20双向通讯。(2)DS18B20支持多点组网功效,多个DS18B20能够并联在惟一三线上,实现多点组网测温;(3)无须外部器件,全部传感元件及转换电路集成在形如一只三极

7、管集成电路内;(4)可经过数据线供电,电压范围为3.0-5.5;(5)零待机功耗;(6)温度以9或12位数字,对应可分辨温度分别为0.5、0.25、0.125和0.0625,可实现高精度测温;(7)用户可定义报警设置;(8)报警搜索命令识别并标志超出程序限定温度(温度报警条件)器件;(9)负电压特征,电源极性接反时,温度计不会因发烧而烧毁,但不能正常工作;(10)测量结果直接输出数字温度信号,以一线总线串行传送给CPU,同时可传送CRC校验码,含有极强抗干扰纠错能力DS18B20采取3脚PR35封装或8脚SOIC封装,其引脚排列及内部结构框: 图8 DS18B20引脚排列图 图9 内部结构框图

8、预置斜率累加器比较低温度系数振荡器计数器1温度寄存器Tx预置=0高温度系数振荡器-0计数器2T1加1停止T2 图 10 DS18B20测温原理图64位ROM结构开始8位是产品类型编号,接着是每个器件惟一序号,共有48位,最终8位是前面56位CRC检验码,这也是多个DS18B20能够采取一线进行通信原因。温度报警触发器TH和TL,可经过软件写入户报警上下限。DS18B20温度传感器内部存放器还包含一个高速暂存RAM和一个非易失性可电擦除EERAM。高速暂存RAM结构为8字节存放器,结构图4所表示。头2个字节包含测得温度信息,第3和第4字节TH和TL拷贝,是易失,每次上电复位时被刷新。第5个字节,

9、为配置寄存器,它内容用于确定温度值数字转换分辨率。DS18B20工作时寄存器中分辨率转换为对应精度温度数值。该字节各位定义图5所表示。低5位一直为1,TM是工作模式位,用于设置DS18B20在工作模式还是在测试模式,DS18B20出厂时该位被设置为0,用户不要去改动,R1和R0决定温度转换精度位数,来设置分辨率。温度 LSB温度 MSBTH用户字节1TL用户字节2配置寄存器保留保留保留CRCTMR1R011111图11 DS18B20字节定义 DS18B20分辨率定义如表1所表示表1 分辨率设置表R0R1分辨率最大温度转移时间009位96.75ms0110位187.5ms1011位375ms1

10、112位750ms由表1可见,DS18B20温度转换时间比较长,而且分辨率越高,所需要温度数据转换时间越长。所以,在实际应用中要将分辨率和转换时间权衡考虑。主机控制DS18B20完成温度转换过程是:每一次读写之前全部要对DS18B20进行复位,立即数据总线下拉500us,然后释放,DS18B20收到信号后等候16-60us左右,以后发出60-240us存在低脉冲,主CPU收到此此信号表示复位成功;复位成功后发送一条ROM指令,然后发送RAM指令,这么才能对DS18B20进行预订读写操作。表2 ROM指令集指令约定代码功效读ROM33H读DS18B20中编码符合ROM55H发出此命令后,接着发出

11、64位ROM编码,访问单线总线上和该编辑相对应DS18B20使之做出响应,为下一步对该DS18B20读写作准备搜索ROM0F0H用于确定挂接在同一总线上DS18B20个数和识别64位ROM地址,为操作各器件作准备跳过ROM0CCH忽略64位ROM地址,直接向DS18B20发送温度变换指令告警搜索命令0ECH实施后,只有温度跳过设定值上限或下限片子才能做出反应表3 RAM指令集指令约定代码功效温度转换44H开启DS18B20进行温度转换读暂存器0BEH读暂存器9个字节内容写暂存器4EH将数据写入暂存器TH、TL字节复制暂存器48H把暂存器TH、TL字节写到E2RAM中重调E2RAM0B8H把E2

12、RAM中TH、TL字节写到暂存器TH、TL字节读供电方法0B4H开启DS18B20发送电源供电方法信号给主CPUDS18B20测温原理是这这么,器件中低温度系数晶振振荡频率受温度影响很小,用于产生固定频率脉冲信号送给减法计数器1;高温度系数晶振随温度改变其振荡频率显著改变,所产生信号作为减法计数器2脉冲输入。器件中还有一个计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生时钟脉冲进行计数进而完成温度测量。计数门开启时间由高温度系数振荡器来决定,每次测量前,首先将最低温所对应一个基数分别置入减法计数器1、温度寄存器中,计数器1和温度寄存器被预置在最低温所对应一个基数值。减法计数器1对

13、低温度系数晶振产生脉冲信号进行减法计数,当减法计数器1预置值减到0时,温度寄存器值将加1,减法计数器1预置将重新被装入,减法计数器1重新开始对低温度系数晶振产生脉冲信号进行计数,如此循环直到减法计数器计数到0时,停止温度寄存器累加,此时温度寄存器中数值就是所测温度值。其输出用于修正减法计数器预置值,只要计数器门仍未关闭就反复上述过程,直到温度寄存器值大致被测温度值。 图 12 测温电路图2. LCD1602:工业字符型液晶,能够同时显示16x02即32个字符(16列2行)。1602液晶也叫1602字符型液晶,它是一个专门用来显示字母、数字、符号等点阵型液晶模块。它由若干个5X7或5X11等点阵

14、字符位组成,每个点阵字符位全部能够显示一个字符,每位之间有一个点距间隔,每行之间也有间隔,起到了字符间距和行间距作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。1602LCD是指显示内容为16X2,即能够显示两行,每行16个字符液晶模块(显示字符和数字)。1602芯片接口信号说明以下表:1602芯片接口信号说明5 系统软件设计整个系统是由硬件配合软件来实现,在硬件确定后,编写软件功效也就基础定型了。所以软件功效大致可分为两个部分:一是监控,这也是系统关键部分,二是实施部分,完成各个具体功效。系统程序关键包含主程序,读出温度子程序,温度转换命令子程序,计算温度子程

15、序,显示数据刷新子程序等。5.1主程序主程序关键功效是负责温度实时显示、读出并处理DS18B20测量目前温度值,温度测量每1s进行一次。这么能够在一秒之内测量一次被测温度,其程序步骤见图13所表示。Y发DS18B20复位命令发跳过ROM命令发读取温度命令读取操作,CRC校验9字节完?CRC校验正?确?移入温度暂存器结束NNY 开始 液晶初始化 调用按键函数, 液晶显示函数判定温度值和设定报警值大小 大于TH或 N 者小于TL Y 报警 结束 图 13 主程序步骤图 图 14 读温度步骤图5.2读出温度子程序读出温度子程序关键功效是读出RAM中9字节,在读出时需进行CRC校验,校验有错时不进行温

16、度数据改写。其程序步骤图图15示:发DS18B20复位命令发跳过ROM命令发温度转换开始命令 结束 图 15 温度转换步骤图5.3温度转换命令子程序温度转换命令子程序关键是发温度转换开始命令,当采取12位分辨率时转换时间约为750ms,在本程序设计中采取1s显示程序延时法等候转换完成。温度转换命令子程序步骤图如上图,图13所表示5.4 计算温度子程序计算温度子程序将RAM中读取值进行BCD码转换运算,并进行温度值正负判定,其程序步骤图图16所表示。 开始 温度零下?温度值取补码置“”标志 计算小数位温度 计算整数位温度 结束置“+”标志NY 图 16 计算温度温度步骤图 5.5 1602液晶显

17、示 图 17 1602液晶显示步骤图6.总结和体会6.1 总结1.依据原理和芯片引脚图,分功效设计原理图,并依据接线次序分步骤验证。2.轻易出现故障为接触不良。a)集成块引脚方向预先弯好对准面包板金属孔,再小心插入。b)导线剥线长度和面包板厚度相适应(比板厚度稍短)。c) 导线裸线部分不要露在板上面,以防短路。d)导线要插入金属孔中央。3.注意芯片控制引脚必需正确接好4.检验故障时除测试输入、输出信号外,要注意电源、接地和控制引脚。5.要注意芯片引脚上信号和面包板上插座上信号是否一致(集成块引脚和面包板常接触不良)。6.接校时电路时可接模拟信号输入(如1Hz和2Hz)测试输出信号切换正确后,再

18、将秒进位和分进位信号接到校时电路,再接校时电路输出到分计数器和时计数器。从较时电路接入信号时,必需将原进位信号拔掉。6.2 体会经过快要两周单片机课程设计,最终完成了我们数字温度计课程设计,即使课程设计做不是尤其好,但从心底里说,还是快乐,因为我们收获了很多很多,这些在日常学习当中是收获不到,但快乐之余不得不静下来深思! 在此次课程设计过程中,我们发觉很多问题,即使以前还做过类似课程设计,但这次设计真让我学到了很多、长进了很多,单片机课程设计关键就在于软件算法设计,需要有很巧妙程序算法,即使以前写过部分程序,但觉要写好一个程序并不是一件简单事,所以我们只能不停调试不停修改才能把程写愈加好。所以

19、得出结论是:有好多东西,只有我们去试着做了,才能真正掌握,只学习理论有些东西是极难了解,更谈不上掌握,实践才是硬道理,实践是检验真理唯一标准。经过这次课程设计,我们真正意识到,在以后学习中,要理论联络实际,把我们所学理论知识用到实际当中,这么我们才能愈加好了解、掌握这些知识,学习单机片机更是如此,程序只有在常常写和读过程中才能提升,这就是我在这次课程设计中最大收获。经过这次对数字温度计设计和制作,让我们了解了设计电旅程序,也让我们了解了相关数字温度计原理和设计理念,要设计一个电路总要先用仿真仿真成功以后才实际接线。不过最终成品却不一定和仿真时完全一样,因为,在实际接线中有着多种多样条件制约着。

20、而且,在仿真中无法成功电路接法,在实际中因为芯片本身特征而能够成功。所以,在设计时应考虑二者差异,从中找出最适合设计方法。 经过这次学习,让我们对多种电路全部有了大约了解,所以说,坐而言不如立而行,对于这些电路还是应该自己动手实际操作才会有深刻了解。 当然在这个过程中我们还会碰到很多其它问题,这些问题我们也不是那么轻易就能够处理,此时我们就会去翻阅相关资料,或是问同学、问老师,我们同学和老师那一个个真事知无不答,这么我们就能很快把问题给决绝掉了,那种感觉真让人很舒畅,这也让我们明白了一件事,在学习中我们缺乏不了同学、老师帮助,她们能够很快处理部分问题。 从这次课程设计中,我真正意识到,在以后学

21、习中,要理论联络实际,把我们所学理论知识应用到实际当中,学习单机片机更是如此,程序只有在常常写和读过程中才能提升,这就是我在这次课程设计中最大收获。7参考文件 1 单片机原理及应用杨恢先、黄辉光主编M湘潭大学出版社2 电子技术基础(第五版)华中科技大学电子技术课程组编M康华光主编,陈大钦、张林副主编,高等教育出版社3单片机课程指导楼然苗 、李光飞编著,北京航空航天大学大学出版社 4 51单片机C语言教程 郭天祥 编著8.附录:#include#include #define uchar unsigned char#define uint unsigned intuchar temp,num,k

22、1num;uchar code table=18B20 OK TL;char shangxiaxian2=-10,10;char a;sbit k1=P10;sbit k2=P11;sbit k3=P12;sbit k4=P13;sbit LCD_RW=P25;sbit lcdrs=P26;sbit lcden=P27;sbit Beep=P30;sbit led=P31;sbit DQ=P37; /*液晶显示器延时程序*/void delay(uint z) uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);/*温度传感器延时程序*/ void Delay1(u

23、int y) uint x;for( ; y0; y-)for(x=110; x0; x-); /*蜂鸣器,18b20写数据函数延时程序*/ void delay2(uint a) while(-a); /*温度传感器初始化函数*/void init_18b20() DQ=1; delay2(8); DQ=0; delay2(90); DQ=1; _nop_(); _nop_(); delay2(100); DQ=1; /*温度传感器写字节命令函数*/void Ds18b20xiezijie(uchar date) uchar i; for(i=0;i=1; /右移一位,写入第二位数据 /*温

24、度传感器读字节命令函数*/uchar Ds18b20duzijie()uchar i,dat=0; DQ=1; _nop_(); for(i=0;i=1; DQ=1; /然后释放总线 _nop_(); /延时一下等候数据稳定 _nop_(); if(DQ) dat|=0x80; /读取数据,从最低位开始读取 delay2(30); /读取完以后等候一下,再接着读取下一个数 DQ=1; return dat; /返回所读到温度 /*写温度转换命令函数*/void Ds18b20ChangTemp() init_18b20();Delay1(1);Ds18b20xiezijie(0xcc);/跳过

25、ROM操作命令 Ds18b20xiezijie(0x44); /温度转换命令 /*读温度命令函数*/void Ds18b20ReadTempCom() init_18b20();Delay1(1);Ds18b20xiezijie(0xcc); /跳过ROM操作命令Ds18b20xiezijie(0xbe); /发送读取温度命令 /*读温度函数*/int Ds18b20ReadTemp() int temp = 0;uchar tmh, tml;Ds18b20ChangTemp(); /先写入转换命令Ds18b20ReadTempCom();/然后等候转换完后发送读取温度命令tml = Ds18

26、b20duzijie();/读取温度值共16位,先读低字节tmh = Ds18b20duzijie();/再读高字节temp = tmh;temp = 8;temp |= tml;return temp; /*液晶屏写指令函数*/void write_com(uchar com) lcdrs=0;lcden=0;LCD_RW=0;P0=com;delay(5);lcden=1;delay(5);lcden=0; /*液晶屏写指令函数*/void write_com2(int com) lcdrs=0;LCD_RW=0;lcden=0;delay(5);P0=com;delay(5);lcden

27、=1;delay(5);lcden=0;P0=(com&0x0f)4;delay(5);lcden=1;delay(5);lcden=0;/*液晶屏写数据命令函数*/void write_data(char date)lcdrs=1;LCD_RW=0;lcden=0;P0=date;delay(5);lcden=1;delay(5);lcden=0;lcdrs=1;LCD_RW=0;lcden=0;P0=(date&0x0f)4;/一次写入4位delay(5);lcden=1;delay(5);lcden=0;/*液晶屏初始化函数*/void init() lcden=0; write_com

28、(0x28); write_com2(0x28);write_com2(0x0c);write_com2(0x06);write_com2(0x01);write_com2(0X80); /*报警上下线处理函数*/ void write_hl(uchar add,char date) uchar bai,shi,ge; if(date0)date=-date; bai=date/100; shi=date%100/10; ge=date%100%10; write_com2(0x80+0x40+add); write_data(0x30+bai); write_data(0x30+shi);

29、write_data(0x30+ge); /*报警上下线处理函数*/void write_hl1(uchar add,char date) uchar bai,shi,ge; if(date0)date=-date; bai=date/100; shi=date%100/10; ge=date%100%10; write_com2(0x80+add); write_data(0x30+bai); write_data(0x30+shi); write_data(0x30+ge); /*液晶屏显示函数,显示温度值*/void Lcdxianshi(int temp) uchar sz4=0,0,

30、0,0; unsigned char datas = 0, 0, 0, 0, 0; /定义数组float tp; if(temp 0)/当温度值为负数 write_com2(0x80+0x40);/写地址 80表示初始地址 write_data(-); /显示负temp=temp-1;/因为读取温度是实际温度补码,所以减1,再取反求出原码temp=temp;tp=temp;temp=tp*0.0625*100+0.5; else write_com2(0x80+0x40);/写地址80表示初始地址 write_data(+); /显示正tp=temp; /因为数据处理有小数点所以将温度赋给一个

31、浮点型变量 假如温度是正那么,那么正数原码就是补码它本身temp=tp*0.0625*100+0.5;datas0 = temp / 10000; /百位datas1 = temp % 10000 / 1000;/十位datas2 = temp % 1000 / 100;/个位datas3 = temp % 100 / 10; /小数write_com2(0x80+0x40+1); write_data(0+datas0); write_com2(0x80+0x40+2);write_data(0+datas1); write_com2(0x80+0x40+3); write_data(0+d

32、atas2); write_com2(0x80+0x40+4); write_data(.); write_com2(0x80+0x40+5);write_data(0+datas3); a=(datas0*100+datas1*10+datas2); /用于温度比较值 write_hl(13,shangxiaxian1);/显示报警上限 write_hl1(13,shangxiaxian0); /显示报警下限 /*按键处理函数,用于设置温度报警值*/void key() if(k1=0) delay(5); if(k1=0) /温度报警下限加 shangxiaxian0+; if(shangxiaxian0=127) shangxiaxian0=126; write_hl1(13, shangxiaxian0); if(k2=0) /温度报警下限减 delay(5); if(k2=0) shangxiaxian0-; if(shangxiaxian0=-56) shangxiaxian0=-55; write_hl1(13, shangxiaxian0); if(k3=0)/温度报警上限加 delay(5); if(k3=0) shangxiaxian1+; if(shang

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
搜索标签

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服