找回密码
 立即注册

QQ登录

只需一步,快速开始

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

温度传感器DS18B20温度测量程序

[复制链接]
跳转到指定楼层
楼主
ID:70976 发表于 2014-12-27 00:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit lcden=P3^4;
  5. sbit lcdrs=P3^5;
  6. sbit lcdwr=P3^6;
  7. sbit dula=P2^6;
  8. sbit wela=P2^7;
  9. sbit DQ=P2^2;
  10. uchar code table0[]="DS18B20";
  11. uchar code table1[]="0123456789";
  12. uchar num,shi,ge,dd=0;
  13. uchar dat=0;
  14. void delay(uchar z)
  15. {
  16. uint x,y;
  17. for(x=z;x>0;x--)
  18.   for(y=110;y>0;y--);
  19. }
  20. void delay1(uchar i)
  21. {
  22. while(i--);
  23. }
  24. void write_com(uchar com)
  25. {
  26. lcdrs=1;
  27. lcden=0;
  28. lcdrs=0;
  29. P0=com;
  30. delay(5);
  31. lcden=1;
  32. delay(5);
  33. lcden=0;
  34. }
  35. void write_data(uchar date)
  36. {
  37. lcdrs=0;
  38. lcden=0;
  39. lcdrs=1;
  40. P0=date;
  41. delay(5);
  42. lcden=1;
  43. delay(5);
  44. lcden=0;
  45. }
  46. void init_1602()
  47. {
  48. lcdwr=0;
  49. wela=0;
  50. dula=0;
  51. write_com(0x38);
  52. write_com(0x0c);
  53. write_com(0x06);
  54. write_com(0x01);
  55. write_com(0x80);
  56. }
  57. void init_DS18B20()
  58. {
  59. uchar x=0;
  60. DQ=1;
  61. delay1(8);
  62. DQ=0;
  63. delay1(80);
  64. DQ=1;
  65. delay1(14);
  66. x=DQ;
  67. delay1(20);
  68. }
  69. read_DS18B20(void)
  70. {
  71. uchar i=0;
  72. uchar dat=0;
  73. for(i=0;i<8;i++)
  74.   {
  75.    DQ=0;
  76.    dat=dat>>1;
  77.    DQ=1;
  78.    delay1(5);
  79.    if(DQ==1)
  80.     {
  81.      dat=dat|0x80;
  82.     }
  83.    delay1(4);
  84.   }
  85. return (dat);
  86. }
  87. write_DS18B20(uchar dat)
  88. {
  89. uchar i=0;
  90. for(i=0;i<8;i++)
  91.   {
  92.    DQ=0;
  93.    DQ=dat&0x01;
  94.    delay1(5);
  95.    DQ=1;
  96.    dat=dat>>1;
  97.   }
  98. delay1(4);//每读一个数之间都得有间隔  
  99. }
  100. chuli_dat(void)
  101. {
  102. uchar aa=0;
  103. uchar bb=0;
  104. uchar cc=0;
  105. init_DS18B20();
  106. write_DS18B20(0xCC);
  107. write_DS18B20(0x44);
  108. init_DS18B20();
  109. write_DS18B20(0xCC);
  110. write_DS18B20(0xBE);//发送读指令
  111. aa=read_DS18B20();//读高8位
  112. bb=read_DS18B20();//读低8位
  113. cc=(aa>>4)|(bb<<4);
  114. if(cc>128)
  115.   {
  116.    cc=~cc+1;
  117.   }
  118. return(cc);
  119. }
  120. void main()
  121. {
  122. init_1602();
  123. write_com(0x80);
  124. for(num=0;num<7;num++)
  125.   {
  126.    write_data(table0[num]);
  127.    delay(10);
  128.   }
  129. while(1)
  130.   {
  131.    dd=chuli_dat();
  132.    //write_com(0x80+0x08);
  133.    shi=dd/10;
  134.    ge=dd%10;
  135.    write_com(0x80+0x0b);
  136.    write_data(table1[shi]);
  137.    write_com(0x80+0x0c);
  138.    write_data(table1[ge]);

  139.    write_com(0x80+0x0d);
  140.    write_data(0xdf);
  141.    write_com(0x80+0x0e);
  142.    write_data('C');
  143.   }
  144. }
复制代码


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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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