《2022年单片机数字温度计课程设计分析方案.docx》由会员分享,可在线阅读,更多相关《2022年单片机数字温度计课程设计分析方案.docx(31页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精品学习资源目录1. 设计任务11.1 设计目的11.2 设计指标11.3 设计要求12. 设计思路与总体框图13. 系统硬件电路的设计23.1 主控电路23.2 液晶显示电路33.3 按键电路33.4 报警电路44. 系统仿真设计44.1 仿真原理图44.2 各功能元件的分析55. 系统软件设计105.1 主程序115.2 读出温度子程序115.3 温度转换命令子程序125.4 设计温度子程序125.5 1602 的温度显示136. 总结与体会136 1 总结136. 2 体会147. 参考文献158. 附录161. 设计任务0 / 24欢迎下载精品学习资源1.1 设计目的1. 明白数数字温
2、度计及工作原理;2. 进一步把握数字温度计设计方法;3. 进一步把握各芯片的规律功能及使用方法;4. 进一步把握 keil和仿真软件的应用;5. 进一步熟识集成电路的引脚支配 . ;1.2 设计指标1. 显示温度;2. 可以显示大于零度的温度也可以显示小于零度的温度;3. 具有显示相应环境温度的功能,并且具有超出设定范畴内温度时可以报警的功能,相应环境可以人为挑选;1.3 设计要求1. 画出总体设计框图,以说明数字温度计由哪些相对独立的功能模块组成,标出各个模块之间相互联系;并以文字对原理作帮助说明;2. 设计各个功能模块的电路图,加上原理说明;3. 挑选合适的元器件,在面包板上接线验证、调试
3、各个功能模块的电路,在接线验证时设计、挑选合适的输入信号和输出方式,在确定电路充分正确性同时,输入信号和输出方式要便于电路的测试和故障排除;4. 在验证各个功能模块基础上,对整个电路的元器件和布线进行合理布局,进行整个数字温度电路的接线调试;2. 设计思路与总体框图 .数字温度计由主掌握器 、显示器LCD1602、独立按键和报警电路组成,温度传感器所感应的温度信号经过其数据传输引脚传送给单片机,单片机将所接收到的温度信号经过处理,将其送至 显示器 LCD1602显示,并且能够通过独立按键设置温度报警值,如温度处于报警上限和下限之外,报警电路工作;图1 所示为数字温度计的一般结构框图:欢迎下载精
4、品学习资源报 警 温 度 调整键STC90C51主LCD1602 显示欢迎下载精品学习资源控 1 / 24制器欢迎下载精品学习资源蜂鸣器,指示灯单片机时钟振荡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
6、所示;欢迎下载精品学习资源 图 7数字温度计仿真电路原理图24.2 各功能元件的分析设计原理图中各功能元件的引脚图的分析如下所示:1 DS18B2:0DS18B20温度传感器是美国 DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可依据实际要求通过简洁的编程实现9-12 位的数字值读数方式; DS18B20的性能特点如下:1)特殊的单线接口仅需要一个端口引脚进行通信,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯;2)DS18B20支持多点组网功能,多个 DS18B20可以并联在惟一的
7、三线上, 实现多点组网测温;3)无须外部器件,全部传感元件及转换电路集成在形如一只三极管的集成电路内;欢迎下载精品学习资源4)可通过数据线供电,电压范畴为3.0-5.5 ;5)零待机功耗;6)温度以 9或12位数字,对应的可辨论温度分别为 0.5 、0.25 、0.125 和0.0625 ,可实现高精度测温;7)用户可定义报警设置;8)报警搜寻命令识别并标志超过程序限定温度温度报警条件)的器件;9)负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作;10)测量结果直接输出数字温度信号,以 一线总线 串行传送给 CPU,同时可传送 CRC校验码,具有极强的抗干扰纠错才能 DS18
8、B20采纳3脚PR35封装或 8脚SOIC封装,其引脚排列及内部结构框: 图 8DS18B20 引脚排列图 图 9 内部结构框图欢迎下载精品学习资源预置斜率累加器低 温 度 系 数 振 荡计数器 1比较T1预置Tx欢迎下载精品学习资源加 1高 温 度 系 数 振 荡=0停止计数器-0T2温度寄存器欢迎下载精品学习资源 图 10DS18B20 测温原理图64 位 ROM的结构开头 8 位是产品类型的编号,接着是每个器件的惟一的序号,共有 48 位,最终 8 位是前面 56 位的 CRC检验码,这也是多个DS18B20可以采纳一线进行通信的缘由;温度报警触发器TH 和 TL,可通过软件写入户报警上
9、下限;DS18B20温度传感器的内部储备器仍包括一个高速暂存RAM和一个非易失性的可电擦除的 EERA;M 高速暂存 RAM的结构为 8 字节的储备器,结构如图 4 所示;头 2 个字节包含测得的温度信息,第3 和第 4 字节 TH和 TL 的拷贝,是易失的,每次上电复位时被刷新;第5 个字节,为配置寄存器,它的内容用于确定温度值的数字转换辨论率;DS18B20工作时寄存器中的辨论率转换为相应精 度的温度数值;该字节各位的定义如图5 所示;低 5 位始终为 1, TM是工作模式位,用于设置 DS18B20在工作模式仍是在测试模式, DS18B20出厂时该位被设置为 0,用户不要去改动, R1
10、和 R0 打算温度转换的精度位数,来设置辨论率;温度 LSB温度 MSB TH用户字节 1TL 用户字节 2配置寄存器欢迎下载精品学习资源保留保留保留CRCTMR1R011111图 11 DS18B20的字节定义DS18B20的辨论率定义如表 1 所示表 1辨论率设置表R0R1辨论率最大温度转移时间009 位96.75ms0110 位187.5ms1011 位375ms1112 位750ms由表 1 可见, DS18B20温度转换的时间比较长,而且辨论率越高,所需要的温度数据转换时间越长;因此,在实际应用中要将辨论率和转换时间权衡考虑;主机掌握 DS18B20完成温度转换过程是:每一次读写之前
11、都要对DS18B20进行复位,即将数据总线下拉 500us,然后释放, DS18B20收到信号后等待 16-60us 左右,之后发出 60-240us 的存在低脉冲,主 CPU收到此此信号表示复位胜利; 复位胜利后发送一条 ROM指令,然后发送 RAM指令,这样才能对DS18B20进行预订的读写操作;表 2ROM指令集指令商定代码功能读 ROM33H读 DS18B20中的编码发出此命令后,接着发出64 位 ROM编码,拜访单线总欢迎下载精品学习资源符合 ROM55H线上与该编辑相对应的 DS18B20使之做出响应,为下一步对该 DS18B20的读写作预备欢迎下载精品学习资源搜寻 ROM0F0H
12、用于确定挂接在同一总线上的DS18B20个数和识别64位 ROM地址,为操作各器件作预备跳过 ROM0CCH忽视 64 位 ROM地址,直接向 DS18B20发送温度变换指令欢迎下载精品学习资源告警搜寻命令0ECH执行后,只有温度跳过设定值上限或下限的片子才能做出反应表 3RAM指令集指令温度转换 读暂存器 写暂存器 复制暂存重视调 E RAM读供电方式商定代码44H0BEH4EH48H功能启动 DS18B20进行温度转换读暂存器 9 个字节内容将数据写入暂存器的 TH、TL 字节把暂存器的 TH、TL 字节写到 E RAM中220B8H0B4H把 E RAM中的 TH、TL 字节写到暂存器2
13、TH、TL 字节启动 DS18B20发送电源供电方式的信号给主CPUDS18B20的测温原理是这这样的 , 器件中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器1;高温度系数晶振随温度变化其振荡频率明显转变,所产生的信号作为减法计数器2 的脉冲输入;器件中仍有一个计数门,当计数门打开时,DS18B20 就对低温度系数振荡器产生的时钟脉冲进行计数进而完成温度测量;计数门的开启时间由高温度系数振荡器来打算,每次测量前,第一将最低温所对应的一个基数分别置入减法 计数器 1、温度寄存器中,计数器1 和温度寄存器被预置在最低温所对应的一个基数值;减法计数器1 对低温度
14、系数晶振产生的脉冲信号进行减法计数,当减法计数器1 的预置值减到 0 时,温度寄存器的值将加 1,减法计数器 1 的预置将重新被装入,减法计数器 1 重新开头对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器计数到0 时,停止温度寄存器的累加,此时温度寄存器中的数值就是所测温度值;其输出用于修正减法计数器的预置值,只要计数器门 仍未关闭就重复上述过程,直到温度寄存器值大致被测温度值;欢迎下载精品学习资源 图 12测温电路图2. LCD1602:工业字符型液晶,能够同时显示16x02 即 32 个字符16 列 2 行); 1602 液晶也叫 1602 字符型液晶,它是一种特地用来显示
15、字母、数字、符号等的点阵型液晶模块;它由如干个5X7 或者 5X11 等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正由于如此所以它不能很好地显示图形用自定义 CGRAM ,显示成效也不好); 1602LCD 是指显示的内容为16X2, 即可以显示两行,每行 16 个字符液晶模块 集成块引脚方向预先弯好对准面包板的金属孔,再当心插入;b导线的剥线长度与面包板的厚度相适应 导线的裸线部分不要露在板的上面,以防短路;d导线要插入金属孔中心;3. 留意芯片的掌握引脚必需正确接好4. 检查故障时除测试输入、输出信号外,要留
16、意电源、接地和掌握引脚;5. 要留意芯片引脚上的信号与面包板上插座上信号是否一样集成块引脚与面包板常接触不良);6. 接校时电路时可接模拟信号输入 如 1Hz 和 2Hz)测试输出信号的切换正确后,再将秒进位和分进位信号接到校时电路,再接校时电路输出到分计数器欢迎下载精品学习资源和时计数器;从较时电路接入信号时,必需将原进位信号拔掉;6.2 体会经过将近两周的单片机课程设计,最终完成了我们的数字温度计课程设计, 虽然课程设计做的不是特殊好,但从心底里说,仍是兴奋的,由于我们收成了许多许多,这些在平常的学习当中是收成不到的,但兴奋之余不得不静下来深思!在本次课程设计的过程中,我们发觉许多的问题,
17、虽然以前仍做过类似的课程设计,但这次设计真的让我学到了许多、进步了许多,单片机课程设计的重点就在于软件算法的设计,需要有很奇妙的程序算法,虽然以前写过一些程 序,但觉的要写好一个程序并不是一件简洁的事,所以我们只能不断的调试不断的修改才能把程写的更好;所以得出结论是:有好多的东西,只有我们去试着做了,才能真正的把握,只学习理论有些东西是很难懂得的,更谈不上掌 握,实践才是硬道理,实践是检验真理的唯独标准;通过这次的课程设计,我们真正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论学问用到实际当中,这样我们才能更好的懂得、把握这些学问,学习单机片机更是如此,程序只有在常常的写与读的过程
18、中才能提 高,这就是我在这次课程设计中的最大收成;通过这次对数字温度计的设计与制作,让我们明白了设计电路的程序,也让我们明白了关于数字温度计的原理与设计理念,要设计一个电路总要先用仿真仿真胜利之后才实际接线的;但是最终的成品却不肯定与仿真时完全一样,由于,在实际接线中有着各种各样的条件制约着;并且,在仿真中无法胜利的电路接法,在实际中由于芯片本身的特性而能够胜利;所以,在设计时应考虑两者的差异,从中找出最适合的设计方法;通过这次学习,让我们对各种电路都有了大致的明白,所以说,坐而言不如立而行,对于这些电路仍是应当自己动手实际操作才会有深刻懂得;当然在这个过程中我们仍会遇到许多其它的问题,这些问
19、题我们也不是那么轻易的就能够解决的,此时我们就会去翻阅相关资料,或者是问同学、问老 师,我们的同学和老师那一个个真的事知无不答的,这样我们就能很快的把问欢迎下载精品学习资源题给决绝掉了,那种感觉真的让人很舒服,这也让我们明白了一件事,在学习中我们缺少不了同学、老师的帮忙,他们能够很快的解决一些问题;从这次的课程设计中,我真正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论学问应用到实际当中,学习单机片机更是如此,程序只有在常常的写与读的过程中才能提高,这就是我在这次课程设计中的最大收 获;7. 参考文献1 单片机原理及应用杨恢先、黄辉光主编M 湘潭高校出版社2 电子技术基础 第五版)
20、华中科技高校电子技术课程组编M 康华光主编,陈大钦、张林副主编,高等训练出版社3 单片机课程指导楼然苗、李光飞编著,北京航空航天高校高校出版社4 51 单片机 C语言教程 郭天祥 编著欢迎下载精品学习资源8. 附录:#include #include #define uchar unsigned char #define uint unsigned int uchar temp,num,k1num;uchar code table=18B20 OK TL;char shangxiaxian2=-10,10;char a;sbit k1=P10; sbit k2=P11; sbit k3=P12
21、; sbit k4=P13; sbit LCD_RW=P25 ;sbit lcdrs=P26;sbit lcden=P27;sbit Beep=P30;sbit led=P31; sbit DQ=P37 ;/*液晶显示屏的延时程序 */ void delayuint zuint x,y;forx=z;x0 ;x-fory=110;y0 ;y- ;/* 温度传感器的延时程序*/ void Delay1uint yuint x;for; y0 ; y-forx=110; x0 ; x-;/*蜂鸣器, 18b20 写数据函数的延时程序*/ void delay2uint awhile-a;/*温度传
22、感器初始化函数*/ void init_18b20DQ=1;delay28;DQ=0;欢迎下载精品学习资源delay290;DQ=1;_nop_ ;_nop_ ;delay2100;DQ=1;/*温度传感器写字节命令函数*/ void Ds18b20xiezijieuchar dateuchar i;fori=0;iDQ=0 ;/在写入一位数据之前先把总线拉低DQ=date&0x01 ;/写入一个数据,从最低位开头写delay25;/延时一下DQ=1 ;/ 将总线拉高,等待其次位数据写入date=1;/右移一位,写入其次位数据/*温度传感器读字节命令函数*/ uchar Ds18b20duzi
23、jieuchar i,dat=0;DQ=1;_nop_ ;fori=0;iDQ=0 ;/先将总线拉低_nop_;_nop_;dat=1;DQ=1 ;/然后释放总线_nop_;/延时一下等待数据稳固_nop_;ifDQdat|=0x80; /读取数据,从最低位开头读取delay230DQ=1 ;/读取完之后等待一下,再接着读取下一个数return dat; /返回所读到的温度/*写温度转换命令函数 */ void Ds18b20ChangTempinit_18b20;Delay11 ;Ds18b20xiezijie0xcc;/ 跳过 ROM操作命令Ds18b20xiezijie0x44;/温度转
24、换命令/*读温度命令函数 */void Ds18b20ReadTempCom欢迎下载精品学习资源init_18b20;Delay11 ;Ds18b20xiezijie0xcc;/跳过 ROM操作命令Ds18b20xiezijie0xbe;/发送读取温度命令/*读温度函数 */int Ds18b20ReadTempint temp = 0;uchar tmh, tml;Ds18b20ChangTemp;/ 先写入转换命令欢迎下载精品学习资源Ds18b20ReadTempCom;命令/ 然后等待转换完后发送读取温度欢迎下载精品学习资源tml = Ds18b20duzijie;/ 读取温度值共 16
25、 位,先读低字节tmh = Ds18b20duzijie;/ 再读高字节temp = tmh ;temp lcdrs=0;lcden=0 ;LCD_RW=;0P0=com;delay5;lcden=1 ;delay5;lcden=0 ;/*液晶屏写指令函数*/void write_com2int comlcdrs=0;LCD_RW=;0lcden=0 ;delay5;P0=com;delay5;lcden=1 ;delay5;lcden=0 ;P0=com&0x0f; lcden=1 ;delay5;lcden=0 ;/* 液晶屏写数据命令函数*/ void write_datachar da
26、te欢迎下载精品学习资源lcdrs=1;LCD_RW=;0lcden=0 ;P0=date ;delay5;lcden=1 ;delay5;lcden=0 ;lcdrs=1;LCD_RW=;0lcden=0 ;P0=date&0x0f;lcden=1 ;delay5;lcden=0 ;/* 液晶屏初始化函数 */ void initlcden=0 ;write_com0x28;write_com20x28;write_com20x0c;write_com20x06;write_com20x01;write_com20X80;/*报警上下线处理函数 */void write_hluchar ad
27、d,char dateuchar bai,shi,ge;ifdatedate=-date; bai=date/100;shi=date%100/10;ge=date%100%10 ;write_com20x80+0x40+add;write_data0x30+bai;write_data0x30+shi;write_data0x30+ge;/*报警上下线处理函数 */void write_hl1uchar add,char dateuchar bai,shi,ge;ifdatedate=-date; bai=date/100;shi=date%100/10;ge=date%100%10 ;wr
28、ite_com20x80+add;write_data0x30+bai;write_data0x30+shi;write_data0x30+ge;欢迎下载精品学习资源/*液晶屏显示函数,显示温度值*/void Lcdxianshiint tempuchar sz4=0,0,0,0;unsigned char datas = 0, 0, 0, 0, 0; /定义数组float tp;iftemp/ 当温度值为负数欢迎下载精品学习资源出原码write_com20x80+0x40;/ 写地址 80 表示初始地址write_data-;/ 显示负temp=temp-1 ;/ 由于读取的温度是实际温度的
29、补码,所以减1,再取反求temp=temp;tp=temp ;temp=tp*0.0625*100+0.5;欢迎下载精品学习资源elsewrite_com20x80+0x40;/ 写地址 80 表示初始地址欢迎下载精品学习资源write_data+;/ 显示正tp=temp ;/由于数据处理有小数点所以将温度赋给一个浮点型变量假如温度是正的那么,那么正数的原码就是补码它本身temp=tp*0.0625*100+0.5;datas0 = temp / 10000;/百位datas1 = temp % 10000 / 1000;/ 十位datas2 = temp % 1000 / 100;/ 个位
30、datas3 = temp % 100 / 10;/小数write_com20x80+0x40+1;write_data0+datas0;write_com20x80+0x40+2;write_data0+datas1;write_com20x80+0x40+3;write_data0+datas2;write_com20x80+0x40+4;write_data.;write_com20x80+0x40+5;write_data0+datas3;a=datas0*100+datas1*10+datas2;/用于温度的比较值write_hl13,shangxiaxian1; / 显示报警上限w
31、rite_hl113,shangxiaxian0; /显示报警下限/*按键处理函数,用于设置温度报警值*/ void keyifk1=0delay5;ifk1=0/温度报警下限加shangxiaxian0+;欢迎下载精品学习资源ifshangxiaxian0=127 shangxiaxian0=126; write_hl113, shangxiaxian0;ifk2=0/温度报警下限减delay5;ifk2=0shangxiaxian0-;ifshangxiaxian0=-56 shangxiaxian0=-55;write_hl113, shangxiaxian0;ifk3=0/ 温度报警上
32、限加delay5;ifk3=0shangxiaxian1+;ifshangxiaxian1=127 shangxiaxian1=126; write_hl13, shangxiaxian1;ifk4=0/ 温度报警上限减delay5;ifk4=0shangxiaxian1-;ifshangxiaxian1=-56 shangxiaxian1=-55;write_hl13, shangxiaxian1;void mainint b;init;led=0;fornum=0;num/ 让液晶屏显示“ 18B20 OK TL”write_datatablenum;delay20 ;write_com2
33、0x80+0x40+9;write_dataT;write_com20x80+0x40+10;write_dataH;欢迎下载精品学习资源while1key;LcdxianshiDs18b20ReadTemp;delay100;欢迎下载精品学习资源ifshangxiaxian0write_com20x80+12;write_data-;elsewrite_com20x80+12;write_data+;ifshangxiaxian1write_com20x80+0x40+12;write_data-;elsewrite_com20x80+0x40+12;write_data+;ifashang
34、xiaxian1/判定温度值与报警值的大小write_com20x80+0x40+6;write_data;write_com20x80+0x40+7;write_dataH;欢迎下载精品学习资源鸣器响ifa/判定温度值与报警值的大小write_com20x80+0x40+6;write_data;write_com20x80+0x40+7;write_dataL;ifa=shangxiaxian0&a /判定温度值与报警值的大小write_com20x80+0x40+6;write_data ;write_com20x80+0x40+7;write_data.;ifashangxiaxian1 /假如温度值在报警值之外就,蜂forb=0;b Beep= 1;led=1 ;delay220;Beep= 0;led=0 ;欢迎下载精品学习资源delay220;欢迎下载