单片机课程设计报告-数字温度计_第1页
单片机课程设计报告-数字温度计_第2页
单片机课程设计报告-数字温度计_第3页
单片机课程设计报告-数字温度计_第4页
单片机课程设计报告-数字温度计_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

1、惠州学院HUIZHOU UNIVERSITY 单片机课程设计设计题目 系 别 专 业 班 级 学 号 学生姓名 指导教师 完成时间 年 月目录 一课题设计任务与要求。 - 二对于课题的总体构想。 - 三DS18B20温度传感器简介。 - 四系统总仿真电路。 - 五总程序。 - 六心得体会。 - 七参考文献。-一、设计任务与要求设计任务:利用数字温度传感器DS18B20与单片机结合来测量温度。设计要求:利用数字温度传感器DS18B20测量温度信号,计算后在LED数码管上显示相应的温度值。其温度测量范围为-55125,精确到0.5。本温度计属于多功能温度计,可以设置上下报警温度,当温度不在设置范围

2、内时,可以报警。数字温度计所测量的温度采用数字显示,控制器使用单片机89C51,测温传感器使用DS18B20,用3位共阳极LED数码管以串口传送数据,实现温度显示。从温度传感器DS18B20可以很容易直接读取被测温度值,进行转换即满足设计要求。DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现912位的数字读数方式。 二对课题的总体构想 采用数字温度芯片DS18B20 测量温度,输出信号全数字化,利用1602液晶显示屏实时显示温度。其中DS18B20 的最大特点之一采

3、用了单总线的数据传输,由数字温度计DS18B20和微控制器STC89C52构成的温度测量装置,它直接输出温度的数字信号,可直接与计算机连接。 采用51 单片机控制,软件编程的自由度大,可通过编程实现各种各样的算术算法和逻辑控制,而且体积小,硬件实现简单,安装方便。既可以单独对多DS18B20控制工作,还可以与PC 机通信上传数据,另外STC89C52 在工业控制上也有着广泛的应用,编程技术及外围功能电路的配合使用都很成熟。三、DS18B20简介DS18B20的性能如下: 独特的单线接口仅需要一个端口引脚进行通信。 多个DS18B20可以并联在串行传输的数据线上,实现多点组网功能。 无须外部器件

4、。 可通过数据线供电,电压范围为3.05.5V。 零待机功耗。 温度以9或12位的数字读数方式。 用户可定义报警设置。 报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件。 负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。 DS18B20采用3引脚PR-35封装或8引脚SOIC封装。四、系统仿真电路图(Proteus)六、总程序/* */#include #include /#include1602LCD_Module.h#include 18B20.h#define uint unsigned int#define uchar unsigned char#def

5、ine delayNOP() _nop_();_nop_();_nop_();_nop_();sbit light =P10;sbit DQ = P37;/7void DisplayStr(char line,location,char code *str);uchar code Temp_Disp_Title=Current Temp : ;uchar Current_Temp_Display_Buffer=TEMP: ; int xiaxian=20 ; int shangxian=35;uchar code Temperature_Char8 = 0x0c,0x12,0x12,0x0c,

6、0x00,0x00,0x00,0x00;/温度小数对照表uchar code df_Table= 0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9;uchar CurrentT = 0;uchar Temp_Value=0x00,0x00;uchar Display_Digit=0,0,0,0;bit DS18B20_IS_OK = 1;/=/=#define uchar unsigned char#define uint unsigned intsbit RS=P25;sbit RW=P26;/读写控制sbit E=P27; /使能sbit BF=P07; /D7为LCD忙/闲

7、标口,BF为标志位,BF=1为忙,BAF=0为闲void Delayms(uint ms) uchar i;while(ms-) for(i=0;i120;i+);/使用void LCDCheckV1()会死循环,导致proteus仿真失败/*void LCDCheckV1() /忙检查函数 E=0; /禁止读写功能doBF=1; /设置BF为输入RS=0;RW=1;/读取指令 E=1; /使能(读取BF和AC地址计数器)while(BF=1); /BF=1,忙 */uchar LCDCheckV2()uchar LCD_Status;RS = 0;RW = 1;E = 1;Delayms(6

8、);/这个延时必须要有!如果是STC89或STC90系列单片机,延时Delayms(1)即可;如果是STC12系列单片机,延时要不小于Delayms(5); LCD_Status = BF;E = 0;return LCD_Status; void LCDWriteCmd(char cmd)/写指令函数while(LCDCheckV2();RS=0; /RW=0; /写E=1; /使能P0=cmd;E=0; void LCDWriteChar(char character) /写数据函数 while(LCDCheckV2();RS=1;RW=0; /E=1;P0=character;E=0;/

9、while(LCDCheckV2();void DisplayChar(char line,location,character)/将字符显示在特定位置 while(LCDCheckV2();RS=0;RW=0; /写指令E=1;if(line=0) P0=0x80+location; /在第0行显示第location列显示。相当于LCDWriteCmd(0x80+location-1);0x08是第0列的地址if(line=1) P0=0x40|0xc0+location; /在第1行显示第location列显示。相当于LCDWriteCmd(0x40|0xc0+location-1);0x

10、40|0xc0是第0列的地址/为什么第一列地址不是0x90?与手册不符E=0;/while(LCDCheckV2();LCDWriteChar(character);/=/按指定位置显示一串字符void DisplayStr(char line,location,char code *str)/将字符显示在特定位置 int i;while(LCDCheckV2();RS=0;RW=0; /写指令E=1;if(line=0) P0=0x80+location; /在第0行显示第location列显示。相当于LCDWriteCmd(0x80+location);0x08是第0列的地址if(line

11、=1) P0=0x40|0xc0+location; /在第1行显示第location列显示。相当于LCDWriteCmd(0x40|0xc0+location);0x40|0xc0是第0列的地址/为什么第一列地址不是0x90?与手册不符E=0;/while(LCDCheckV2();for(i=0;i16;i+)LCDWriteChar(stri);/=void LCDInit() /初始化LCD LCDWriteCmd(0x30);LCDWriteCmd(0x30);/LCDWriteCmd(0x30); / 加上这两行代码可以兼容中英文LCD模块LCDWriteCmd(0x38); /设

12、置两行模式LCDWriteCmd(0x08); /显示关闭LCDWriteCmd(0x01); /清屏LCDWriteCmd(0x06); /字符后移LCDWriteCmd(0x0c); /显示开,及光标设置/=/=void DelayXus(unsigned int x) uchar i;while(x-) for(i=0;i200;i+);void Delay(unsigned int x) while(-x);uchar Init_DS18B20() / uchar status;DQ = 1;Delay(8);DQ = 0;Delay(90);DQ = 1;Delay(8);statu

13、s=DQ;/ Delay(100);DQ = 1;return status;uchar ReadOneByte() uchar i,dat=0;DQ = 1;_nop_();for(i=0;i= 1;DQ = 1;_nop_();_nop_();if(DQ)dat |= 0X80;Delay(30);DQ = 1;return dat;void WriteOneByte(uchar dat) uchar i;for(i=0;i= 1;void Read_Temperature() if(Init_DS18B20()=1) /如果DS18B20故障DS18B20_IS_OK=0;elseWri

14、teOneByte(0xcc); /跳过序列号WriteOneByte(0x44); /启动温度转换Init_DS18B20(); /WriteOneByte(0xcc); /跳过序列号WriteOneByte(0xbe); /读取温度寄存器Temp_Value0 = ReadOneByte(); /温度低8位Temp_Value1 = ReadOneByte(); /温度高8位DS18B20_IS_OK=1; /void Display_Temperature() uchar i;uchar t = 150, ng = 0;if(Temp_Value1&0xf8)=0xf8) /高5位全为1

15、 (0XF8)则为负数,为负数时取反加一(得到补码),并设置负标识 Temp_Value1 = Temp_Value1;Temp_Value0 = Temp_Value0+1;if(Temp_Value0=0x00)Temp_Value1+;ng = 1; /负数标志位为1,说明温度是负数Display_Digit0 = df_TableTemp_Value0&0x0f; /查表得到温度小数部分CurrentT = (Temp_Value0&0xf0)4) | (Temp_Value1&0x07)4); /温度整数部分/整数部分分解为3位待显示数字Display_Digit3 = Curren

16、tT/100;Display_Digit2 = CurrentT%100/10;Display_Digit1 = CurrentT%10;/刷新LCD显示缓冲Current_Temp_Display_Buffer11 = Display_Digit0 + 0;Current_Temp_Display_Buffer10 = .;Current_Temp_Display_Buffer9 = Display_Digit1 + 0;Current_Temp_Display_Buffer8 = Display_Digit2 + 0;Current_Temp_Display_Buffer7 = Displ

17、ay_Digit3 + 0;if(Display_Digit3 = 0) /高位为0时不显示Current_Temp_Display_Buffer7 = ;if(Display_Digit2 = 0&Display_Digit3=0)/高位且次位为0不显示Current_Temp_Display_Buffer8 = ;if(ng)/ng=1说明温度是负数,负数符号显示在恰当位置 if(Current_Temp_Display_Buffer8 = )Current_Temp_Display_Buffer8 = -;else if(Current_Temp_Display_Buffer7 = )C

18、urrent_Temp_Display_Buffer7 = -;else Current_Temp_Display_Buffer6 = -;LCDWriteCmd(0x80);/在第一行显示for(i=0;i16;i+) LCDWriteChar(Temp_Disp_Titlei);/delay(10);LCDWriteCmd(0x40|0xc0);/在第二行显示,这里面的地址竟然不能是0x90!为什么?for(i=0;ishangxian) light=1; if(wenduxiaxian) light=1;void main()LCDInit();Read_Temperature();Delay(50000);Delay(50000);/DisplayStr(0,1,abcd);while(1) Read_Temperature();if(DS18B20_IS_OK) Display_Te

温馨提示

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

评论

0/150

提交评论