找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3439|回复: 2
收起左侧

DS18B20测温1602液晶显示实验指导书下载

[复制链接]
ID:198608 发表于 2017-6-9 22:22 | 显示全部楼层 |阅读模式
实验指导书,喜欢的朋友带走

DS18B20温度传感器实验








学校:兰州职业技术学院

班级:   15应用电子  

学号:   201*334   

姓名:    梁*阳     



电子信息工程系

DS18B20温度传感器实验


实验目的

1.了解LCD1602工作原理和管脚功能;

2.学习使用LCD1602显示屏显示字库;

3.掌握LCD1602显示屏控制方法;

4.了解DS18B20温度传感器的工作原理与管脚功能;

5.学习DS18B20温度传感器的控制方法;

6.掌握DS18B20温度传感器实时测温驱动程序。

实验内容及步骤

  • 硬件设计
  • LCD1602引脚定义及介绍

1.001.jpg

1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。

1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。

1.002.jpg 市面上字符液晶大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。

1602采用标准的16脚接口,其中:

第1脚:GND为电源地

第2脚:VCC接5V电源正极

第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会 产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。

第4脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。

第5脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。

第6脚:E(或EN)端为使能(enable)端,高电平时读取信息,负跳变时执行指令。

第7~14脚:D0~D7为8位双向数据端。

第15~16脚:空脚或背灯电源。15脚背光正极,16脚背光负极。

特性:3.3V或5V工作电压,对比度可调内含复位电路提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能,有80字节显示数据存储器DDRAM内建有192个5X7点阵的字型的字符发生器CGROM8个可由用户自定义的5X7的字符发生器CGRAM


特征应用

微功耗、体积小、显示内容丰富、超薄轻巧,常用在袖珍式仪表和低功耗应用系统中。

  • DS18B20数字温度传感器引脚定义:

1.003.jpg

1.004.jpg 20170609221902.png


DS18B20数字温度传感器接线方便,封装成后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢

封装式,型号多种多样,有LTM8877,LTM8874等等。主要根据应用场合的不同而改变其外观。封装后的DS18B20可用于电缆沟测温,高炉水循环测温,锅炉测温,机房测温,农业大棚测温,洁净室测温,弹药库测温等各种非极限温度场合。耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。

①独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯② 、测温范围 -55℃~+125℃,固有测温误差(注意,不是分辨率,这里之前是错误的)1℃。

③支持多点组网功能,多个DS18B20可以并联在唯一的三线上,最多只能并联8个,实现多点测温,如果数量过多,会使供电电源电压过低,从而造成信号传输的不稳定。

④工作电源: 3.0~5.5V/DC (可以数据线寄生电源)

⑤ 在使用中不需要任何外围元件

⑥ 测量结果以9~12位数字量方式串行传送

⑦ 不锈钢保护管直径 Φ6

⑧ 适用于DN15~25, DN40~DN250各种介质工业管道和狭小空间设备测温

⑨ 标准安装螺纹 M10X1, M12X1.5, G1/2”任选

⑩ PVC电缆直接出线或德式球型接线盒出线,便于与其它电器设备连接。

3单片机最小系统的P0.0~P0.7接LCD1602显示屏D0~D7,LCD1602显示屏VDD接高电平,VSS,VEE接地;

4P3.5/P2.7/P3.4分别接LCD1602显示屏WS/RW/EN;

5P2.2接DS18B20芯片DQ引脚,硬件接线如下图所示。

1.005.jpg


  • 软件编程

DS18B20温度传感参考程序


  1. #include//头文件

  2. #define uchar unsigned char//声明无符号字符变量

  3. #define uint unsigned int//定义uint为无符号整型变量



  4. sbit DQ=P2^2;//ds18b20与单片机连接口

  5. sbit RS=P3^5;//RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器

  6. sbit RW=P2^7;//RW为读写信号线,高电平1时进行读操作,低电平0时进行写操作

  7. sbit EN=P3^4;//E(或EN)端为使能(enable)端,高电平1时读取信息,负跳变时执行指令





  8. unsigned char code str1[]={"15YYDZ-----LGY"};//自定义字符

  9. unsigned char code str2[]={"         /C"}; //显示温度值

  10. uchar data disdata[5];

  11. uint tvalue;//温度值

  12. uchar tflag;//温度正负标志



  13. /*************************lcd1602程序**************************/

  14. void delay1ms(unsigned int ms)//延时1毫秒(不够精确的)

  15. {unsigned int i,j;

  16.    for(i=0;i<ms;i++)

  17.     for(j=0;j<100;j++);

  18. }



  19. void wr_com(unsigned char com)//写指令//

  20. {

  21.   delay1ms(1);

  22.    RS=0;//低电平0时选择指令寄存器

  23.    RW=0;//低电平0时进行写操作

  24.    EN=0;

  25.    P2=com;

  26.    delay1ms(1);

  27.    EN=1;//高电平1时读取信息

  28.    delay1ms(1);

  29.    EN=0;

  30.   }



  31. void wr_dat(unsigned char dat)//写数据//

  32. {

  33.    delay1ms(1);;

  34.    RS=1;//低电平0时选择指令寄存器

  35.    RW=0;//低电平0时进行写操作

  36.    EN=0;

  37.    P2=dat;

  38.    delay1ms(1);

  39.    EN=1;//高电平1时读取信息

  40.    delay1ms(1);

  41.    EN=0;

  42. }



  43. void lcd_init()//初始化设置//

  44. {

  45. delay1ms(15);

  46.       wr_com(0x38);delay1ms(5);

  47.       wr_com(0x08);delay1ms(5);

  48.       wr_com(0x01);delay1ms(5);

  49.      wr_com(0x06);delay1ms(5);

  50.       wr_com(0x0c);delay1ms(5);

  51. }





  52. void display(unsigned char *p)//显示//

  53. {

  54. while(*p!='')

  55. {

  56. wr_dat(*p);

  57. p++;

  58. delay1ms(1);

  59. }

  60. }



  61.   init_play()//初始化显示

  62.   { lcd_init();

  63.     wr_com(0x80);

  64.               display(str1);

  65.               wr_com(0xc0);

  66.               display(str2);

  67.    }



  68. /**********ds18B20程序*************/

  69. void delay_18B20(unsigned int i)//延时1微秒

  70. {

  71.               while(i--);

  72. }



  73. void ds1820rst()/*ds1820复位*/

  74. {

  75. unsigned char x=0;

  76.               DQ = 1;          //DQ复位

  77.               delay_18B20(4);  //延时

  78.               DQ = 0;          //DQ拉低

  79.               delay_18B20(100); //精确延时大于480us

  80.               DQ = 1;          //拉高

  81.               delay_18B20(40);            

  82.    }



  83.    uchar ds1820rd()/*读数据*/

  84.   {

  85. unsigned char i=0;

  86. unsigned char dat = 0;

  87.               for (i=8;i>0;i--)

  88.               {   DQ = 0; //给脉冲信号

  89.                               dat>>=1;

  90.                               DQ = 1; //给脉冲信号

  91.                               if(DQ)

  92.                               dat|=0x80;

  93.                               delay_18B20(10);

  94.               }

  95.               return(dat);

  96.   }



  97.   void ds1820wr(uchar wdata)/*写数据*/

  98.   {unsigned char i=0;

  99.     for (i=8; i>0; i--)

  100.    {

  101. DQ = 0;

  102.      DQ = wdata&0x01;

  103.      delay_18B20(10);

  104.      DQ = 1;

  105.      wdata>>=1;

  106.    }

  107. }

  108. read_temp()/*读取温度值并转换*/

  109. {

  110. uchar a,b;

  111.   ds1820rst();   

  112.   ds1820wr(0xcc);//*跳过读序列号*/

  113.   ds1820wr(0x44);//*启动温度转换*/

  114.   ds1820rst();   

  115.   ds1820wr(0xcc);//*跳过读序列号*/

  116.   ds1820wr(0xbe);//*读取温度*/

  117.   a=ds1820rd();

  118.   b=ds1820rd();

  119.   tvalue=b;

  120.   tvalue<<=8;

  121.   tvalue=tvalue|a;

  122.     if(tvalue<0x0fff)

  123.    tflag=0;

  124.     else

  125.    {

  126. tvalue=~tvalue+1;

  127.               tflag=1;

  128.    }

  129.   tvalue=tvalue*(0.625);//温度值扩大10倍,精确到1位小数

  130.               return(tvalue);

  131.   }



  132. /*******************************************************************/

  133.    void ds1820disp()//温度值显示

  134.               {

  135. uchar flagdat;

  136. disdata[0]=tvalue/1000+0x30;//百位数

  137. disdata[1]=tvalue%1000/100+0x30;//十位数

  138. disdata[2]=tvalue%100/10+0x30;//个位数

  139. disdata[3]=tvalue%10+0x30;//小数位



  140. if(tflag==0)

  141.                   flagdat=0x20;//正温度不显示符号

  142.      else

  143.        flagdat=0x2d;//负温度显示负号:-



  144.      if(disdata[0]==0x30)

  145.                  {disdata[0]=0x20;//如果百位为0,不显示

  146. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码


  • 实验仿真结果图如下图所示

1.006.jpg


完整论文下载(word格式 可编辑):
1602温度显示.docx (390.13 KB, 下载次数: 22)



评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:245554 发表于 2017-12-5 15:18 | 显示全部楼层
下载不了,提示挡住了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表