找回密码
 立即注册

QQ登录

只需一步,快速开始

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

我的DS18B20序列号读取 单片机代码

[复制链接]
跳转到指定楼层
楼主
ID:790949 发表于 2020-6-27 14:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include <reg51.h>
  2. #include <intrins.h>
  3. #define uchar unsigned  char
  4. #define uint unsigned  int

  5. sbit   DQ=P3^7;
  6. bdata  uchar dat;   
  7. sbit   dat0=dat^0;               
  8. sbit   dat7=dat^7;               
  9. sbit   RS = P2^6;
  10. sbit   RW = P2^5;
  11. sbit   E = P2^7;

  12. sfr  LCD=0x80;
  13. sbit  BF=LCD^7;
  14. void  delay15(uchar n)
  15. { do {
  16.         _nop_();
  17.         _nop_();
  18.         _nop_();
  19.         _nop_();
  20.         _nop_();
  21.         _nop_();
  22.         _nop_();
  23.         _nop_();
  24.         _nop_();
  25.         _nop_();
  26.         _nop_();
  27.         _nop_();        
  28.                     n--;
  29.         }while(n);
  30. }


  31. bit reset(void)         
  32. {
  33.          bit err;
  34.    DQ=0;                        
  35.    delay15(40);               
  36.    DQ=1;                        
  37.    delay15(4);        
  38.    err=DQ;                        
  39.    delay15(18);        
  40.    return(err);
  41. }

  42. void wrbyte(uchar d)        
  43. {
  44.          uchar i;
  45.    dat=d;         
  46.    for(i=8;i>0;i--)           
  47.    {
  48.                  DQ=0;                           
  49.      delay15(1);
  50.            DQ=dat0;                        
  51.            dat=dat>>1;               
  52.            delay15(1);               
  53.      DQ=1;                           
  54.     }
  55. }

  56. uchar  rdbyte(void)        
  57. {  
  58.                 uchar i;
  59.     dat=0;                                 
  60.     for(i=8;i>0;i--)         
  61.     {  
  62.                           dat=dat>>1;   
  63.                                 DQ=0;         
  64.                                 _nop_();
  65.         DQ=1;                           
  66.         delay15(1);     
  67.         dat7=DQ;            
  68.         delay15(4);  
  69.       }
  70.      return(dat);  
  71. }   

  72. void readid(uchar id[])
  73. {
  74.         uchar n;
  75.         reset();
  76.         wrbyte(0x33);
  77.         for(n=0;n<=8;n++)
  78.         {
  79.                 id[n]=rdbyte();
  80.         }
  81. }

  82. void lcd_cmd(uchar cmd)
  83. {
  84.         LCD=cmd;
  85.         RS=0;
  86.         RW=0;
  87.         E=1;
  88.         _nop_();
  89.         E=0;
  90.         while(1)
  91.         {
  92.                 LCD=0xff;
  93.                 RS=0;
  94.                 RW=1;
  95.                 E=0;
  96.                 _nop_();
  97.                 E = 1;
  98.                 if(BF==0)break;
  99.         }
  100.         
  101. }
  102. void lcd_dat(uchar dat)
  103. {
  104.         LCD =dat;
  105.         RS = 1;
  106.         RW = 0;
  107.         E = 1;
  108.         _nop_();
  109.         E = 0;
  110.         while(1)
  111.         {
  112.                 LCD = 0xff;
  113.                 RS = 0;
  114.                 RW = 1;
  115.                 E = 0;
  116.                 _nop_();
  117.                 E = 1;
  118.                 if(BF==0)break;
  119.                 dat=LCD;
  120.         }
  121.         
  122. }
  123. void main()
  124. {
  125.         uchar *p;
  126.         uint i;
  127.         uchar str[8];
  128.         uchar id1[8]={0,0,0,0,0,0,0,0};
  129.         readid(id1);
  130.         
  131.         lcd_cmd(0x01);
  132.   lcd_cmd(0x3c);
  133.         lcd_cmd(0x0c);
  134.         for(i=0;i<8;i++)
  135.          {
  136.                 if((id1[i]>>4)>=10)
  137.                 str[2*i]=(id1[i]>>4)+0x37;
  138.                 else
  139.                         str[2*i]=(id1[i]>>4)+0x30;
  140.                 if((id1[i]&0x0f)>=10)
  141.                 str[2*i+1]=(id1[i]&0x0f)+0x37;
  142.            else
  143.                          str[2*i+1]=(id1[i]&0x0f)+0x30;
  144.          }
  145.         
  146.           lcd_cmd(0x82);        
  147.            p=str;
  148.                 for(i=1;i<9;i++)
  149.     {
  150.                         lcd_dat(*p++);
  151.                    if (i%2==0)
  152.                          { lcd_dat(0x20);}
  153.                  }

  154.            lcd_cmd(0xc2);
  155.                  p=str+8;
  156.                 for(i=1;i<9;i++)
  157.                 {
  158.                         lcd_dat(*p++);
  159.                         if (i%2==0)
  160.                   lcd_dat(0x20);
  161.                            
  162.                 }
  163.                 while(1);
  164. }
复制代码

DS18B20序列号读取.zip

47.14 KB, 下载次数: 15, 下载积分: 黑币 -5

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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