找回密码
 立即注册

QQ登录

只需一步,快速开始

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

基于51单片机的MLX90614红外测温源程序

  [复制链接]
跳转到指定楼层
楼主
      (分享文件)
想在51hei论坛上找,但一直都没有找到,在其他网站上找来了,顺便分享过来吧,之后想用msp430把这个红外测温仪做出来,尽可能的加上蓝牙传输。欢迎大家交流探讨。

一.实验目的
1.通过本实验掌握 MLX90614 的原理。
2.通过实验掌握数码管基本原理
3. 通过实验掌握矩阵键盘的使用
4.通过实验掌握1602 的使用
二.实验内容
通过 MLX90614 非接触式测得物体温度

2.运行 Keil uVision软件,新建一个工程,新建一个工程文件。将文件添加到工程中并编译,如有错,请更改直到编译成功,如有错,请更改直到编译成功
4.用编程器将生成的 HEX 文件烧写到单片机中,或用 STC 单片机专用的串口烧写软件,通过MAX232 串口烧写到单片机中(只能用于 STC单片机)。或用仿真器来执行程序,将程序下载到仿真器中,具体方法请参考仿真器的使用一节。用编程器将生成的 HEX 文件烧写到单片机中。
5. 程序下完后可以看到液晶屏有温度显示,用手掌覆盖红外传感器上方2cm 处,看到此时液晶屏温度即为手掌的表面温度。
6.按下1键可以看到数码管显示,用手掌覆盖红外传感器上方 2cm 处,看到此时数码管温度即为手掌的表面温度。此时液晶屏温度保持不变。
7.按下除1键其他键,此时液晶屏又重新显示温度。

单片机源程序如下:
  1. //-------------------------------------------------------------------------
  2. //说明:显示分为2 部分:数码管显示,液晶屏显示
  3. //按1 键数码管显示,此时液晶屏保持静止
  4. //复位时或按除1 键外其他键时,液晶屏显示,数码管熄灭
  5. //-------------------------------------------------------------------------
  6. #include<reg52.h>
  7. #include<intrins.h>
  8. #define uint unsigned int
  9. #define uchar unsigned char
  10. #define Nack_number 10
  11. //**************端口定义**************************************************
  12. uchar flag;                                //LCD 控制线接口
  13. sbit RS=P0^6;                              //RS 端
  14. sbit RW=P0^7;                              //读写端
  15. sbit LCDE=P3^5;                        //使能端
  16.                                            //mlx90614 端口定义
  17. ----------------------- Page 3-----------------------
  18. sbit SCK=P3^7;                                        //时钟线
  19. sbit SDA=P3^6;                                        //数据线
  20. sbit DPY1 = P3^2;                               //温度显示第1 个数码管段选
  21. sbit DPY2 = P3^3;                               //温度显示第2 个数码管段选
  22. sbit DPY3 = P3^4;                               //温度显示第3 个数码管段选
  23. sbit row1 = P0^3;                                //矩阵键盘第1 列
  24. sbit row2 = P0^4;                                //矩阵键盘第2 列
  25. sbit row3 = P0^5;                                //矩阵键盘第3 列
  26. sbit cow1 = P0^0;                                 //矩阵键盘第1 行
  27. sbit cow2 = P0^1;                                 //矩阵键盘第2 行
  28. sbit cow3 = P0^2;                                 //矩阵键盘第3 行
  29. //************数据定义****************************************************
  30. bdata uchar flag1;                               //可位寻址数据
  31. sbit bit_out=flag1^7;
  32. sbit bit_in=flag1^0;
  33. uchar tempH,tempL,err;
  34. void CALTEMP(uint TEMP);
  35. void ReadKey(void);
  36. void initInt();
  37. void delay1(uint z);
  38. void show();
  39. ----------------------- Page 4-----------------------
  40. uchar key_num;
  41. uchar mah[5];
  42. /********数码管码值定义*******************************************************/
  43. uchar code LED01[]={                        //LED 显示代码,0-9  共阳 不带小数点的
  44. 0xC0,0xF9,0xA4,0xB0,
  45. 0x99,0x92,0x82,0xF8,
  46. 0x80,0x90};
  47. uchar code LED02[]={                        //LED 显示代码,0-9  共阳 带小数点的
  48. 0x40,0x79,0x24,0x30,
  49. 0x19,0x12,0x02,0x78,
  50. 0x00,0x10};
  51. /**********全局变量定义******************************************************/
  52. bit b20ms,b100ms;      //定时标志位
  53. uchar c20ms,c100ms;         //定时毫秒数
  54. //************************** LCD1602   ***********************************
  55. //向LCD 写入命令或数据*****************************************************
  56. #define LCD_COMMAND               0                   //命令
  57. #define LCD_DATA             1                   //  数据
  58. #define LCD_CLEAR_SCREEN           0x01               //  清屏
  59. #define LCD_HOMING                0x02                //  光标返回原点
  60. //设置显示模式******* 0x08+            *********************************************
  61. #define LCD_SHOW                  0x04           //显示开
  62. #define LCD_HIDE              0x00           //显示关
  63. #define LCD_CURSOR                 0x02                //显示光标
  64. #define LCD_NO_CURSOR              0x00           //无光标
  65. #define LCD_FLASH                  0x01           //光标闪动
  66. #define LCD_NO_FLASH               0x00           //光标不闪动
  67. //设置输入模式********** 0x04+ ********************************************
  68. #define LCD_AC_UP                  0x02                //光标右移 AC+
  69. #define LCD_AC_DOWN                0x00                //默认光标左移 AC-
  70. #define LCD_MOVE                   0x01                //画面可平移
  71. #define LCD_NO_MOVE                0x00                //默认 画面不移动
  72. //************************** mlx90614   ***********************************
  73. //command mode        命令模式
  74. #define RamAccess         0x00                    //对RAM 操作
  75. #define EepomAccess       0x20                    //对EEPRAM 操作
  76. #define    Mode          0x60                     //进入命令模式
  77. #define ExitMode     0x61                    //退出命令模式
  78. #define    ReadFlag 0xf0                     //读标志
  79. #define EnterSleep        0xff                    //进入睡眠模式
  80. //ram address        read only RAM 地址(只读)
  81. #define AbmientTempAddr            0x03           //周围温度
  82. #define    IR1Addr                 0x04
  83. #define    IR2Addr                 0x05
  84. #define LineAbmientTempAddr         0x06               //环境温度
  85. /*0x0000 0x4074      16500    0.01/单元
  86.       -40    125*/
  87. #define LineObj1TempAddr 0x07               // 目标温度,红外温度
  88. /*0x27ad-0x7fff      0x3559 22610       0.02/单元
  89.     -70.01-382.19  0.01    452.2*/
  90. #define    LineObj2TempAddr        0x08
  91. //eepom address     EEPROM 地址
  92. #define TObjMaxAddr          0x00                //测量范围上限设定
  93. #define TObjMinAddr          0x01                //测量范围下限设定
  94. #define PWMCtrlAddr          0x02                //PWM 设定
  95. #define TaRangeAddr          0x03                //环境温度设定
  96. #define KeAddr               0x04                //频率修正系数
  97. #define ConfigAddr           0x05                //配置寄存器
  98. #define SMbusAddr            0x0e                //器件地址设定
  99. #define Reserverd1Addr        0x0f               //保留
  100. #define Reserverd2Addr        0x19               //保留
  101. #define ID1Addr              0x1c                //ID 地址1
  102. #define ID2Addr              0x1d                    //ID 地址2
  103. #define ID3Addr              0x1e                //ID 地址3
  104. #define ID4Addr              0x1f                //ID 地址4
  105. //************函数声明*****************************************************
  106. void start();                                    //MLX90614 发起始位子程序
  107. void stop();                                     //MLX90614 发结束位子程序
  108. uchar ReadByte(void);                            //MLX90614 接收字节子程序
  109. void send_bit(void);                             //MLX90614 发送位子程序
  110. ----------------------- Page 7-----------------------
  111. void SendByte(uchar number);                           //MLX90614 接收字节子程序
  112. void read_bit(void);                                   //MLX90614 接收位子程序
  113. void delay(uint N);                                    //延时程序
  114. uint readtemp(void);                                   //读温度数据
  115. void init1602(void);                                   //LCD 初始化子程序
  116. void busy(void);                                       //LCD 判断忙子程序
  117. void cmd_wrt(uchar cmd);                               //LCD 写命令子程序
  118. void dat_wrt(uchar dat);                               //LCD 写数据子程序
  119. void display(uint Tem);                                //显示子程序
  120. void Print(uchar *str);                          //字符串显示程序
  121. //*************主函数*******************************************
  122. void main()
  123. {
  124.       uint Tem;                                             //温度变量
  125.      initInt();
  126.       SCK=1;
  127.       SDA=1;
  128.       delay(4);
  129.       SCK=0;
  130.       delay(1000);
  131.       SCK=1;
  132.       init1602();                                           //初始化LCD
  133.       while(1)
  134.       {
  135.           while(b100ms)                          //每100ms 扫描一次键盘
  136.           {
  137.             b100ms=0;
  138.             ReadKey();
  139.           }
  140.           if(key_num==1)                       //按下1 键时,进行数码管显示
  141.           {
  142.             Tem=readtemp();
  143.             CALTEMP(Tem);
  144.             show();
  145.           }
  146.           if(key_num!=1)            //液晶屏显示
  147.           {
  148.            Tem=readtemp();                                  //读取温度
  149.            cmd_wrt(0x01);                                   //清屏
  150.            Print("   Temperature:         ");          //显示字符串 Temperature:  且换行
  151.            display(Tem);                               //显示温度
  152.            Print(" ^C");                         //显示摄氏度
  153.            delay(100000);                                   //延时再读取温度显示
  154.           }
  155.       }
  156. }
  157. //------------------字符串显示程序--------------------------
  158. void Print(uchar *str)                                       //字符串显示程序
  159. {
  160.        while(*str!='\0')                                     //直到字符串结束
  161.        {
  162.             dat_wrt(*str);                                   //转成ASCII 码
  163.             str++;                                                 //指向下一个字符
  164.        }
  165. }
  166. //--------------输入转换并显示(用于LCD1602)--------------------
  167. void display(uint Tem)
  168. {
  169.        uint T,a,b;
  170.        T=Tem*2;
  171.        if(T>=27315)                                          //温度为正
  172.        {
  173.             T=T-27315;                                             //
  174.             a=T/100;                                         //温度整数
  175.             b=T-a*100;                                             //温度小数
  176.             if(a>=100)                                             //温度超过100 度
  177.             {
  178.                   dat_wrt(0x30+a/100);                       //显示温度百位
  179.                   dat_wrt(0x30+a%100/10);                          //显示温度十位
  180.                   dat_wrt(0x30+a%10);                              //显示温度个位
  181.             }
  182.       else if(a>=10)                              //温度超过10 度
  183.       {
  184.            dat_wrt(0x30+a%100/10);                      //显示温度十位
  185.            dat_wrt(0x30+a%10);                          //显示温度个位
  186.       }
  187.       else                                        //温度不超过10 度
  188.       {
  189.            dat_wrt(0x30+a);                       //显示温度个位
  190.       }
  191.       dat_wrt(0x2e);                                    //显示小数点
  192.       if(b>=10)                                   //温度小数点后第1 位数不等于0
  193.       {
  194.       dat_wrt(0x30+b/10);                               //显示温度小数点后第1 位数
  195.       dat_wrt(0x30+b%10);                               //显示温度小数点后第2 位数
  196.       }
  197.       else                                        //温度小数点后第1 位数等于0
  198.       {
  199.            dat_wrt(0x30);                               //显示温度小数点后第1 位数0
  200.            dat_wrt(0x30+b);                       //显示温度小数点后第2 位数
  201.       }
  202. }
  203. else                                             //温度为负
  204. {
  205.       T=27315-T;
  206.       a=T/100;
  207.            b=T-a*100;
  208.            dat_wrt(0x2d);                                  //显示负号
  209.            if(a>=10)                                  //温度低于负10 度
  210.            {
  211.                 dat_wrt(0x30+a/10);                        //显示温度十位
  212.                 dat_wrt(0x30+a%10);                        //显示温度个位
  213.            }
  214.            else                                       //温度高于负10 度
  215.            {
  216.                 dat_wrt(0x30+a);                      //显示温度个位
  217.            }
  218.            dat_wrt(0x2e);                                  //显示小数点
  219.            if(b>=10)                                  //温度小数点后第1 位数不等于0
  220.            {
  221.                 dat_wrt(0x30+b/10);                        //显示温度小数点后第1 位数
  222.                 dat_wrt(0x30+b%10);                        //显示温度小数点后第2 位数
  223.            }
  224.            else                                       //温度小数点后第1 位数等于0
  225.            {
  226.                 dat_wrt(0x30);                             //显示温度小数点后第1 位数0
  227.                 dat_wrt(0x30+b);                      //显示温度小数点后第2 位数
  228.            }
  229.       }
  230. }
  231. //--------------------根据十六进制计算温度------------------------------
  232. void CALTEMP(uint TEMP)
  233. {
  234.                uint T;
  235.                uint a,b;
  236.                uchar A4,A5,A6,A7,A8;
  237.                T=TEMP*2;
  238.                if(T>=27315)
  239.                               {
  240.                                      T=T-27315;
  241.                                      a=T/100;
  242.                                      b=T-a*100;
  243.                                      if(a>=100)
  244.                                                {
  245.                                                        A4=a/100;
  246.                                                        a=a%100;
  247.                                                        A5=a/10;
  248.                                                        a=a%10;
  249.                                                        A6=a;
  250.                                                   }
  251.                                      else if(a>=10)
  252.                                                   {
  253.                                                        A4=0;
  254.                                                        A5=a/10;
  255.                                                        a=a%10;
  256.                                                        A6=a;
  257.                                         }
  258.                       else
  259.                                         {
  260.                                                 A4=0;
  261.                                                 A5=0;
  262.                                                 A6=a;
  263.                                         }
  264.                       if(b>=10)
  265.                                         {
  266.                                                 A7=b/10;
  267.                                                 b=b%10;
  268.                                                 A8=b;
  269.                                         }
  270.                           else
  271.                                         {
  272.                                                 A7=0;
  273.                                                 A8=b;
  274.                                         }
  275.                }
  276. else
  277.                       {
  278.                                  T=27315-T;
  279.                                  a=T/100;
  280.                                  b=T-a*100;
  281.                                  A4=9;
  282.          if(a>=10)
  283.                            {
  284.                                          A5=a/10;
  285.                                          a=a%10;
  286.                                          A6=a;
  287.                            }
  288.          else
  289.                            {
  290.                                          A5=0;
  291.                                          A6=a;
  292.                            }
  293.          if(b>=10)
  294.                            {
  295.                                          A7=b/10;
  296.                                          b=b%10;
  297.                                          A8=b;
  298.                            }
  299.          else
  300.                            {
  301.                                          A7=0;
  302.                                          A8=b;
  303.                            }
  304. }
  305. mah[4]=A4;
  306. mah[3]=A5;
  307.                       mah[2]=A6;
  308.                       mah[1]=A7;
  309.                       mah[0]=A8;
  310. }
  311. //------------------------------
  312. void start(void)                                         //停止条件是 SCK=1 时,SDA 由1 到0
  313. {
  314.        SDA=1;
  315.        delay(4);
  316.        SCK=1;
  317.        delay(4);
  318.        SDA=0;
  319.        delay(4);
  320.        SCK=0;
  321.        delay(4);
  322. }
  323. //------------------------------
  324. void stop(void)                                               //停止条件是 SCK=1 时,SDA 由0 到1
  325. {
  326.        SCK=0;
  327.        delay(4);
  328.        SDA=0;
  329.        delay(4);
  330.        SCK=1;
  331.        delay(4);
  332.        SDA=1;
  333. }
  334. //---------发送一个字节---------
  335. void SendByte(uchar number)
  336. {
  337.        uchar i,n,dat;
  338.        n=Nack_number;                                                //可以重发次数
  339.       Send_again:
  340.        dat=number;
  341.        for(i=0;i<8;i++)                                        //8 位依次发送
  342.        {
  343.              if(dat&0x80)                                            //取最高位
  344.              {
  345.                    bit_out=1;                                        //发1
  346.              }
  347.              else
  348.              {
  349.                    bit_out=0;                                        //发0
  350.              }
  351.              send_bit();                                             //发送一个位
  352.              dat=dat<<1;                                             //左移一位
  353.        }
  354.        read_bit();                                                   //接收1 位应答信号
  355.        if(bit_in==1)                                           //无应答时重发
  356.        {
  357.               stop();
  358.               if(n!=0)
  359.               {
  360.                      n--;                                             //可以重发Nack_number=10 次
  361.                      goto Repeat;                                     //重发
  362.               }
  363.               else
  364.               {
  365.                      goto exit;                                              //退出
  366.               }
  367.         }
  368.         else
  369.         {
  370.               goto exit;
  371.         }
  372. Repeat:
  373.         start();                                                      //重新开始
  374.         goto Send_again;                                              //重发
  375.         exit: ;                                                              //退出
  376. }
  377. //-----------发送一个位---------
  378. void send_bit(void)
  379. {
  380.         if(bit_out==1)
  381.         {
  382.              SDA=1;                                                       //发1
  383.         }
  384.         else
  385.         {
  386.              SDA=0;                                                       //发0
  387.         }
  388.         _nop_();
  389.         SCK=1;                                                            //上升沿
  390.         delay(4);delay(4);
  391.         SCK=0;
  392.         delay(4);delay(4);
  393. }
  394. //----------接收一个字节--------
  395. uchar ReadByte(void)
  396. {
  397.         uchar i,dat;
  398.         dat=0;                                                            //初值为0
  399.         for(i=0;i<8;i++)
  400.         {
  401.              dat=dat<<1;                                                  //左移
  402.              read_bit();                                                  //接收一位
  403.              if(bit_in==1)
  404.              {
  405.                     dat=dat+1;                                            //为1 时对应位加1
  406.              }
  407.        }
  408.        SDA=0;                                                   //发送应答信号0
  409.        send_bit();
  410.        return dat;                                              //带回接收数据
  411. }
  412. //----------接收一个位----------
  413. void read_bit(void)
  414. {
  415.        SDA=1;                                                   //数据端先置1
  416.        bit_in=1;
  417.        SCK=1;                                                   //上升沿
  418.        delay(4);delay(4);
  419.        bit_in=SDA;                                              //读数据
  420.        _nop_();
  421.        SCK=0;
  422.        delay(4);delay(4);
  423. }
  424. //------------------------------
  425. uint readtemp(void)
  426. {
  427.        SCK=0;
  428.        start();                                           //开始条件
  429.        SendByte(0x00);                                    //发送从地址00
  430.       SendByte(0x07);                           //发送命令
  431.       start();                                  //开始条件
  432.       SendByte(0x01);                           //读从地址00
  433.       bit_out=0;
  434.       tempL=ReadByte();                              //读数据低字节
  435.       bit_out=0;
  436.       tempH=ReadByte();                              //读数据高字节
  437.       bit_out=1;
  438.       err=ReadByte();                                //读错误信息码
  439.       stop();                                        //停止条件
  440.       return(tempH*256+tempL);
  441. }
  442. //******************LCD 显示子函数***********************
  443. void init1602(void)                             //初始化LCD
  444. {
  445.       cmd_wrt(0x01);                                 //清屏
  446.       cmd_wrt(0x0c);                                 //开显示,不显示光标,不闪烁
  447.       cmd_wrt(0x06);                                 //完成一个字符码传送后,光标左移,显
  448. 示不发生移位
  449.       cmd_wrt(0x38);                                 //16 ×2 显示,5×7 点阵,8 位数据接口
  450. }
  451. void busy(void)                                 //LCD 忙标志判断
  452. {
  453.       flag=0x80;                                     //赋初值 高位为1 禁止
  454.       while(flag&0x80)                          //读写操作使能位禁止时等待 继续检测
  455.        {
  456.             P1=0xff;
  457.             RS=0;                                               //指向地址计数器
  458.             RW=1;                                               //读
  459.             LCDE=1;                                        //信号下降沿有效
  460.             flag=P1;                                       //读状态位 高位为状态
  461.             LCDE=0;
  462.        }
  463. }
  464. void cmd_wrt(uchar cmd)                                    //写命令子函数
  465. {
  466.        LCDE=0;
  467.        busy();                                                  //检测读写操作使能吗
  468.        P1=cmd;                                                  //命令
  469.        RS=0;                                                    //指向命令计数器
  470.        RW=0;                                                    //写
  471.        LCDE=1;                                                  //高电平有效
  472.        LCDE=0;
  473. }
  474. void dat_wrt(uchar dat)                                    //写数据子函数
  475. {
  476.        busy();                                                  //检测读写操作使能吗
  477.        LCDE=0;
  478.        if(flag==16)
  479.        {
  480.             RS=0;                                                   //指向指令寄存器
  481.             RW=0;                                                   //写
  482.             P1=0XC0;                                          //指向第二行
  483.             LCDE=1;                                                 //高电平有效
  484.             LCDE=0;
  485.        }
  486.        RS=1;                                                        //指向数据寄存器
  487.        RW=0;                                                        //写
  488.        P1=dat;                                                //写数据
  489.        LCDE=1;                                                      //高电平有效
  490.        LCDE=0;
  491. }
  492. //------------延时--------------
  493. void delay(uint n)
  494. {
  495.        uint j;
  496.        for(j=0;j<n;j++)
  497.        {
  498.             _nop_();
  499.        }
  500. }
  501. //------------定时器初始化函数----------------
  502. void initInt()
  503. {
  504.       TMOD = 0x10;                              //定时器1 方式1
  505.       TH1=(65536-1000)/256;                           //定时器1 设置1ms 定时
  506.       TL1=(65536-1000)%256;
  507.      EA=1;                                          //开总中断
  508.       ET1 = 1;                                 //开定时器T1 中断
  509.       TR1 = 1;                                     //启动定时器T1
  510. }
  511. //------------定时器中断处理函数-------------------
  512. void timer1handle() interrupt 3           //定时器3 1ms  中断
  513. {
  514.       TH1=(65536-1000)/256;
  515.       TL1=(65536-1000)%256;
  516.       c20ms++;
  517.       c100ms++;
  518.       if(c20ms >= 20)        //20ms 计时器
  519.      {
  520.           c20ms = 0;
  521.           b20ms = 1;
  522.      }
  523.       if(c100ms >= 50)       //100ms 计时器
  524.      {
  525.           c100ms = 0;
  526.           b100ms = 1;
  527.      }
  528. }
  529. //--------------------------温度显示函数------------------------
  530. void show()
  531. {
  532.       DPY1=0;
  533.       P2=LED01[mah[3]];                  //转换8 位数显示,不带小数点的
  534.       delay1(2);
  535.       P2=0xFF;
  536.      DPY1=1;
  537.       DPY2=0;
  538.       P2=LED02[mah[2]];                   //转换8 位数显示,带小数点的
  539.       delay1(2);
  540.       P2=0xFF;
  541.      DPY2=1;
  542.       DPY3=0;
  543.       P2=LED01[mah[1]];                   //转换8 位数显示,不带小数点的
  544.       delay1(2);
  545.      P2=0xFF;
  546.      DPY3=1;
  547. }
  548. ……………………

  549. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
MLX90614红外测温仪实验指导书含源码.pdf (155.79 KB, 下载次数: 676)

MLX90614的中英文资料下载:
http://www.51hei.com/bbs/dpj-107480-1.html


评分

参与人数 1黑币 +100 收起 理由
admin + 100 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:205887 发表于 2018-2-8 09:06 | 只看该作者
很好,学习中谢谢
回复

使用道具 举报

板凳
ID:286266 发表于 2018-2-28 13:58 | 只看该作者
请问一下仿真里面我没有找到MLX90614怎么办
回复

使用道具 举报

地板
ID:298843 发表于 2018-3-29 13:21 | 只看该作者
谢谢楼主,好棒哦
回复

使用道具 举报

5#
ID:264727 发表于 2018-5-11 12:08 | 只看该作者
3123113123 发表于 2018-2-28 13:58
请问一下仿真里面我没有找到MLX90614怎么办

这种传感器一般的仿真软件里不会有它的,MLX90614的硬件连接并不复杂,建议连上单片机开发板后再调试
回复

使用道具 举报

6#
ID:20324 发表于 2018-5-12 08:30 | 只看该作者
灰常好,正用到,学习下。。。。
回复

使用道具 举报

7#
ID:310972 发表于 2018-5-23 15:31 | 只看该作者
T=Tem*2;    楼主求教为什么要*2的?
回复

使用道具 举报

8#
ID:432836 发表于 2018-11-27 22:59 | 只看该作者
很棒的东西 很有帮助
回复

使用道具 举报

9#
ID:419628 发表于 2018-12-14 12:06 | 只看该作者
楼主大神,我用普中的开发版做了测试,发现LCD一直显示的是382.19℃,请问是什么原因,程序的时序有问题吗。
回复

使用道具 举报

10#
ID:304366 发表于 2018-12-20 19:12 | 只看该作者
好厉害的样子
回复

使用道具 举报

11#
ID:451036 发表于 2018-12-20 20:01 | 只看该作者
单片机汇编语言还有人学?
回复

使用道具 举报

12#
ID:240164 发表于 2019-1-12 15:26 | 只看该作者
感谢分享!
回复

使用道具 举报

13#
ID:496726 发表于 2019-3-23 15:36 | 只看该作者
请问楼主这个是SMBUS协议的吗
回复

使用道具 举报

14#
ID:442731 发表于 2019-3-23 17:13 | 只看该作者
非常好!
回复

使用道具 举报

15#
ID:511210 发表于 2019-4-13 22:29 | 只看该作者
请问下楼主  这个有办法仿真出来吗
回复

使用道具 举报

16#
ID:509882 发表于 2019-4-14 15:05 | 只看该作者
谢谢楼主
回复

使用道具 举报

17#
ID:521578 发表于 2019-4-25 17:47 | 只看该作者
红外 发表于 2019-4-13 22:29
请问下楼主  这个有办法仿真出来吗

我也想问
回复

使用道具 举报

18#
ID:412391 发表于 2019-5-10 09:09 | 只看该作者
谢谢楼主,好棒哦
回复

使用道具 举报

19#
ID:525434 发表于 2019-5-11 02:48 | 只看该作者
MOMO1234 发表于 2018-12-14 12:06
楼主大神,我用普中的开发版做了测试,发现LCD一直显示的是382.19℃,请问是什么原因,程序的时序有问题吗 ...

请问找到原因了么?
回复

使用道具 举报

20#
ID:382507 发表于 2019-7-12 19:59 | 只看该作者
我用锐志的51开发板做实验,也一直显示382.1.好像是没有数据返回。请问有人知道具体原因吗
回复

使用道具 举报

21#
ID:583286 发表于 2019-7-22 08:27 | 只看该作者
初学者10086 发表于 2019-7-12 19:59
我用锐志的51开发板做实验,也一直显示382.1.好像是没有数据返回。请问有人知道具体原因吗

我也是,我感觉这个传感器根本就不工作,不传递数据。
回复

使用道具 举报

22#
ID:276433 发表于 2019-12-16 09:36 | 只看该作者
ejn521 发表于 2019-7-22 08:27
我也是,我感觉这个传感器根本就不工作,不传递数据。

我测试了,如果传感器连接正常的话,可以正常显示的。
回复

使用道具 举报

23#
ID:666819 发表于 2019-12-17 23:01 | 只看该作者
我用器件测试没有问题,非常感谢楼主!
回复

使用道具 举报

24#
ID:679966 发表于 2020-1-3 22:10 | 只看该作者
MOMO1234 发表于 2018-12-14 12:06
楼主大神,我用普中的开发版做了测试,发现LCD一直显示的是382.19℃,请问是什么原因,程序的时序有问题吗 ...

我也是这样,请问找到问题了吗?
回复

使用道具 举报

25#
ID:679966 发表于 2020-1-3 22:11 | 只看该作者
ejn521 发表于 2019-7-22 08:27
我也是,我感觉这个传感器根本就不工作,不传递数据。

请问找到原因了吗
回复

使用道具 举报

26#
ID:348548 发表于 2020-3-3 16:49 | 只看该作者
很好,学习中谢谢
回复

使用道具 举报

27#
ID:14667 发表于 2020-3-6 14:03 | 只看该作者
感谢分享,看看。
回复

使用道具 举报

28#
ID:705916 发表于 2020-3-10 17:09 | 只看该作者
感谢分享,看看。
回复

使用道具 举报

29#
ID:602289 发表于 2020-3-28 09:25 | 只看该作者
准备尝试一下,谢谢楼主提供资料。
回复

使用道具 举报

30#
ID:736927 发表于 2020-4-24 13:38 | 只看该作者
你好,有原理图吗,有麻烦发一下
回复

使用道具 举报

31#
ID:737405 发表于 2020-4-25 00:04 来自手机 | 只看该作者
请问上拉电阻是测温模块自带的嘛。还是要自己自己加上
回复

使用道具 举报

32#
ID:740741 发表于 2020-4-29 11:15 | 只看该作者
最近准备学用这个,多谢楼主提供的资料
回复

使用道具 举报

33#
ID:757291 发表于 2020-6-11 16:56 | 只看该作者
感谢楼主 学习中
回复

使用道具 举报

34#
ID:782564 发表于 2020-6-20 12:42 | 只看该作者
对后期的学习非常有用
回复

使用道具 举报

35#
ID:843473 发表于 2020-11-14 14:19 | 只看该作者
刚刚注册,前来观摩学习!
回复

使用道具 举报

36#
ID:730069 发表于 2022-3-5 16:30 | 只看该作者
请问有完整的原理图嘛
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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