找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1210|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

基于DS18B20的測溫電路設(shè)計(jì)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
功能要求:溫度實(shí)時(shí)檢測測量
代碼:
  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. }
復(fù)制代碼

仿真.png (44.53 KB, 下載次數(shù): 74)

仿真電路

仿真電路

6基于DS18B20的測溫電路設(shè)計(jì).rar

141.8 KB, 下載次數(shù): 11, 下載積分: 黑幣 -5

代碼文件

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表