问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

51单片机与DS18B20程序239

发布网友 发布时间:2023-10-13 13:58

我来回答

5个回答

热心网友 时间:2024-12-01 13:28

  #include <reg52.h>
  #include <intrins.h>

  #define uchar unsigned char
  #define uint unsigned int

  sbit DQ = P2^2; //数据口define interface
  sbit la = P2^6; //数码管段选
  sbit wela = P2^7; //数码管位选

  uint temp; //温度值 variable of temperature

  //不带小数点
  unsigned char code table[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
  0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
  //带小数点
  unsigned char code table1[] = {0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};

  /*************精确延时函数*****************/
  void delay(unsigned char i)
  {
  while(--i);
  }
  /******************************************
  此延时函数针对的是12Mhz的晶振
  delay(0):延时518us 误差:518-2*256=6
  delay(1):延时7us (原帖写"5us"是错的)
  delay(10):延时25us 误差:25-20=5
  delay(20):延时45us 误差:45-40=5
  delay(100):延时205us 误差:205-200=5
  delay(200):延时405us 误差:405-400=5
  *******************************************/

  /*****************DS18B20******************/

  void Init_Ds18b20(void) //DS18B20初始化send reset and initialization command
  {
  DQ = 1; //DQ复位,不要也可行。
  delay(1); //稍做延时
  DQ = 0; //单片机拉低总线
  delay(250); //精确延时,维持至少480us
  DQ = 1; //释放总线,即拉高了总线
  delay(100); //此处延时有足够,确保能让DS18B20发出存在脉冲。
  }

  uchar Read_One_Byte() //读取一个字节的数据read a byte date
  //读数据时,数据以字节的最低有效位先从总线移出
  {
  uchar i = 0;
  uchar dat = 0;
  for(i=8;i>0;i--)
  {
  DQ = 0; //将总线拉低,要在1us之后释放总线
  //单片机要在此下降沿后的15us内读数据才会有效。
  _nop_(); //至少维持了1us,表示读时序开始
  dat >>= 1; //让从总线上读到的位数据,依次从高位移动到低位。
  DQ = 1; //释放总线,此后DS18B20会控制总线,把数据传输到总线上
  delay(1); //延时7us,此处参照推荐的读时序图,尽量把控制器采样时间放到读时序后的15us内的最后部分
  if(DQ) //控制器进行采样
  {
  dat |= 0x80; //若总线为1,即DQ为1,那就把dat的最高位置1;若为0,则不进行处理,保持为0
  }
  delay(10); //此延时不能少,确保读时序的长度60us。
  }
  return (dat);
  }

  void Write_One_Byte(uchar dat)
  {
  uchar i = 0;
  for(i=8;i>0;i--)
  {
  DQ = 0; //拉低总线
  _nop_(); //至少维持了1us,表示写时序(包括写0时序或写1时序)开始
  DQ = dat&0x01; //从字节的最低位开始传输
  //指令dat的最低位赋予给总线,必须在拉低总线后的15us内,
  //因为15us后DS18B20会对总线采样。
  delay(10); //必须让写时序持续至少60us
  DQ = 1; //写完后,必须释放总线,
  dat >>= 1;
  delay(1);
  }
  }

  uint Get_Tmp() //获取温度get the temperature
  {
  float tt;
  uchar a,b;
  Init_Ds18b20(); //初始化
  Write_One_Byte(0xcc); //忽略ROM指令
  Write_One_Byte(0x44); //温度转换指令
  Init_Ds18b20(); //初始化
  Write_One_Byte(0xcc); //忽略ROM指令
  Write_One_Byte(0xbe); //读暂存器指令
  a = Read_One_Byte(); //读取到的第一个字节为温度LSB
  b = Read_One_Byte(); //读取到的第一个字节为温度MSB
  temp = b; //先把高八位有效数据赋于temp
  temp <<= 8; //把以上8位数据从temp低八位移到高八位
  temp = temp|a; //两字节合成一个整型变量
  tt = temp*0.0625; //得到真实十进制温度值
  //因为DS18B20可以精确到0.0625度
  //所以读回数据的最低位代表的是0.0625度
  temp = tt*10+0.5; //放大十倍
  //这样做的目的将小数点后第一位也转换为可显示数字
  //同时进行一个四舍五入操作。
  return temp;
  }

  /****************数码码动态显示函数**************/

  void Display(uint temp) //显示程序
  {
  uchar A1,A2,A3;
  A1 = temp/100; //百位
  A2 = temp%100/10; //十位
  A3 = temp%10; //个位

  la = 0;
  P0 = table[A1]; //显示百位
  la = 1; //打开段选,对应74573的锁存位,高电平不锁存
  la = 0;

  wela = 0;
  P0 = 0x7e;
  wela = 1; //打开位选
  wela = 0;
  delay(0);

  la = 0;
  P0 = table1[A2]; //显示十位,使用的是有小数点的数组(因为temp值扩大了10倍,虽然是十位,实际为个位)
  la = 1;
  la = 0;

  wela = 0;
  P0 = 0x7d;
  wela = 1;
  wela = 0;
  delay(0);

  P0 = table[A3]; //显示个位
  la = 1;
  la = 0;

  P0 = 0x7b;
  wela = 1;
  wela = 0;
  delay(0);
  }

  void main()
  {
  while(1)
  {
  Display(Get_Tmp());
  }
  }

热心网友 时间:2024-12-01 13:28

最好是对着18B20的时序图看

热心网友 时间:2024-12-01 13:29

我的百度空间里面有这个。

热心网友 时间:2024-12-01 13:30

要根据你的借口对网上的程序修改一下就OK了

热心网友 时间:2024-12-01 13:30

网上太多了,18b20的程序
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
江西蓝天学院和赣江职业技术学院哪个好? 江西有什么好的中专学校 什么是单点登录(SSO),以及单点登录的实现流程 前端实现单点登录(SSO) 前端单点登录如何实现 面试官:来说说单点登录的三种实现方式 为什么很多人不买哈弗H9 座机如何开通国内长途 座机如何申请 辽宁省出租车手续怎么办? 在孩子上幼儿园的时候,应当让孩子多学习哪些呢? WIN7右下角任务栏里的 声音的图标 不怎么怎么没了,自定义... 我的WIN7系统任务栏音量和电量图标都不见了,右击到属性里选...2 怎么再申请一个 请问农历1971年闺5月18日是什么星座?谢谢!7 1971年阴历5月18是什么星座?2 不知道中国银行深圳美居贷的还款方式是什么? 治疗痘痘最有效最快速的方法是什么?4 我的WIN7系统任务栏音量和电量图标都不见了,右击到属性里选...2 怎样知道自己的身份证绑定了几个?59 怎样能查实名认证了哪几个?4 从小店去万柏林区西花苑幼儿园坐几路公交 法院扣划银行存款是如何规定的?4 有谁知道“江苏烟草网上订购平台”网站为什么登不上去的?2 电脑的这个怎么退出? 苏州烟草定货平台网址是什么?23 家里的奔驰要换蓄电池了,问问大家瓦尔塔蓄电池合适吗?1 主角在新手村完成了一个sssss任务才出去,里面也有四大家族...1 韩剧插曲sunflower高潮与一首歌好像,忘了叫什么1 如何杀羊?如何做好羊肉?49 怎么认定以物抵债 2017金炳万丛林法则哪里能看3 速尔跑步机和德国益步乔山跑步机怎么样 你们谁报过伴财学堂的班?这个课程主要是讲什么啊? 梦到孩子气自己是好是坏4 花王泡泡染发 隔多久需要染一次?8 你们了解伴财学堂吗?这个靠谱吗? 《守株待兔》文言文,从中得到的感悟247 法院有权利扣押我在保险公司的理财产品吗9 注销无法注销怎么办 被封的怎么注销?261 无水无油素炒年糕的做法步骤图,怎么做好吃 可以注销吗?怎么注销?15 “卸妆”的英文是什么? 快速治疗痘痘的方法,最好是根治4 治疗痘痘最好的方法5 父亲70岁生日,邀请亲戚朋友参加的短信怎么写? 我家win7系统一开机任务栏就没有声音和网络图标,望高手求助 我的电脑显示器忽然黑屏,声音也没有,鼠标灯也熄了,键盘灯是亮...2 最好的治疗脸上痘痘的方法?5