基于AT89S52单片机的数字温度计设计

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

基于AT89S52单片机的数字温度计设计一引言在生活和生产中,经常要用到一些测温设备,但是传统的测温设备具有制作成本高、硬件电、和软件设计复杂等缺点。基于AT89S52单片机的数字温度计具有制作简单、成本低、读数方便、测温范围广和测温准确等优点,应用前景广阔。二项目要求基于AT89S52单片机的数字温度计设计具体要求如下:(1)温度值用LED显示。(2)围为-30℃~100℃,且测量误差不得大于±0.5℃。(3)成本的体积、质量要尽可能小。三系统设计1框图设计根据设计要求分析,基于AT89S52单片机的数字温度计设计由AT89S52单片机控制器、电源、显示电路、温度传感器、复位电路和时钟电路组成,系统框图如图1所示。电源给整个电路供电,显示电路显示温度值,时钟电路为AT89S52提供时钟频率。传感器采用美国DALLAS半导体公司生产的一种智能温度传感器DS18B20,其测温范围为-55~125℃,最高分辨率可达0.0625℃,完全符合设计要求。图一基于AT89S52单片机的数字温度计系统框图2知识点本项目需要通过学习和查阅资料,掌握和了解如下知识:+5V电源原理及设计。电源复位电路时钟电路AT89S52控制器显示电路DS18B20单片机复位电路工作原理及设计。单片机晶振电路工作原理及设计。按键电路的设计。数码管的特性及使用。DS18B20的特性及使用。74LS07的特性及使用。AT89S52单片机引脚。单片机C语言程序设计。四硬件设计1电路原理图控制器使用单片机AT89S52,测温传感器使用DS18B20,用4位共阳极LED数码管以动态扫描法实现温度显示,电路图可见仿真图所示。2元件清单基于AT89S52单片机的数字温度计元件清单如表1所示。表1基于AT89S52单片机的数字温度计元件清单元件名称型号数量∕个用途单片机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之内测量一次被测温度,其程序流程图如图3所示。读出温度子程序的主要功能是读出RAM中的9字节,在读出时需进行CRC校验,校验有错时不进行温度数据的改写,其程序流程图如图4所示。温度转换命令子程序主要是发温度转换开始命令,采用12位分辨率转换时间约为750ms。程序设计中采用1s显示程序延时等待转换的完成。计算温度子程序将RAM中读取值进行BCD码地转换运算,并进行温度值正负的判定,显示数据刷新子程序主要是对显示缓冲器中的显示数据进行刷新操作,当最高显示位为0时将符号显示位移入下一位。2程序清单基于AT89S52单片机的数字温度计程序清单如下:#includereg51.h#includeintrins.h//延时函数用#defineDisdataP1//段码输出口#definediscanP3//扫描口#defineucharunsignedchar#defineuintunsignedint初始化调用显示子程序1S到?读出温度值温度计算处理显示数据刷新发温度转换开始命令初次上电NYYN发DS18B20复位命令发跳过ROM命令发读取温度命令读取操作,CRC校验9字节完?CRC校验正?移入温度暂存器结束图3主程序流程图图4读温度流程图sbitDQ=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段码表0123456789不亮-*/ucharcodescan_con[4]={0xfe,0xfd,0xfb,0xf7};//列扫描控制字uchardatatemp_data[2]={0x00,0x00};//读出温度暂放uchardatadisplay[5]={0x00,0x00,0x00,0x00,0x00};//显示单元数据,共4个数据,一个运算暂存用voiddelay(uintt)//11微秒延时函数{for(;t0;t--);}scan()//显示扫描函数{chark;for(k=0;k4;k++)//四位LED扫描控制{Disdata=dis_7[display[k]];if(k==1){DIN=0;}discan=~scan_con[k];delay(90);discan=0x00;}}ow_reset(void)//18B20复位函数{charpresence=1;while(presence){while(presence){DQ=1;_nop_();_nop_();DQ=0;delay(50);//550usDQ=1;delay(6);//66uspresence=DQ;//presence=0继续下一步}delay(45);//延时500uspresence=~DQ;}DQ=1;}voidwrite_byte(ucharval)//18B20写命令函数{uchari;for(i=8;i0;i--)//{DQ=1;_nop_();_nop_();DQ=0;_nop_();_nop_();_nop_();_nop_();_nop_();//5usDQ=val&0x01;//最低位移出delay(6);//66usval=val/2;//右移一位}DQ=1;delay(1);}ucharread_byte(void)//从总线上读取一个字节{uchari;ucharvalue=0;for(i=8;i0;i--){DQ=1;_nop_();_nop_();value=1;DQ=0;//_nop_();_nop_();_nop_();_nop_();//4usDQ=1;_nop_();_nop_();_nop_();_nop_();//4usif(DQ)value|=0x80;delay(6);//66us}DQ=1;return(value);}read_temp()//读出温度函数{ow_reset();//总线复位write_byte(0xCC);//发SkipROM命令write_byte(0xBE);//发读命令temp_data[0]=read_byte();//温度低8位temp_data[1]=read_byte();//温度高8位ow_reset();write_byte(0xCC);//SkipROMwrite_byte(0x44);//发转换命令}work_temp()//温度数据处理函数{ucharn=0;//if(temp_data[1]127){temp_data[1]=(256-temp_data[1]);temp_data[0]=(256-temp_data[0]);n=1;}//负温度求补码display[4]=temp_data[0]&0x0f;display[0]=ditab[display[4]];display[4]=((temp_data[0]&0xf0)4)|((temp_data[1]&0x0f)4);//display[3]=display[4]/100;display[1]=display[4]%100;display[2]=display[1]/10;display[1]=display[1]%10;if(!display[3]){display[3]=0x0A;if(!display[2]){display[2]=0x0A;}}//最高位为0时都不显示if(n){display[3]=0x0B;}//负温度时最高位显示-}main()//主函数{Disdata=0xff;//初始化端口discan=0xff;for(h=0;h4;h++){display[h]=8;}//开机显示8888ow_reset();//开机先转换一次write_byte(0xCC);//SkipROMwrite_byte(0x44);//发转换命令for(h=0;h500;h++){scan();}//开机显示88882秒while(1){read_temp();//读出18B20温度数据work_temp();//处理温度数据for(h=0;h500;h++){scan();}//显示温度值2秒}}六系统仿真及调试1软件调试C210uf9.0DQ2VCC3GND1U2DS18B20R144.7kR3510R2510R4510R5510R6510R7510R8510R9510R106.8kXTAL218XTAL119ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1AT89S5212MHZC110pC310p12U3:A740734U3:B740756U3:C740798U3:D7407R110kR1110kR1210kR1310k图5仿真图1C210uf14.0DQ2VCC3GND1U2DS18B20R144.7kR3510R2510R4510R5510R6510R7510R8510R9510R106.8kXTAL218XTAL119ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1AT89S5212MHZC110pC310p12U3:A740734U3:B740756U3:C740798U3:D7407R110kR1110kR1210kR1310k图6仿真图2

1 / 7
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功