找回密码
 立即注册

QQ登录

只需一步,快速开始

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

ds18b20温度测量c51单片机程序 源代码

[复制链接]
跳转到指定楼层
楼主
ID:85764 发表于 2015-7-15 23:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

数码管显示部分的原理图(开发板中只需要截图显示部分即可):http://www.51hei.com/f/51hei-5.pdf

电路:ds18b20接在p2.2  数码管用8位共阴极数码管,2个573锁存 详见上面的51hei单片机开发板的pdf图,本人测试成了.


程序源代码:

  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit  wela=P2^7;
  5. sbit  dula=P2^6;
  6. sbit  DS=P2^2;
  7. uchar A;
  8. uint dian;
  9. uchar smg_change[6]={10,10,10,10,10,10};
  10. unsigned char code duanma[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
  11. unsigned char code weima[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
  12. void delay(unsigned int a)
  13. {
  14. while(a--);
  15. }
  16. void init_tempr()
  17. {
  18. uchar n;
  19. DS=1;
  20. delay(8);
  21. DS=0;
  22. delay(80);   //500us
  23. DS=1;
  24. delay(8);
  25. n=DS;
  26. delay(4);
  27. }
  28. void write_byte(uchar dat)
  29. {
  30. uchar i;
  31. for(i=0;i<8;i++)
  32. {
  33.   DS=0;
  34.   DS=dat&0x01;
  35.   delay(4);
  36.   DS=1;
  37.   dat>>=1;
  38. }
  39. delay(4);
  40. }
  41. uchar read_byte(void)
  42. {
  43. uchar i,value;
  44. for(i=0;i<8;i++)
  45. {
  46.   DS=0;
  47.   value>>=1;
  48.   DS=1;
  49.   if(DS)
  50.   value|=0x80;
  51.   delay(4);
  52. }
  53. return value;
  54. }
  55. uchar readtempr(void)
  56. {
  57.   uint temp, a,b;
  58.   init_tempr();
  59.   write_byte(0xcc);
  60.   write_byte(0x44);
  61.   delay(300);
  62.   init_tempr();
  63.   write_byte(0xcc);
  64.   write_byte(0xbe);
  65.   a=read_byte();
  66.   b=read_byte();
  67.   temp=b;
  68.   temp<<=4;            
  69.   temp+=(a&0xf0)>>4;
  70.   dian=(a&0x0f)*10*6/10;
  71.   return temp;
  72. }
  73. void display()
  74. {
  75.    uchar i;
  76.    for(i=0;i<6;i++)
  77.    {
  78.      P0=0X00;
  79.   dula=1;
  80.   dula=0;
  81.   P0=weima[i];
  82.   wela=1;
  83.   wela=0;
  84.   P0=duanma[smg_change[i]];
  85.   dula=1;
  86.   dula=0;
  87.   delay(200);
  88.    }
  89.       P0=weima[1];
  90.   wela=1;
  91.   wela=0;
  92.   P0=duanma[smg_change[1]]|0x80;
  93.   dula=1;
  94.   dula=0;
  95.   delay(200);
  96.   P0=0X00;
  97.   dula=1;
  98.   dula=0;
  99. }
  100. void dis_deal()
  101. {
  102. smg_change[0]=A/10;
  103. smg_change[1]= A%10;
  104. smg_change[2]=dian/10 ;
  105. smg_change[3]=dian%10 ;
  106. }
  107. void main()
  108. {
  109. while(1)
  110. {  
  111.   A=readtempr();
  112.      dis_deal();
  113.   display();
  114. }
  115. }
复制代码




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

使用道具 举报

沙发
ID:443912 发表于 2018-12-11 11:09 | 只看该作者
你好,为什么我这只显示了两个8啊。根本没有变化
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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