基于51单片机数字温度计_第1页
基于51单片机数字温度计_第2页
基于51单片机数字温度计_第3页
基于51单片机数字温度计_第4页
基于51单片机数字温度计_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于AT89S51的温度计院系:电气与信息工程学院专业:班级:学生姓名:学号:日期:2012年11月11号第一部分设计要求:采用AT89C51单片机和LCD液晶显示器设计一个数字温度计,当外界温度变化时,显示屏上的温度值也随着变化。数字温度计的测温范围为-55C到125C之间。第二部分硬件原理框图:AT89C51单片机LCD液晶显示电路晶振振荡电路复位电路温度传感器采集电路电源电路硬件部分主要分为晶振振荡电路、复位电路、LCD液晶显示电路、DS18B20温度传感器采集电路、电源电路等部分组成。第三部分硬件原理图:硬件模块原理图:1、晶振振荡电路该电路是由两个电容和一个晶振组成,晶振产生基本的时

2、钟信号它给单片机供应时钟信号。2、复位电路复位的主要作用是把特别功能寄存器的数据刷新为默认数据,单片机在运算过程中由于搅乱等外界原因造成寄存器中数据凌乱不能够使其正常连续执行程序或产生的结果不正确时均需要复位,以使程序重新开始运行。3、LCD液晶显示电路经过温度传感器,将采集到的温度信息传给单片机,单片机办理后又将信息发给P0口,P0口与LCD的数据口相连接,液晶屏上会显示采集到的温度值。4、温度传感器采集电路单线数字温度传感器DS18B20测量温度范围为-55C+125C,-10+85C范围内,精度为0.5C。DS1822的精度较差为2C。DS18B20的管脚排列以下:DQ为数字信号输入/输

3、出端;GND为电源地;VDD为外接供电电源输入端(在寄生电源接线方式时接地)。依照DS18B20的通讯协议,主机控制DS18B20完成温度变换必定经过三个步骤:每一次读写从前都要对DS18B20进行复位,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。复位要求主CPU将数据线下拉500微秒,尔后释放,DS18B20收到信号后等待1660微秒左右,后发出60240微秒的存在低脉冲,主CPU收到此信号表示复位成功。5、电源电路设计中利用桥式整流和电容滤波以及7805集成稳压来输出+5V电压,以满足AT89C51、LCD1602、DS18B20等器件的工作需

4、求,原理以下:第四部分程序流程图发温度变换开始命令结束图2温度变换命令子程序流程图N图1主程序流程图第五部分总结:在本次设计的过程中,我查阅了好多文件资料,从中学到了好多有关系统开发和程序调试方面等的知识。在软件开发过程中掌握了一些技术难题的解决方法和技巧,牢固和加深了所学知识的理解,能够把所学的知识与实践相结合,培养了认真慎重的学习态度,为今后开发软件积累了大量的经验,提高了解析问题和解决问题的能力。但是由于认识上的片面和不足,各方面的条件影响也好多,本设计还有待进一步的完满和优化,这些在今后的学习中要侧重积累。第六部分主要程序#include#include#defineuintunsig

5、nedint#defineucharunsignedchar#definedelayNOP()_nop_();_nop_();_nop_();_nop_();/_nop_()为一个机器周期sbitDQ=P33;sbitLCD_RS=P20;sbitLCD_RW=P21;sbitLCD_EN=P22;ucharcodeTemp_Disp_Title1=NowTemperature:;/液晶第一行显示的字符ucharTemp_Display_Title2=TEMP:;/第二行前半部分显示的字符ucharcodeTemperature_Char8=0 x0c,0 x12,0 x12,0 x0c,0

6、x00,0 x00,0 x00,0 x00;ucharcodedf_Table=0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9;ucharCurrentT=0;ucharTL,TH;ucharDisplay_Digit=0,0,0,0;bitDS18B20_IS_OK=1;voidDelayXus(uintx)uchari;while(x-)for(i=0;i200;i+);bitLCD_Busy_Check()/对LCD进行读写状态检测bitresult;LCD_RS=0;LCD_RW=1;LCD_EN=1;delayNOP();result=(bit)(P0&0 x80);

7、LCD_EN=0;returnresult;voidWrite_LCD_Command(ucharcmd)/LCD写指令函数while(LCD_Busy_Check();/当LCD_Busy_Check为1时LCD_RS=0;LCD_RW=0;LCD_EN=0;_nop_();_nop_();P0=cmd;delayNOP();LCD_EN=1;delayNOP();LCD_EN=0;voidWrite_LCD_Data(uchardat)/LCD写数据函数while(LCD_Busy_Check();LCD_RS=1;LCD_RW=0;LCD_EN=0;P0=dat;delayNOP();L

8、CD_EN=1;delayNOP();LCD_EN=0;voidLCD_Initialise()/LCD初始化程序Write_LCD_Command(0 x01);/显示清屏DelayXus(5);Write_LCD_Command(0 x38);/显示模式设置DelayXus(5);Write_LCD_Command(0 x0c);/不显示光标DelayXus(5);Write_LCD_Command(0 x06);/当写一个字符时整屏显示不搬动DelayXus(5);voidSet_LCD_POS(ucharpos)/设置LCD地址Write_LCD_Command(pos|0 x80);

9、voidDelay(uintx)while(-x);ucharInit_DS18B20()/初始化温度传感器,依照时序图操作命令ucharstatus;DQ=1;/将数据线电平拉高Delay(8);/延时约8us再将DQ=0;Delay(90);/延时360usDQ拉低DQ=1;/Delay(8);/释放数据线,将数据线拉高延时32usDQ=1;Delay(60);returnstatus;/返回检测ucharReadOneByte()/读时序uchari;uchardat=0;/储藏读出的一个字节数据DQ=1;/先将数据线拉高_nop_();/等待一个机器周期for(i=0;i=1;DQ=1

10、;_nop_();_nop_();if(DQ)dat|=0X80;Delay(30);DQ=1;returndat;voidWriteOneByte(uchardat)/写时序操作uchari;for(i=0;i=1;voidRead_Temperature()/读取温度函数if(Init_DS18B20()=1)/若是Init_DS18B20()=1,需要连续检测DS18B20_IS_OK=0;else/若是Init_DS18B20()!=1时WriteOneByte(0 xcc);/WriteOneByte(0 x44);/跳过读序列号操作启动温度装换Init_DS18B20();/初始化

11、DS18B20WriteOneByte(0 xcc);/跳过读序列号操作WriteOneByte(0 xbe);/读取温度寄存器,前两个分别是温度的高位和低位TL=ReadOneByte();TH=ReadOneByte();DS18B20_IS_OK=1;voidDisplay_Temperature()/显示温度函数uchari;uchart=150,ng=0;if(TH&0 xf8)=0 xf8)/符号位是5个1,此时为负温度TL=TL;TH=TH+1;if(TL=0 x00)TH+;ng=1;Display_Digit0=df_TableTL&0 x0f;CurrentT=(TL&0

12、xf0)4)|(TH&0 x07)4);Display_Digit3=CurrentT/100;Display_Digit2=CurrentT%100/10;Display_Digit1=CurrentT%10;Temp_Display_Title211=Display_Digit0+0;Temp_Display_Title210=.;Temp_Display_Title29Temp_Display_Title28Temp_Display_Title27if(Display_Digit3=0)=Display_Digit1+0;=Display_Digit2+0;=Display_Digit3

13、+0;Temp_Display_Title27=;if(Display_Digit2=0&Display_Digit3=0)Temp_Display_Title28=;if(ng)if(Temp_Display_Title28Temp_Display_Title28elseif(Temp_Display_Title27Temp_Display_Title27=)=-;=)=-;elseTemp_Display_Title26=-;Set_LCD_POS(0 x00);for(i=0;i16;i+)Write_LCD_Data(Temp_Disp_Title1i);Set_LCD_POS(0 x40);for(i=0;i16;i+)Write_LCD_Data(Temp_Display_Title2i);Set_LCD_POS(0 x4d);Wri

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论