单片机的数字温度计设计方案附代码及仿真.docx

上传人:scccc 文档编号:13934925 上传时间:2022-01-27 格式:DOCX 页数:22 大小:341KB
返回 下载 相关 举报
单片机的数字温度计设计方案附代码及仿真.docx_第1页
第1页 / 共22页
单片机的数字温度计设计方案附代码及仿真.docx_第2页
第2页 / 共22页
单片机的数字温度计设计方案附代码及仿真.docx_第3页
第3页 / 共22页
单片机的数字温度计设计方案附代码及仿真.docx_第4页
第4页 / 共22页
单片机的数字温度计设计方案附代码及仿真.docx_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《单片机的数字温度计设计方案附代码及仿真.docx》由会员分享,可在线阅读,更多相关《单片机的数字温度计设计方案附代码及仿真.docx(22页珍藏版)》请在三一文库上搜索。

1、单片机的数字温度计设计方案 (附代码及仿真)基于STC89C52的数字温度计目录1、 绪论 32、 方案选择2.1、 主控芯片选择 32.2、 2、显示模块32.3、 温度检测模块.43、 系统硬件设计3.1、 51单片机最小系统设计.43.2、 电源供电电路设计53.3、 LCD显示电路设计 63.4、 温度检测电路设2/19计74、 系统软件设计4.1、 温度传感器数据读取流程图.94.2、 系统程序设计 105、 编程和仿真5.1、 Keil编程软件.15.2、proteus.115.3、 仿真界面.116、 总结.127、 附录附录1、原理图4/1912附录2、程序清1、绪论在信息高速

2、发展的21世纪,科学技术的发展日新月异,科技的进步带动了 测量技术的发展,现代控制设备的性能和结构发生了翻天覆地的变化。我们已 经进入了高速发展的信息时代,测量技术也成为当今科技的一个主流,广泛地 深入到研究和应用工程的各个领域。温度和人们的生活息息相关,温度的测量 也就变得很重要。2、系统方案选择2.1 主控芯片选择方案一:STC89C52RCSTC89C52RC是采用8051核的ISP在线可编程芯片,最高工作时钟频率 80MHz,片内含8KB的可反复擦写1000次的Flash只读存储器,器件兼容MCS-51 指令系统及8051引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存

3、储单元,具有在线可编程特定,配合PC端的控制程序即可将用户的程序代码下 载进单片机内部,省去了购买通用编程器,而且速度更快。STC89c52RC系列单 片机是单时钟周期、高速、低功耗的新一代8051单片机。方案二:ATmega8ATmega8是ATMAL公司在2002年第一季度推出的一款新型AVR高档单片机。 在AVR家族中,ATmega8是一种非常特殊的单片机,它的芯片内部集成了较大容 量的存储器和丰富强大的硬件接口电路,具备AVR高档单片机MEGA系列的全部 性能和特点。但由于采用了小引脚封装为口28和TQFP/MLF32),所以其价格 仅与低档单片机相当,再加上AVR单片机的系统内可编程

4、特性,使得无需购买 昂贵的仿真器和编程器也可进行单片机嵌入式系统的设计和开发,同时也为单 片机的初学者提供了非常方便和简捷的开发环境。由以上两种方案进行比较,我们选择STC89c52RC作为主控芯片,因为该芯 片是入门级单片机,我们对该款单片机比较熟悉,而AVR单片机较为高端,这 次的设计用STC89C52已经足够使用,引脚也够用,故用STC89C52作为主控芯 片。STC89c52RC价格低廉,一般5元以内可以买到,在通银买也很方便。2.2 时钟及显示模块方案一:数码管数码管亮度高,显示大,特别是显示的时间很直观,价格比较便宜,但多 位的数码管在动态扫描的时候会出现闪烁。而且数码管占用的位置

5、较大,且比 较耗电。方案二:1602液晶屏1602液晶屏显示清晰且不会闪烁,在需要时还可以输出字符等内容,由于 液晶屏是数字式的,因此和单片机系统的接口简单,操作方便。1602LCD液晶显 示屏的功耗主要消耗在其内部的电极和驱动IC上,因而耗电量比其他显示器要 少得多,功耗较低。由于其内部集成有显示芯片,程序编写简单,适用于多方 面的应用。因此由以上两种方案进行比较,我们选择方案二来设计显示模块。1602液 晶显示屏网上可购买的途径较多,价格一般在10元以内,重庆育森电子网店价 格为8. 5元。通银那也有,不过可能价格要15元左右。2.3 温度检测模块方案一:热敏电阻+AD模块本方案使用热敏电

6、阻之类的器件如AD590等模拟温度传感器)利用其感温 效应,在将随被测温度变化的电压或电流采集出来,进行A/D转换后,就可以 利用单片机进行数据的处理,在显示电路上可以将被测温度显示出来,这种设 计需要用到A/D转换电路,感温电路比较麻烦。方案二:DS18B20DS18B20数字温度传感器是DALLAS公司生产的1-Wire,即单总线器件,具 有线路简单,体积小的特点。因此用它来组成一个测温系统,具有线路简单, 在一根通信线,可以挂很多这样的数字温度计,十分方便。它在实际应用中不 需要外部任何元器件即可实现测温,测量温度范围在-55到+125摄氏度之间,由以上两种方案进行比较,我们选择方案二来

7、设计温度检测模块。其中 DS18B20网上报价约为5元,其中,重庆育森电子的网店较为便宜,为4.5元。 通银也有卖,价格稍微高点。3、系统硬件设计3.1 51单片机最小系统设计单片机最小系统如下图所示:C130PFU1C31uF4TEK )R21kU。主XTXTAL1P0.0/AD0P0.1/AD1 pn o/a noP0.3/AD3AI HLzP0.4/AD4P0.5/AD5P0.6/AD6DOTnn 7/An7hCO Ir U.,P2.0/A8P2.1/A9P2.2/A10PSEN ALE pTP2.3/A11P2.4/A12P2.5/A13匚只P2.6/A14P2.7JA15P1.0P3

8、.0/RXDP1.1P3.1/TXDP1.2P3.2/INT0P1.3P3.3/INT1P1.4P3.4/T0P1.5P3.5/T1P1.6P3.6/WRP1.7P3.7/RD19189STC89C522930 TT12347810TT12131415 适 T7以STC89c52单片机为核心,选用12M的晶振,这是最常用的选择,外接电容没 有特别的要求,但是外接电容的大小会影响振荡器的频率高低、振荡器的稳定 性和起振的快速性,因此我们选用30pf的电容作为起振电容。复位电路为按键 低电平复位,当按键按下,RET端为高电平,当高电平持续4us的时间就可以使 单片机复位。这里尤其要注意的是晶振和电

9、容的位置,它们距离单片机引脚越 短越好,因为太长可能无法使单片机起振。另外是EA端一定要接上电源,使单 片机能够工作。3.2 电源供电电路设计 电源供电电路如下图所示:我们采用4节L 5V的电池作为电源,LM2940为稳压芯片,稳压芯片两端分 别接两个0. luf和100uf的电容进行滤波,以获得更稳定的电压。D1为电源指 示灯,当开关打开,显示灯亮,表示给电路供+5V电压。其中,LM2940作为常 用的稳压芯片,比7805的转换效率要高,7805直接输入不接输出的情况下,其 内部会有3mA的静态电流消耗,而2940的静态电流比7805要小的多,故选择 LM2940作为稳压芯片。4节电池装在电

10、池盒中,在电路板下方安装,使用两套螺丝。3.3 LCD显示电路设计1602LCD液晶屏显示电路如下图所示:TFyT-t6lTMUT5irobsvod1602LCD液晶屏为5V电压驱动,带背光,可显示两行,每行16个字符,不能显 示汉字。液晶1、2端为电源;15、16为背光电源;为防止直接加5V而烧坏背 光灯,在15脚串联一个1K电阻晶3端为液晶对比度调节端,通过一个10K的 电位器来调节液晶显示对比度。用于限流。液液晶4端为向液晶控制器写数据/ 写命令选择端,接单片机PLO端口。液晶5端为读/写选择端,因为我们不需 要从液晶中读取数据,只向其写入命令和数据,因此此端始终选择为写状态, 即低电平

11、接地。液晶6端为使能信号,是操作必须的信号,接单片机的P1.1 口。11/193.4温度检测电路设计温度检测电路如下图所示:P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INTTP3.4/T0P3,5/T1P3.6/WRP3.7/RD2810亘12DS18B20DS18B20是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器, 与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际 要求通过简单的编程实现91 2位的数字值读数方式。DS18B20的性能特点如 下: 独特的单线接口仅需一个端口引脚进行通讯 简单的多点分布应用

12、 无需外部器件 可通过数据线供电 零待机功耗 测温范围-55+125t,以0.5,C递增。华氏器件-67+2570F,以0. 90F递 温度以9位数字量读出 温度数字量转换时间200ms典型值) 用户可定义的非易失性温度报警设置 报警搜索命令识别并标志超过程序限定温度温度报警条件)的器件。DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥 发的温度报警触发器TH和TL、配置寄存器。DS18B20的管脚排列、各种封装形式 如图所示,DQ为数据输入/输出引脚。开漏单总线接口引脚。当被用着在寄生 电源下,也可以向器件提供电源;GND为地信号;VDD为可选择的VDD引脚。当工

13、作于寄生电源时,此引脚必须接地。BOTTOM VIEWDALLAS DS1820DS18B20 TO-92GND匚DQLVdd匚PACKAGEDS18B20PTSOCDS18B20Z8-PIN SOIC (150-MIL)DS18B20的测温原理如图所示,图中低温度系数晶振的振荡频率受温度的影 响很小用于产生固定频率的脉冲信号送给减法计数器1,高温度系数晶振随温度 变化其震荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入,图中 还隐含着计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟 脉冲后进行计数,进而完成温度测量.计数门的开启时间由高温度系数振荡器来 决定,每次测

14、量前,首先将-55 C所对应的基数分别置入减法计数器1和温度 寄存器中,减法计数器1和温度寄存器被预置在-55 C所对应的一个基数值。减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计 数器1的预置值减到0时温度寄存器的值将加1,减法计数器1的预置将重新被 装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此 循环直到减法计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存 器中的数值即为所测温图中的斜率累加器用于补偿和修正测温过程中的非线性 其输出用,于修正减法计数器的预置值,只要计数门仍未关闭就重复上述过程, 直至温度寄存器值达到被测温度值,这就是DS1

15、8B20的测温原理。另外,由于DS18B20单线通信功能是分时完成的,有严格的时隙概念,因 此读写时序很重要。系统对DS18B20的各种操作必须按协议进行。操作协议为: 初始化DS18B20发复位脉冲)一发ROM功能命令一发存储器操作命令一处理数 据。在正常测温情况下,DS1820的测温分辨力为0. 5ro系统软件设计4.1 :实验主程序流程图4.2 :温度传感器数据读取流程图开始5、编程和仿真5.1编程软件Keil4Keil C51是美国Keil software公司出品的51系列兼容单片机C语言软件开 发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的 优势,因而易学易

16、用。Keil提供了包括C编译器、宏汇编、连接器、库管理和 一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境 NT、win2000 winXP、 win7等操作系统。2009年2月发布的Keil uVision4, Keil uVision4引入灵 活的窗口管理系统,使开发人员能够使用多台监视器,并提供了视觉上的表面 对窗口位置的完全控制的任何地方,新的用户界面可以更好地利用屏幕空间和 更有效地组织多个窗口,提供一个整洁、高效的环境来开发应用程序。5. 2 仿真软件 proteus7e 7Proteus软件是Lab cent er electronics公司出版的EDA工具软件

17、 该软件 中国总代理为广州风标电子技术有限公司)。它不仅具有其它EDA工具软件的仿 真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件 的工具。虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教案 的教师、致力于单片机开发应用的科技工作者的青睐。Proteus是世界上著名的EDA工具 OlZS b S9N CK Ct LU QQQQQQQQ6、总结1、选择芯片和传感器时,够用易用就可以,综合考虑选择性价比最好的。2、在进行电路实际制作之前,应该用仿真软件进行仿真,可以使开发进程加快。 3、在实际制作电路时,需要注意电源端和地端要检测过不导通后才能通电检测, 防止烧坏芯

18、片。7、附录附录1、原理图22 / 19CRYSTALHXT/.L1XTXIZP11 P1.I r iz P1J IM., PIS r s P1.1STCCS2TGTPDDAWJ PO.VAOI PDAKZ ro2TAca PD.iADi ro-TA PDAD6 ra.rA:LCD1uxiSL(6曾PTWlu广。,20e 3pzaxsPZVB PZAC P2A11 P2.*/AG P25TAG P2A*AU P21 从 WP3DPX0 P3.1TXP rsJTHTC pawn rawTD P3ST1 ra.aiWF P37/HURlnl-lylod lrl9R匚,Od c-0心 I8In位PC

19、-w rfiwpr3ik附录2、程序清单#include 头文件#define uchar unsigned charftdefine uint unsigned intsbit rs=P200sbit lcden=P2lo液晶使能端sbit DATA = P37o DS18B20 接入口uchar FLAG_DIS=0。uchar bai_18b20, shi_18b20, ge_18b20, numo 定义变量bit flag_Negative_number。负数标志uchar code table = tempreture:。提/* 一毫秒定时 */void delay_ms(uint

20、z(uint x, yofor (x=Zo x0o xfor (y=110o y0o y。)/*延时子函数*/void delay(uint numwhile (num- 。/*液晶写命令*/void (uchar com(rs=0olcden=0oP0=COIDodelay_ms (1。lcden=lodelay_ms(l0lcden=0o)/*液晶写数据*/void write_lcd_date (uchar date(rs=lolcden=0oP0=datedelay_ms(lolcden=ldelay_ms(lolcden=0o)/*液晶初始化程序*/void Icd.init(wri

21、te_lcd_com(0x38o write_lcd_com(0x0c。write_lcd_com(0x06。write_lcd_com(0x01o/*DS18b20 温度传感器函数*/uchar x=0o DATA = lo delay (10o DATA = 0o delay(80o DATA = lovoid Init_DS18B20 (void传感器初始化/DQ复位稍做延时单片机将DQ拉低精确延时 大于480us/450拉高总线delay(20ox二DATA。稍做延时后如果x=0则初始化成功x=l则初始化失败delay(30o /*温度传感器读一个字节*/ ReadOneChar(vo

22、id (uchar i=0o uchar dat = Oo for (i=8o i0o i DATA = Oo /给脉冲信号 dat=loDATA = lo /给脉冲信号 if(DATA dat|=0x80o delay (8o ) return (dato )/*温度传感器写一个字节*/ void WriteOneChar(uchar dat (uchar i=0for (i=8o i0o i DATA = OoDATA = dat&OxOlo delay(10o DATA = lo dat=lo delay(8o /*读取温度传感器温度*/ int ReadTemperature(void

23、 (uchar a=0uchar b=0oint t=0ofloat tt=OoInit_DS18B20(。WriteOneChar (OxCOoWriteOneChar(0x44o InitJ)S18B20(oWriteOneChar (OxCOoWriteOneChar (OxBE跳过读序号列号的操作启动温度转换跳过读序号列号的操作读取温度寄存器等共可读9个寄存器)前两个就是温度a=ReadOneChar ( o 低位 b=ReadOneChar ( c /高位t=8o t=t|aoif(b&0x80t=,Vt+loflag_Negative_number =1。)else flag_Ne

24、gative_number =0。 tt=t*O. 0625ot= tt*10+0. 5oreturn(to/*液晶显示温度*/void dis_D18B20(void(int tempotemp=ReadTemperature ( 读温度bai_18b20=temp%1000/100o 显示十位shi_18b20=temp%100/10 显示个位ge_18b20=temp%10 o 显示十分位if (flag_Negative_number 负数if (bai_18b20=0十位为0,则不显示十位(write_lcd_com (0x80+0x40。write_lcd_date(0x2Dowr

25、ite.lcd.date(0x30+shi_18b20 owrite_lcd_date(0x30+ge_18b20 o write_lcd_date(OxDFowrite.lcd.date(0x43。)elsewrite_lcd_com(0x80+0x40)。write_lcd_date(0x2Dowrite_lcd_date(0x30+bai_18b20 owrite_lcd_date(0x30+shi_18b20 owrite_lcd_date(0xDF。write_lcd_date(0x43o)else正数if(bai.l8b20=0/十位为0,则不显示十位(write_lc d_c o

26、m (0x80+0x40。write_lcd_date(0x30+shi_18b20owrite_lcd_date(0x2Eowrite.lcd.date(0x30+ge_l8b20。write_lcd_date(OxDF。write_lcd_date(0x43oelse(write_lcd_com(0x80+0x40。write.lcd.date(0x30+bai_18b20owrite_lcd_date(0x30+shi_18b20 owrite_lcd_date(0x2E。write.lcd.date(0x30+ge.l8b20owrite_lcd_date(0xDF。write_lcd

27、_date(0x43。)void main(Icd.init(oTM0D=0x0KTH0= (65536-50000/256 oTLO=(65536-50000%256。TRO=loETO=loEA=K 开总中断writ jlcd_com (0x80ofor (nunFOo numwrite_lcd_date (table num/delay jns(10o)/ dis_D18B20(。while(1if(FLAG_DIS=l(FLAG_DIS=O。di s_D18B20 (0 读温度并显示 ) timerO( interrupt 1 / (uchar countoTHO= (65536-50000/256 oTLO=(65536-50000%256。 count+if (count=60每三秒钟读一次温度传感器温度 FLAGJ)IS=lo count=0o )

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

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1