找回密码
 立即注册

QQ登录

只需一步,快速开始

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

基于DS18B20的测温电路设计

[复制链接]
跳转到指定楼层
楼主
功能要求:温度实时检测测量
代码:
  1. #include <reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit DQ=P2^4;
  5. unsigned char flag;
  6. uchar code scan[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
  7. uchar code table[13]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x40,0x39,0x00};
  8. uchar code ditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};
  9. uchar dispbuf[8];
  10. uchar temper[2];


  11. void delay(unsigned int us)
  12. {
  13. while(us--);
  14. }


  15. void reset(void)
  16. {
  17. uchar x=0;
  18. DQ=1;
  19. delay(8);
  20. DQ=0;
  21. delay(80);
  22. DQ=1;
  23. delay(14);
  24. x=DQ;
  25. delay(20);
  26. }


  27. uchar readbyte(void)
  28. {
  29. uchar i=0;
  30. uchar 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;
  38. delay(4);
  39. }
  40. return(dat);
  41. }
  42. void writebyte(unsigned char dat)
  43. {
  44. uchar i=0;
  45. for (i=8;i>0;i--)
  46. {
  47. DQ=0;
  48. DQ=dat&0x01;
  49. delay(5);
  50. DQ=1;
  51. dat>>=1;
  52. }
  53. delay(4);
  54. }


  55. void readtemp(void)
  56. {
  57. uchar a=0,b=0;
  58. reset();
  59. writebyte(0xCC);
  60. writebyte(0x44);
  61. reset();
  62. writebyte(0xCC);
  63. writebyte(0xBE);
  64. a=readbyte();
  65. b=readbyte();
  66. if(b>0x0f)
  67. {
  68. if(a==0)
  69. b=~b+1;
  70. else b=~b;
  71. flag=10;
  72. }
  73. else flag=12;
  74. temper[0]=a&0x0f;
  75. a=a>>4;
  76. temper[1]=b<<4;
  77. temper[1]=temper[1]|a;
  78. }
  79. void scandisp()
  80. {
  81. unsigned char i,value;
  82. for (i=0;i<8;i++)
  83. {
  84. P3=0xff;
  85. value=table[dispbuf[i]];
  86. if(i==3)
  87. value|=0x80;
  88. P0=value;
  89. P3=scan[i];
  90. delay(50);
  91. }
  92. }


  93. void main()
  94. {
  95. uchar temp,temp1;
  96. while(1)
  97. {
  98. scandisp();
  99. readtemp();
  100. temp1=temper[0];
  101. temp=temper[1];
  102. dispbuf[4]=ditab[temp1];
  103. dispbuf[1]=temp/100;
  104. dispbuf[3]=temp%10;
  105. temp=temp/10;
  106. dispbuf[2]=temp%10;
  107. dispbuf[0]=flag;
  108. dispbuf[5]=11;
  109. }
  110. }
复制代码

仿真.png (44.53 KB, 下载次数: 74)

仿真电路

仿真电路

6基于DS18B20的测温电路设计.rar

141.8 KB, 下载次数: 11, 下载积分: 黑币 -5

代码文件

评分

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

查看全部评分

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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