找回密码
 立即注册

QQ登录

只需一步,快速开始

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

DS18B20温度在LCD1602循环显示是什么原因

[复制链接]
跳转到指定楼层
楼主
ID:461751 发表于 2019-1-12 21:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. Delay_DS18B20(int num)
  2. {
  3.   while(num--) ;
  4. }
  5. void Init_DS18B20(void)
  6. {
  7.   unsigned char x=0;
  8.   DQ = 1;   
  9.   Delay_DS18B20(8);   
  10.   DQ = 0;        
  11.   Delay_DS18B20(8);   
  12.   DQ = 1;         
  13.   Delay_DS18B20(14);
  14.   x = DQ;         
  15.   Delay_DS18B20(20);
  16. }

  17. unsigned char ReadOneChar(void)
  18. {
  19.   unsigned char i=0;
  20.   unsigned char dat = 0;
  21.   for (i=8;i>0;i--)
  22.   {
  23.     DQ = 0;     
  24.     dat>>=1;
  25.     DQ = 1;     
  26.     if(DQ)
  27.     dat|=0x80;
  28.     Delay_DS18B20(4);
  29.   }
  30.   return(dat);
  31. }

  32. void WriteOneChar(unsigned char dat)
  33. {
  34.   unsigned char i=0;
  35.   for (i=8; i>0; i--)
  36.   {
  37.     DQ = 1;
  38.     DQ = dat&0x10;
  39.     Delay_DS18B20(5);
  40.     DQ = 0;
  41.     dat>>=1;
  42.   }
  43. }
  44. unsigned int ReadTemperature(void)
  45. {
  46.   unsigned char a=0;
  47.   unsigned char b=0;
  48.   unsigned int t=0;
  49.   float tt=0;
  50.   Init_DS18B20();
  51.   WriteOneChar(0xCC);  
  52.   WriteOneChar(0x44);
  53.   Init_DS18B20();
  54.   WriteOneChar(0xCC);
  55.   WriteOneChar(0xBE);
  56.   a=ReadOneChar();   
  57.   b=ReadOneChar();
  58.   t=b;
  59.   t<<=8;
  60.   t=t|a;
  61.   tt=t*0.0625;
  62.   t= tt*10+0.5;   
  63.   return(t);
  64. }
  65. void Init1602()
  66. {
  67.   uchar i=0;
  68.   write_com(0x38);
  69.   write_com(0x0c);
  70.   write_com(0x06);
  71.   write_com(0x01);
  72.   write_com(0x80);
  73.   for(i=0;i<16;i++)
  74.   {
  75.   write_data(Init1[i]);
  76.   
  77.   }
  78.   write_com(0x80+0x40);
  79.   for(i=0;i<16;i++)
  80.   {
  81.   write_data(Init2[i]);
  82.   }
  83. }

  84. void Display_1602(uint c,uchar ds,uchar sx,uchar xx)
  85. {
  86. write_com(0x80+3);
  87. write_data('0'+c/100);
  88. write_data('0'+c/10%10);
  89. write_data('.');
  90. write_data('0'+c%10);
  91. write_data(0xdf);

  92. write_com(0x80+13);
  93. write_data('0'+ds/100);
  94. write_data('0'+ds/10%10);
  95. write_data('0'+ds%10);

  96. write_com(0x80+0x40+4);
  97. write_data('0'+sx/10%10);
  98. write_data('0'+sx%10);

  99. write_com(0x80+0x40+13);
  100. write_data('0'+xx/10%10);
  101. write_data('0'+xx%10);

  102. }


  103. void check_wendu(void)
  104. {
  105. c=ReadTemperature()-5;  
  106. w=c/10;           
  107. if(w<0){w=0;}      
  108. if(w>99){w=99;}         
  109. }
  110. void main()
  111. {
  112. Init1602();
  113. EA=1;
  114. IT1=1;
  115. EX1=1;
  116. ET1=1;
  117. TMOD=0x01;
  118. TL1=0x3c;
  119. TH1=0xb0;
  120. TH0=0;
  121. TL0=0;
  122. TR0=0;
  123. check_wendu();
  124. delay(1000);
  125. while(1)
  126. {
  127.   check_wendu();
  128.    Display_1602(c,ds,sx,xx);
  129. }
  130. }
复制代码

截取的部分代码,是不是这部分代码导致的原因

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

使用道具 举报

沙发
ID:1 发表于 2019-1-12 23:21 | 只看该作者
您这个问题给的信息不全,估计是没人能回答得了的,先转移到冷门区了,自行点击编辑按钮补充一下吧,审核员会帮你重新转到热门问答区的
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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