找回密码
 立即注册

QQ登录

只需一步,快速开始

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

好热呀,没有温度计可不行,自己做个温度计18B20+2051单片机+数码管(小儿科)

  [复制链接]
跳转到指定楼层
楼主
ID:72705 发表于 2015-1-24 14:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 huxiao 于 2015-1-24 14:39 编辑

西安这鬼天气,这几天真的好热呀,估计也在30多度
这几天也没什么事情干,做个温度计吧,好坏不说知道有多热。
很简单得,18B20+AT89C2051+数码管
用洞洞板好了,电路不复杂。
这个是我每次用洞洞板前必须要做的工作,用cad先把走线布一下,这样焊起来就方便多了。
焊接完得正面是这个样子得:

显示数字的用前面三个数码管,最后一个反过来用,可以显示摄氏度符号。
背面的镀锡走线是这个垃圾效果:

上电测试温度显示:


最后把程序给大家,线路看着程序走,数码管是共阳的。
  1. #include<reg51.h>
  2. #define leddata P1
  3. sbit led0=P3^7;
  4. sbit led1=P3^0;
  5. sbit led2=P3^1;
  6. sbit DQ=P3^5;
  7. typedef unsigned char byte;
  8. byte i;
  9. unsigned char code tab2[]={0,0,1,1,2,3,3,4,5,5,6,6,7,8,8,9};//小数部分显示数据
  10. unsigned char code tab1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90, 0xff};//LED段码表,根据自己硬件修改
  11.                            // 0,   1,   2,   3,   4,   5,    6,   7, 8,   9, off
  12. void delays(unsigned char k)
  13. {
  14. unsigned char i,j;
  15. for(i=0;i<k;i++)
  16. for(j=0;j<50;j++);
  17. }
  18. //*********** 18B20驱动 **************************
  19. void delay(unsigned char i)
  20. {
  21. while(--i);
  22. }
  23. //复位
  24. byte ow_reset(void)
  25. {
  26. byte presence;
  27. DQ=0;        //拉低总线
  28. delay(250);    // 保持 480us
  29. delay(250);
  30. DQ = 1;       // 释放总线
  31. delay(30);     // 等待回复
  32. presence = DQ; // 读取信号
  33. delay(250);    // 等待结束信号
  34. return(presence); // 返回   0:正常 1:不存在
  35. }   
  36. //从 1-wire 总线上读取一个字节
  37. byte read_byte(void)
  38. {
  39. byte i;
  40. byte value = 0;
  41. for (i=8;i>0;i--)
  42. {
  43.     value>>=1;
  44.     DQ = 0;
  45.     DQ = 1;
  46.     delay(2);
  47.     if(DQ)value|=0x80;
  48.     delay(6);
  49. }
  50. return(value);
  51. }
  52. //向 1-WIRE 总线上写一个字节
  53. void write_byte(char val)
  54. {
  55. byte i;
  56. for (i=8; i>0; i--) // 一次写一位
  57. { DQ=1;
  58.     DQ=0;
  59.     DQ = val&0x01;
  60.     delay(30);
  61.     DQ = 1;
  62.     val=val/2;
  63. }
  64. delay(70);
  65. }

  66. unsigned int Read_Temperature(void)
  67. {  
  68. union
  69. {
  70. unsigned char c[2];
  71. unsigned int x;
  72. }temp;
  73. temp.x=0x0000;
  74. i=ow_reset();
  75. if(!i)
  76. {
  77. write_byte(0xCC);    //Skip ROM
  78. write_byte(0xBE);    //Read Scratch Pad
  79. temp.c[1]=read_byte(); //Start read data
  80. temp.c[0]=read_byte(); //read two byte data from device
  81. ow_reset();        //reset
  82. write_byte(0xCC);    //Skip ROM
  83. write_byte(0x44);    //Start Conversion
  84. }
  85. return temp.x;
  86. }
  87. //***************************
  88. void main(void)
  89. {   unsigned int j;
  90. unsigned char p,q,n0,n1,n2;
  91. while(1)
  92. {
  93. j=Read_Temperature();
  94. q=(unsigned char)(j&0x000f);
  95. p=(unsigned char)(j>>4)-2;
  96. n0=p/10;
  97. n1=p%10;
  98. n2=tab2[q];
  99. led0=0;leddata=tab1[n0];delays(30);led0=1;
  100. led1=0;leddata=tab1[n1]&0x7f;delays(30);led1=1;
  101. led2=0;leddata=tab1[n2];delays(20);led2=1;
  102. }
  103. }
复制代码

超级简单吧,所以这个小儿科,给初学者一个参考,高手就不要给我拍砖了,不然我要被打死了。

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

使用道具 举报

沙发
ID:19701 发表于 2015-1-24 22:29 | 只看该作者
不错,支持分享精神。51hei有你更精彩!!
回复

使用道具 举报

板凳
ID:72073 发表于 2015-1-26 10:51 | 只看该作者
写得不错。
回复

使用道具 举报

地板
ID:82175 发表于 2015-6-6 10:34 | 只看该作者
make an effort
回复

使用道具 举报

5#
ID:70614 发表于 2015-6-9 21:16 | 只看该作者
谢谢分享制作的真好
回复

使用道具 举报

6#
ID:83846 发表于 2015-6-26 18:07 | 只看该作者
18B20+AT89C2051+数码管 51hei有你更精彩!!
回复

使用道具 举报

7#
ID:88176 发表于 2015-8-11 21:57 | 只看该作者
排线不错
回复

使用道具 举报

8#
ID:44267 发表于 2015-9-7 13:47 | 只看该作者
有打算做一个,好资料,谢谢
回复

使用道具 举报

9#
ID:44267 发表于 2015-9-7 13:47 | 只看该作者
51hei有你更精彩!!
回复

使用道具 举报

10#
ID:19947 发表于 2015-9-9 14:28 | 只看该作者
楼主,超过18b20的测温上限和下限怎么处理!
回复

使用道具 举报

11#
ID:19947 发表于 2015-9-9 14:30 | 只看该作者
程序里只能显示0-99左右,零下无法实现呀。
回复

使用道具 举报

12#
ID:44889 发表于 2015-10-13 16:51 | 只看该作者
學習了,思路很清晰
回复

使用道具 举报

13#
ID:36525 发表于 2015-10-13 23:02 | 只看该作者
我也做了一个,那天发个图上来
回复

使用道具 举报

14#
ID:113650 发表于 2016-4-12 09:02 | 只看该作者
有没有原理图  大神  求原理图
回复

使用道具 举报

15#
ID:104472 发表于 2016-4-12 10:45 | 只看该作者
pcb的背面做的很漂亮,就是有点费锡
回复

使用道具 举报

16#
ID:113703 发表于 2016-4-12 12:41 | 只看该作者
不错,楼主辛苦了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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