找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3646|回复: 2
打印 上一主题 下一主题
收起左侧

单片机P0口接LCD1602显示环境温度,温度检测通过DS18B20实现。

[复制链接]
跳转到指定楼层
楼主
下面是模块化程序:需要私我。


keilC51代码:
  1. #include <reg51.h>
  2. #include<intrins.h>
  3. #include "18B20.h"
  4. #include "delay.h"
  5. #include "LCD1602.h"
  6. float TM;            //读一个温度时的温度转换中间     
  7. int tvalue;          //温度值
  8. unsigned char tflag;    //温度正负标志
  9. unsigned char data disdata[5];      //温度字型显示中间变量

  10. void delay_18B20(unsigned int i)//延时1微秒
  11. {
  12.          while(i--);
  13. }

  14. void ds1820rst()     /*ds1820复位*/
  15. {  
  16.          unsigned char x=0;
  17.          DQ = 1;          //DQ复位
  18.          delay_18B20(4);  //延时
  19.          DQ = 0;          //DQ拉低
  20.          delay_18B20(80); //精确延时大于480us   540us
  21.          DQ = 1;          //拉高总线   15-60us
  22.          delay_18B20(20);
  23.    x=DQ;          //读总线状态   为0复位成功,1复位不成功
  24.    delay(30);
  25.    DQ=1;      //释放总线         
  26. }  

  27. unsigned char ds1820rd()  /*读数据*/
  28.   {
  29.                 unsigned char i=0;
  30.           unsigned char dat = 0;
  31.           for (i=8;i>0;i--)
  32.           {   
  33.                         DQ = 0; //给脉冲信号
  34.                   dat>>=1;
  35.                   DQ = 1; //给脉冲信号
  36.                   if(DQ)
  37.                   dat|=0x80;     //dat和0x80做“或”运算(最高位1,其他位保持不变)
  38.                   delay_18B20(10);
  39.           }
  40.            return(dat);
  41.   }

  42. void ds1820wr(unsigned char wdata) /*写数据*/
  43. {
  44.                 unsigned char i=0;
  45.     for (i=8; i>0; i--)
  46.     {
  47.                         DQ = 0;
  48.       DQ = wdata&0x01;      //
  49.       delay_18B20(10);
  50.       DQ = 1;
  51.       wdata>>=1;
  52.     }
  53. }
  54.         
  55. read_temp()/*读取温度值并转换*/
  56. {
  57.         unsigned char a,b;
  58.   ds1820rst();   
  59.   ds1820wr(0xcc);//*跳过读序列号*/
  60.   ds1820wr(0x44);//*启动温度转换*/
  61.   ds1820rst();   
  62.   ds1820wr(0xcc);//*跳过读序列号*/
  63.   ds1820wr(0xbe);//*读取温度*/
  64.   a=ds1820rd();
  65.   b=ds1820rd();
  66.   tvalue=b;
  67.   tvalue<<=8;
  68.   tvalue=tvalue|a;
  69.         TM=tvalue*0.625;
  70.         tvalue=TM*1+0.5;
  71.   /*
  72.     if(tvalue<0x0FFF)
  73.     tflag=0;
  74.     else
  75.    {tvalue=~tvalue+1;
  76.          tflag=1;
  77.    }
  78.     tvalue=tvalue*(0.425);//温度值扩大10倍,精确到1位小数  */
  79.         return(tvalue);        
  80.   }

  81. void ds1820disp()//温度值显示
  82.         {
  83.                 unsigned char flagdat;
  84.           disdata[0]=tvalue/1000+0x30;//百位数
  85.     disdata[1]=tvalue%1000/100+0x30;//十位数
  86.     disdata[2]=tvalue%100/10+0x30;//个位数
  87.     disdata[3]=tvalue%10+0x30;//小数位
  88.    
  89.     if(tflag==0)
  90.             flagdat=0x20;//正温度不显示符号
  91.     else
  92.        flagdat=0x2d;//负温度显示负号:-

  93.     if(disdata[0]==0x30)
  94.           {disdata[0]=0x20;//如果百位为0,不显示
  95.                 if(disdata[1]==0x30)
  96.                 {disdata[1]=0x20;//如果百位为0,十位为0也不显示
  97.                 }
  98.                 }

  99.            write_com(0x80+0x40);
  100.            write_date(flagdat);//显示符号位
  101.            write_com(0x80+0x41);
  102.            write_date(disdata[0]);//显示百位
  103.            write_com(0x80+0x42);
  104.            write_date(disdata[1]);//显示十位         
  105.            write_com(0x80+0x43);
  106.            write_date(disdata[2]);//显示个位         
  107.            write_com(0x80+0x44);
  108.            write_date(0x2e);//显示小数点         
  109.            write_com(0x80+0x45);
  110.            write_date(disdata[3]);//显示小数位
  111.            write_com(0x80+0x46);
  112.            write_date('C');
  113.    }
复制代码

下载:http://www.51hei.com/bbs/dpj-143026-1.html

新手,大佬误喷。

评分

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

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:524762 发表于 2019-4-29 21:10 | 只看该作者
为什么我的运行有错呢
回复

使用道具 举报

板凳
ID:118488 发表于 2021-7-30 13:46 | 只看该作者
xiexie,xuexi~~~~~~~~~~
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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