资源描述:
《基于at89s52单片机的数字温度计设计》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、基于AT89S52单片机的数字温度计设计一引言在生活和生产中,经常要用到一些测温设备,但是传统的测温设备具有制作成本高、硬件电、和软件设计复杂等缺点。基于AT89S52单片机的数字温度计具有制作简单、成本低、读数方便、测温范围广和测温准确等优点,应用前景广阔。二项目要求基于AT89S52单片机的数字温度计设计具体要求如下:(1)温度值用LED显示。(2)围为-30℃~100℃,且测量误差不得大于±0.5℃。(3)成本的体积、质量要尽可能小。三系统设计1框图设计根据设计要求分析,基于AT89S52单片机的数字温度计
2、设计由AT89S52单片机控制器、电源、显示电路、温度传感器、复位电路和时钟电路组成,系统框图如图1所示。电源给整个电路供电,显示电路显示温度值,时钟电路为AT89S52提供时钟频率。传感器采用美国DALLAS半导体公司生产的一种智能温度传感器DS18B20,其测温范围为-55~125℃,最高分辨率可达0.0625℃,完全符合设计要求。电源复位电路时钟电路AT89S52控制器显示电路DS18B20图一基于AT89S52单片机的数字温度计系统框图2知识点本项目需要通过学习和查阅资料,掌握和了解如下知识:l+5V电源
3、原理及设计。l单片机复位电路工作原理及设计。l单片机晶振电路工作原理及设计。l按键电路的设计。l数码管的特性及使用。lDS18B20的特性及使用。l74LS07的特性及使用。lAT89S52单片机引脚。l单片机C语言程序设计。四硬件设计1电路原理图控制器使用单片机AT89S52,测温传感器使用DS18B20,用4位共阳极LED数码管以动态扫描法实现温度显示,电路图可见仿真图所示。2元件清单基于AT89S52单片机的数字温度计元件清单如表1所示。表1基于AT89S52单片机的数字温度计元件清单元件名称型号数量∕个用
4、途单片机AT89S521控制核心晶振12MHZ1晶振电路电容30Pf2晶振电路电解电容10μF∕10V1复位电路电阻1KΩ5复位电路上拉电阻集成块74LS071显示驱动集成块DS18B201显示驱动集成块DS18B201测温电路电阻4.7KΩ1复位电路按键+5V∕0.5A1复位电路电源4位1提供+5V七段4位1显示电路数码管电阻4.7KΩ1测温电路五软件设计1程序流程图主程序的主要功能是负责温度的实时显示、读出并处理DS18B20测量的当前温度值,温度测试每1S进行一次。这样可以在1S之内测量一次被测温度,其程序
5、流程图如图3所示。读出温度子程序的主要功能是读出RAM中的9字节,在读出时需进行CRC校验,校验有错时不进行温度数据的改写,其程序流程图如图4所示。初始化调用显示子程序1S到?读出温度值温度计算处理显示数据刷新发温度转换开始命令初次上电NYYN发DS18B20复位命令发跳过ROM命令发读取温度命令读取操作,CRC校验9字节完?CRC校验正?移入温度暂存器结束图3主程序流程图图4读温度流程图温度转换命令子程序主要是发温度转换开始命令,采用12位分辨率转换时间约为750ms。程序设计中采用1s显示程序延时等待转换的完
6、成。计算温度子程序将RAM中读取值进行BCD码地转换运算,并进行温度值正负的判定,显示数据刷新子程序主要是对显示缓冲器中的显示数据进行刷新操作,当最高显示位为0时将符号显示位移入下一位。2程序清单基于AT89S52单片机的数字温度计程序清单如下:#include"reg51.h"#include"intrins.h"//延时函数用#defineDisdataP1//段码输出口#definediscanP3//扫描口#defineucharunsignedchar#defineuintunsignedintsbit
7、DQ=P3^7;//温度输入口sbitDIN=P1^7;//LED小数点控制uinth;ucharcodeditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};//温度小数部分用查表法ucharcodedis_7[12]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff,0xbf};/*共阳LED段码表"0""1""2""3
8、""4""5""6""7""8""9""不亮""-"*/ucharcodescan_con[4]={0xfe,0xfd,0xfb,0xf7};//列扫描控制字uchardatatemp_data[2]={0x00,0x00};//读出温度暂放uchardatadisplay[5]={0x00,0x00,0x00,0x00,0x00};//显示单元数据,共4个数据,一个运算