请问一下为什么MAX6675不能实时显示温度?

2020-03-08 19:19发布

参考了网上的很多例程,无论怎样都不能实时显示温度,但是重新打开电源或者使用独立按键按下就能读取更新一次温度????
  1. #include<intrins.h>
  2. #include "reg51.h"                         //此文件中定义了单片机的一些特殊功能寄存器
  3. #include "oled.h"

  4. sbit SO=P1^1;                                 
  5. sbit SCK=P1^3;                        
  6. sbit CS=P1^2;
  7. sbit key = P3^3;
  8.                                
  9. unsigned int MAX6675_Temp;
  10.                                        
  11. void delay(unsigned int i)
  12. {
  13.         while(i--);       
  14. }


  15. unsigned int Re_Convert() //热电偶数据读取,返回温度
  16. {
  17.         long int a=0x7ff8;
  18.         long int wendu=0,wendu_1;
  19.         float wendu_2;
  20.     unsigned int i;
  21.         CS=1;
  22.         SCK=0;
  23.         delay(200);
  24.         _nop_();
  25.         _nop_();
  26.         CS=0;
  27.         for(i=1;i<=16;i++)
  28.           {        wendu=wendu<<1;
  29.                 _nop_();
  30.                  SCK=1;
  31.                 if(SO==1){wendu=wendu|0x01;}
  32.                    else wendu=wendu|0x00;
  33.                 _nop_();
  34.                 _nop_();
  35.                 SCK=0;
  36.                 _nop_();
  37.                 _nop_();
  38.           }
  39.         wendu_1=wendu&a;
  40.         wendu_1=wendu_1>>3;
  41.         wendu_2=wendu_1*0.25;
  42.                
  43.         return wendu_2;                        //返回带两位小数的实际温度

  44. }

  45. void main()
  46. {       

  47.                 OLED_Init();                        //初始化OLED  
  48.                 OLED_Clear();
  49.                
  50.         while(1)
  51.         {
  52.                 if(key==0)
  53.                 {
  54.                         delay(1000);
  55.                         if(key==0)
  56.                                 {
  57.                                         while(key==0);
  58.                                         MAX6675_Temp=Re_Convert();
  59.                                 }
  60.                 }
  61.                
  62.                 OLED_ShowNum(103,6,MAX6675_Temp,3,16);
  63.        
  64.         }               
  65. }
复制代码
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
12条回答
xuyaqi
2020-03-08 22:30
你程序就这么要求的,把程序改一下你试试:
        while(1)
        {
                /*if(key==0)
                {
                        delay(1000);
                        if(key==0)
                        {
                                while(key==0);
                                MAX6675_Temp=Re_Convert();
                        }
                }*/
                MAX6675_Temp=Re_Convert();
                OLED_ShowNum(103,6,MAX6675_Temp,3,16);

        }               

一周热门 更多>