标题: DS18B20温度在LCD1602循环显示是什么原因 [打印本页]

作者: pandahu    时间: 2019-1-12 21:22
标题: DS18B20温度在LCD1602循环显示是什么原因
  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. }
复制代码

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


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




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1