找回密码
 立即注册

QQ登录

只需一步,快速开始

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

1寸LED时钟修改的热敏电阻温度计显示带有鬼影 附单片机程序

  [复制链接]
跳转到指定楼层
楼主
ID:17109 发表于 2021-12-28 16:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
原来是用4位LED显示的时钟修改的热敏电阻温度计
修改成通电就显示温度计 4位LED显示正常,     修改去除. ds1302.c和ds1302.h .  热敏电阻温度显示带有鬼影    把     原来的程序   和修改的程序   放上给大家看看是那里出问题  那位师博能  看  修改后的程序那里出问题的,修改上传一下谢谢


单片机源程序如下:
  1. #include <reg51.h>
  2. #include <math.h>
  3. #include "ADC.H"

  4. sbit LED1      = P3 ^ 7;//数码管1
  5. sbit LED2      = P3 ^ 6;//数码管2
  6. sbit LED3      = P3 ^ 5;//数码管3
  7. sbit LED4      = P3 ^ 4;//数码管4

  8. //为了编程方便定义的位变量
  9. sbit a0   = ACC ^ 0;
  10. sbit a1   = ACC ^ 1;
  11. sbit a2   = ACC ^ 2;
  12. sbit a3   = ACC ^ 3;
  13. sbit a4   = ACC ^ 4;
  14. sbit a5   = ACC ^ 5;
  15. sbit a6   = ACC ^ 6;
  16. sbit a7   = ACC ^ 7;

  17. sfr AUXR        =   0x8E;   //0000,0000 辅助寄存器
  18. sfr P3M1        =   0xB1;
  19. sfr P3M0        =   0xB2;

  20. bit flag,dot_Bell=1;//闹钟调时闪烁标志位
  21. unsigned char id=1;
  22. unsigned char disbuff[4]        ={0};
  23. unsigned char time=0;
  24. unsigned int temp[1];
  25. unsigned int temp_num = 0;

  26. unsigned char code LEDData1 [ ] = {  0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff }; //正0-9LED数值
  27. unsigned char code LEDData2 [ ] = {  0xc0,0xcf,0xA4,0x86,0x8B,0x92,0x90,0xc7,0x80,0x82,0xff }; //反0-9LED数值

  28. void Delayms(unsigned int di) //延时
  29. {
  30.         unsigned int da,db;
  31.          for(da=0;da<di;da++)
  32.                    for(db=0;db<10;db++);
  33. }

  34. void Display(void)  //扫描方式led1~led4循环点亮
  35. {
  36.    time++;
  37.    if(time==1)
  38.    {  
  39.                          if(dot_Bell)
  40.                  {
  41.                                  P2=LEDData1[disbuff[0]]&0x7f;// 0x7F点亮DP小数点
  42.                                  LED1=0; LED4=1;
  43.                  }
  44.                          else
  45.                  {
  46.                                  P2=LEDData1[disbuff[0]];
  47.                                  LED1=0; LED4=1;
  48.                  }
  49.    }

  50.    if(time==2)
  51.    {
  52.                                 if(id>=3)
  53.                         {
  54.                          P2=(LEDData2[disbuff[1]])&0x7F;
  55.                                  LED1=1; LED2=0;
  56.                         }
  57.                         else
  58.                                 if(flag)
  59.                          {
  60.                                  P2=(LEDData2[disbuff[1]])&0x7F;
  61.                                  LED1=1; LED2=0;
  62.                          }
  63.                  else
  64.                  {
  65.                          P2=LEDData2[disbuff[1]];
  66.                                  LED1=1; LED2=0;
  67.                  }
  68.    }

  69.    if(time==3)
  70.    {
  71.      if(id>=3)
  72.           {
  73.          P2=LEDData1[disbuff[2]]&0x7f;
  74.          LED2=1; LED3=0;
  75.       }

  76.       else               
  77.       if(flag)
  78.           {
  79.          P2=LEDData1[disbuff[2]]&0x7f;
  80.          LED2=1; LED3=0;
  81.       }
  82.           else
  83.           {
  84.          P2=LEDData1[disbuff[2]];
  85.          LED2=1; LED3=0;
  86.       }
  87.         }
  88.          
  89.    if(time==4)
  90.    {
  91.      time=0;
  92.      if(disbuff[3]==0)
  93.     {
  94.       P2=LEDData1[10];
  95.       LED3=1; LED4=0;
  96.     }
  97.      else
  98.     {
  99.                 P2=LEDData1[disbuff[3]];
  100.         LED3=1; LED4=0;
  101.         }
  102.    }
  103. }



  104. /******************************************************************************/

  105. void Timer1Init(void)                //20毫秒@12.000MHz
  106. {
  107.         AUXR &= 0xBF;                //定时器时钟12T模式
  108.         TMOD &= 0x0F;                //设置定时器模式        
  109.         TL1 = 0xE0;                //设置定时初值
  110.         TH1 = 0xB1;                //设置定时初值
  111.         TF1 = 0;                //清除TF1标志
  112.         TR1 = 1;                //定时器1开始计时        
  113. }

  114. /******************************************************************************/


  115. void Timer1(void) interrupt 3 using 1
  116. {
  117.         temp_num++;
  118.         if(temp_num > 40)
  119.         {
  120.                 temp_num = 0;
  121.         }
  122.         
  123. }

  124. void ADC_convert(void)
  125. {
  126.         ET0 = 0;
  127.         if(temp_num == 0)
  128.         {
  129.                 GetADCResult(6,&temp[0]);
  130.           temp[0]=(unsigned int) ((1/(log(((float)temp[0]*4700/(1024-(float)temp[0]))/10000)/3950+1/298.15)-273.15)*100);
  131.                 temp_num = 1;
  132.         }
  133.                         
  134.         P2 = LEDData1[temp[0]/1000]; //千位
  135.         LED4 = 0;
  136.         Delayms(50);
  137.         LED4 = 1;
  138.         P2 = (LEDData1[temp[0]%1000/100])&0x7F;//百位
  139.         LED3 = 0;
  140.         Delayms(50);
  141.         LED3 = 1;
  142.         P2 = LEDData2[temp[0]%1000%100/10];//十位
  143.         LED2 = 0;
  144.         Delayms(50);
  145.         LED2 = 1;
  146.         P2 = 0xa7;//c
  147.         LED1 = 0;
  148.   Delayms(50);
  149.         LED1 = 1;
  150.         ET1 = 1;//启动定时器1
  151. }

  152. /******************************************************************************/
  153. void main(void)//主函数
  154. {

  155.   P3M1=0x00;
  156.         P3M0=0x08;
  157.         InitADC(); //初始化ADC
  158.         Timer1Init();
  159.         EA=1;
  160.         while(1)//主循环
  161.          {         
  162.                   Display();
  163.              switch( id )
  164.               {
  165.                                         case 1:ADC_convert();break;//显示温度        
  166.                  default:break;        
  167.               }
  168.         }//while
  169. }//main
复制代码

原来的程序.rar

593.54 KB, 下载次数: 21

修改的程序.zip

76.13 KB, 下载次数: 15

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

使用道具 举报

沙发
ID:301191 发表于 2021-12-29 05:13 | 只看该作者
顶一下
回复

使用道具 举报

板凳
ID:844772 发表于 2021-12-29 08:57 | 只看该作者
剔除了时间,那就把 main()里的 Display();删除,ADC_convert();本身就能显示啊。
回复

使用道具 举报

地板
ID:213173 发表于 2021-12-29 09:35 | 只看该作者
楼主显示函数写得有点复杂,自己也会看花眼,先简化再加一句消隐即可。

  1. #include <reg51.h>
  2. #include <math.h>
  3. #include "ADC.H"
  4. /*
  5. sbit LED1      = P3 ^ 7;//数码管1
  6. sbit LED2      = P3 ^ 6;//数码管2
  7. sbit LED3      = P3 ^ 5;//数码管3
  8. sbit LED4      = P3 ^ 4;//数码管4
  9. */
  10. sfr AUXR        =   0x8E;   //0000,0000 辅助寄存器
  11. sfr P3M1        =   0xB1;
  12. sfr P3M0        =   0xB2;

  13. unsigned char time=0;
  14. unsigned char code LEDData1[ ] = {  0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff }; //正0-9LED数值
  15. unsigned char code LEDData2[ ] = {  0xc0,0xcf,0xa4,0x86,0x8B,0x92,0x90,0xc7,0x80,0x82,0xff }; //反0-9LED数值
  16. unsigned char data disbuff[4];
  17. unsigned int  temp[1];

  18. /******************************************************************************/
  19. void Timer1Init(void)                //2毫秒@12.000MHz
  20. {
  21.         AUXR |= 0x40;                //定时器时钟1T模式
  22.         TMOD &= 0x0F;                //设置定时器模式
  23.         TL1 = 0x40;                //设置定时初始值
  24.         TH1 = 0xA2;                //设置定时初始值
  25.         TF1 = 0;                //清除TF1标志
  26.         TR1 = 1;                //定时器1开始计时
  27. }

  28. void ADC_convert(void)
  29. {
  30.         if(temp_num == 0)
  31.         {
  32.                 GetADCResult(6,&temp[0]);
  33.                 Temp=(unsigned int) ((1/(log(((float)temp[0]*4700/(1024-(float)temp[0]))/10000)/3950+1/298.15)-273.15)*100);
  34.                 temp_num = 1;
  35.         }
  36. }

  37. void Display(void)  //扫描方式led1~led4循环点亮
  38. {
  39.         disbuff[0]=0x70;//.C
  40.         disbuff[1]=LEDData2[temp[0]/10%10];
  41.         disbuff[2]=LEDData1[temp[0]/100%10]&0x7f;
  42.         disbuff[3]=LEDData1[temp[0]/1000%10];

  43.         P3|=0xf0;//消隐
  44.         P2=disbuff[time];//段码
  45.         P3&=~(0x10<<time);//位码

  46.         time=++time%4;
  47. }
  48. /******************************************************************************/
  49. void main(void)//主函数
  50. {
  51.         P3M1=0x00;
  52.         P3M0=0x08;
  53.         InitADC(); //初始化ADC
  54.         Timer1Init();
  55.         while(1)//主循环
  56.         {         
  57.                 if(TF1)//查询T1中断请求标志
  58.                 {
  59.                         TF1=0;//清0 TF1标志
  60.                         ADC_convert()//读取ADC并转换为温度值
  61.                         Display();//动态数码管显示
  62.                 }
  63.         }//while
  64. }//main
复制代码



回复

使用道具 举报

5#
ID:488334 发表于 2021-12-29 10:32 | 只看该作者
建议你显示和温度数值处理分开做,显示就做显示,放在一定的时间内例如1ms。main函数里面的while(1ms标志位)循环加一个1ms的标志位,1ms时间够程序跑完的,数码管也可以均匀亮度,如果觉得亮度不够,就改成100us,甚至可以10us放在中断里面显示。
回复

使用道具 举报

6#
ID:17109 发表于 2021-12-29 20:54 来自手机 | 只看该作者
wulin 发表于 2021-12-29 09:35
楼主显示函数写得有点复杂,自己也会看花眼,先简化再加一句消隐即可。

师傅你好,可以编译打包发上吗?谢谢
回复

使用道具 举报

7#
ID:883242 发表于 2021-12-29 21:00 | 只看该作者
ll13536121668 发表于 2021-12-29 20:54
师傅你好,可以编译打包发上吗?谢谢

按下“复制代码”,然后新建一个空文件,Ctrl-V即可。
回复

使用道具 举报

8#
ID:17109 发表于 2021-12-30 10:56 | 只看该作者
wulin 发表于 2021-12-29 09:35
楼主显示函数写得有点复杂,自己也会看花眼,先简化再加一句消隐即可。

我新建试过不知道是否出错 编译不到

师傅你好,可以编译打包发上吗?谢谢
回复

使用道具 举报

9#
ID:298123 发表于 2021-12-30 13:48 | 只看该作者
定时器中断去扫描显示,这样就不会被别的打断或者延迟。扫描频率足够就行
回复

使用道具 举报

10#
ID:998586 发表于 2021-12-30 14:15 | 只看该作者
增加消隐。一般电子原件都有寄生电容,关闭LED要电平翻转一下。
回复

使用道具 举报

11#
ID:17109 发表于 2022-1-4 14:07 来自手机 | 只看该作者
wulin 发表于 2021-12-29 09:35
楼主显示函数写得有点复杂,自己也会看花眼,先简化再加一句消隐即可。

师傅你好,可以编译打包发上吗?谢谢
回复

使用道具 举报

12#
ID:161164 发表于 2022-1-4 15:18 | 只看该作者
ll13536121668 发表于 2021-12-30 10:56
我新建试过不知道是否出错 编译不到

师傅你好,可以编译打包发上吗?谢谢

不是人人都有那个"ADC.h"头文挡
编译打包不了

学编程就要学懂看错误信息
把编译器的错误信息贴上来看看
回复

使用道具 举报

13#
ID:123289 发表于 2022-1-4 15:45 | 只看该作者
记住:改变显示内容时,让LED全黑就可以了。
回复

使用道具 举报

14#
ID:213173 发表于 2022-1-4 16:02 | 只看该作者
ll13536121668 发表于 2022-1-4 14:07
师傅你好,可以编译打包发上吗?谢谢

这段代码只是在你贴的代码基础上改写的,你的ADC_convert(void)函数计算很复杂,我没有验证是否正确。仿真也是屏蔽了ADC_convert(void)函数,定时器更改为51/12T 2ms,虚拟一个4位数的ADC返回值temp=1234,目的只是解决你的特殊用法4位数码管的鬼影问题。代码是随手写的,没有保存。如果你对这个仿真有兴趣可以给你重新写一个。
回复

使用道具 举报

15#
ID:17109 发表于 2022-1-4 21:55 来自手机 | 只看该作者
这样就感谢老师傅,编泽打包发上
回复

使用道具 举报

16#
ID:213173 发表于 2022-1-5 08:45 | 只看该作者
ll13536121668 发表于 2022-1-4 21:55
这样就感谢老师傅,编泽打包发上

两个文件对比一下很容易看明白,可以用ADC测温函数取代DS18b20函数。

改写前的文件 4位数码管时钟温度表仿真.rar (175.41 KB, 下载次数: 7)

改写后的文件 4位反向数码管时钟温度表仿真.rar (177.51 KB, 下载次数: 8)
回复

使用道具 举报

17#
ID:17109 发表于 2022-1-11 11:55 来自手机 | 只看该作者
wulin 发表于 2022-1-5 08:45
两个文件对比一下很容易看明白,可以用ADC测温函数取代DS18b20函数。

改写前的文件

师傅你好,能用你简化后贴出
的代码,用我的AD.C生成可用程序打包上传吗?谢谢
回复

使用道具 举报

18#
ID:526543 发表于 2022-1-11 13:42 | 只看该作者

建议你显示和温度数值处理分开做,显示就做显示,放在一定的时间内例如1ms。main函数里面的while(1ms标志位)循环加一个1ms的标志位,1ms时间够程序跑完的,数码管也可以均匀亮度,如果觉得亮度不够,就改成100us,甚至可以10us放在中断里面显示。
回复

使用道具 举报

19#
ID:17109 发表于 2022-1-12 20:15 来自手机 | 只看该作者
123456ZXC1 发表于 2022-1-11 13:42
建议你显示和温度数值处理分开做,显示就做显示,放在一定的时间内例如1ms。main函数里面的while(1ms标 ...


师傅你好,能用你简化后贴出
的代码,用我的AD.C生成可用程序打包上传吗
回复

使用道具 举报

20#
ID:213173 发表于 2022-1-12 22:22 | 只看该作者
ll13536121668 发表于 2022-1-11 11:55
师傅你好,能用你简化后贴出
的代码,用我的AD.C生成可用程序打包上传吗?谢谢

给你重新写了一个简化的程序,用的是你的ADC代码。你的温度计算公式的出处是在哪里找来的?没有外围硬件图根本无法判断是否可用。现在是注释掉的,显示函数直接显示ADC转换值,不是温度值。从你的代码不能正确判断MCU型号,简化的程序适用于STC12/STC15系列。
测试程序.rar (12.91 KB, 下载次数: 7)

  1. #include <reg51.h>
  2. #include <intrins.h>

  3. sfr AUXR = 0x8E;
  4. sfr P0M0 = 0x94; //
  5. sfr P0M1 = 0x93; //
  6. sfr P1M0 = 0x92; //  
  7. sfr P1M1 = 0x91;
  8. sfr P2M0 = 0x96; //   
  9. sfr P2M1 = 0x95; //  
  10. sfr P3M0 = 0xB2; //
  11. sfr P3M1 = 0xB1; //
  12. sfr P4   = 0xC0;
  13. sfr P4M0 = 0xB4; //
  14. sfr P4M1 = 0xB3; //
  15. sfr ADC_CONTR   =   0xBC;           //ADC控制寄存器
  16. sfr ADC_RES     =   0xBD;           //ADC高8位结果
  17. sfr ADC_LOW2    =   0xBE;           //ADC低2位结果
  18. sfr P1ASF       =   0x9D;           //P1口第2功能控制寄存器
  19. /*
  20. sbit LED1      = P3 ^ 7;//数码管1
  21. sbit LED2      = P3 ^ 6;//数码管2
  22. sbit LED3      = P3 ^ 5;//数码管3
  23. sbit LED4      = P3 ^ 4;//数码管4
  24. */
  25. #define ADC_POWER   0x80            //ADC电源控制位
  26. #define ADC_FLAG    0x10            //ADC完成标志
  27. #define ADC_START   0x08            //ADC起始控制位
  28. #define ADC_SPEEDLL 0x00            //540个时钟
  29. #define ADC_SPEEDL  0x20            //360个时钟
  30. #define ADC_SPEEDH  0x40            //180个时钟
  31. #define ADC_SPEEDHH 0x60            //90个时钟

  32. #define ADC_Channel        6                        //选择ADC通道110 将P1.6为温度接口

  33. unsigned char disbuff[4]={0};
  34. unsigned char time=0;
  35. unsigned int temp[1];
  36. unsigned char code LEDData1 [ ] = {  0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff }; //正0-9LED数值
  37. unsigned char code LEDData2 [ ] = {  0xc0,0xcf,0xA4,0x86,0x8B,0x92,0x90,0xc7,0x80,0x82,0xff }; //反0-9LED数值

  38. void GetADCResult(unsigned char ch,unsigned int *value);
  39. void InitADC(void);
  40. void ADC_convert(void);
  41. void Timer0Init(void);
  42. /*----------------------------
  43. Get ADC result
  44. ----------------------------*/
  45. void GetADCResult(unsigned char ch,unsigned int *value)
  46. {
  47.         ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START;
  48.     _nop_();                        //Must wait before inquiry
  49.     _nop_();
  50.     _nop_();
  51.     _nop_();
  52.     _nop_();                        //Must wait before inquiry
  53.     _nop_();
  54.     while(!(ADC_CONTR & ADC_FLAG));//Wait complete flag
  55.     ADC_CONTR &= ~ADC_FLAG;         //Close ADC

  56.         *value = 0;
  57.         *value = ADC_RES;
  58.         *value = ((*value)*4 + ADC_LOW2);                //Return ADC result.×¢êíμ?′????ò·μ??8??ADC?á1?
  59. }
  60. /*----------------------------
  61. Initial ADC sfr
  62. ----------------------------*/
  63. void InitADC(void)
  64. {
  65.         P1ASF = 0x40;                        //Open channels ADC function 0100 0000 p1.6使用AD功能
  66.         ADC_RES  = 0;                                    //Clear previous result
  67.         ADC_LOW2 = 0;
  68.         ADC_CONTR = ADC_POWER | ADC_SPEEDLL;        //ADC power-on and dela
  69. }
  70. /******************************************************************************/
  71. void Display(void)  //扫描方式led1~led4循环点亮
  72. {
  73.         disbuff[0]=0x70;//.C
  74.         disbuff[1]=LEDData2[temp[0]/10%10];
  75.         disbuff[2]=LEDData1[temp[0]/100%10]&0x7f;
  76.         disbuff[3]=LEDData1[temp[0]/1000%10];
  77.        
  78.         P3|=0xf0;//消隐
  79.         P2=disbuff[time];//段码
  80.         P3&=~(0x10<<time);//位码
  81.        
  82.         time=++time%4;
  83. }
  84. /******************************************************************************/
  85. void Timer0Init(void)                //5毫秒@11.0592MHz
  86. {
  87.         AUXR |= 0x80;                //定时器时钟1T模式
  88.         TMOD &= 0xF0;                //设置定时器模式
  89.         TL0 = 0x00;                //设置定时初始值
  90.         TH0 = 0x28;                //设置定时初始值
  91.         TF0 = 0;                //清除TF0标志
  92.         TR0 = 1;                //定时器0开始计时
  93. }
  94. /******************************************************************************/
  95. void ADC_convert(void)
  96. {
  97.         GetADCResult(6,&temp[0]);       
  98. // 此处计算方法有问题,log是什么鬼?temp[0]保存的是ADC结果,数据范围0~1023,代入显示函数可以正常显示ADC结果
  99. //        temp[0]=(unsigned int) ((1/(log(((float)temp[0]*4700/(1024-(float)temp[0]))/10000)/3950+1/298.15)-273.15)*100);               
  100. }
  101. /******************************************************************************/
  102. void main(void)//主函数
  103. {
  104.         P0M0 = 0x00;
  105.         P0M1 = 0x00;
  106.         P1M0 = 0x00;
  107.         P1M1 = 0x40;
  108.         P2M0 = 0x00;
  109.         P2M1 = 0x00;
  110.         P3M0 = 0x00;
  111.         P3M1 = 0x00;
  112.         P4M0 = 0x00;
  113.         P4M1 = 0x00;
  114.         InitADC(); //初始化ADC
  115.         Timer0Init();//定时器T0初始化
  116.         while(1)//主循环
  117.         {       
  118.                 if(TF0)
  119.                 {
  120.                         TF0=0;
  121.                         ADC_convert();
  122.                         Display();
  123.                 }
  124.         }
  125. }
复制代码




回复

使用道具 举报

21#
ID:17109 发表于 2022-1-14 21:49 来自手机 | 只看该作者
wulin 发表于 2022-1-12 22:22
给你重新写了一个简化的程序,用的是你的ADC代码。你的温度计算公式的出处是在哪里找来的?没有外围硬件 ...

师傅测试了你的程序能显示,不能测温,拍电路你看看是否正确

1642167869754.jpg (871.99 KB, 下载次数: 80)

1642167869754.jpg
回复

使用道具 举报

22#
ID:17109 发表于 2022-1-14 21:52 来自手机 | 只看该作者
wulin 发表于 2022-1-12 22:22
给你重新写了一个简化的程序,用的是你的ADC代码。你的温度计算公式的出处是在哪里找来的?没有外围硬件 ...

测试的图片

IMG_20220114_211023.jpg (468.08 KB, 下载次数: 91)

IMG_20220114_211023.jpg
回复

使用道具 举报

23#
ID:17109 发表于 2022-1-14 21:54 来自手机 | 只看该作者
wulin 发表于 2022-1-12 22:22
给你重新写了一个简化的程序,用的是你的ADC代码。你的温度计算公式的出处是在哪里找来的?没有外围硬件 ...

电路图

IMG_20220114_215324.jpg (1.43 MB, 下载次数: 83)

IMG_20220114_215324.jpg
回复

使用道具 举报

24#
ID:213173 发表于 2022-1-14 22:55 | 只看该作者

如果显示的数字能随温度传感器变化就算能检测温度,传感器输出的是电压值变化,需要用合适的计算方法转换成温度值。不知道你这计算方法哪来的? temp[0]=(unsigned int) ((1/(log(((float)temp[0]*4700/(1024-(float)temp[0]))/10000)/3950+1/298.15)-273.15)*100);
回复

使用道具 举报

25#
ID:17109 发表于 2022-1-15 00:45 来自手机 | 只看该作者
wulin 发表于 2022-1-14 22:55
如果显示的数字能随温度传感器变化就算能检测温度,传感器输出的是电压值变化,需要用合适的计算方法转换 ...

把这段加入
回复

使用道具 举报

26#
ID:17109 发表于 2022-1-15 00:56 来自手机 | 只看该作者
wulin 发表于 2022-1-14 22:55
如果显示的数字能随温度传感器变化就算能检测温度,传感器输出的是电压值变化,需要用合适的计算方法转换 ...

师傅,编写一个合理的程序,带测温的可以吗?
回复

使用道具 举报

27#
ID:213173 发表于 2022-1-15 08:08 | 只看该作者
ll13536121668 发表于 2022-1-15 00:56
师傅,编写一个合理的程序,带测温的可以吗?

难道这个不合理?难道这个不能测温?NTC热敏电阻规格众多,B值各不相同,温阻曲线呈非线性,分压电阻需要按测温范围取值。几乎不可能仅凭一个通用公式计算就能制作一款能实用的温度计!
回复

使用道具 举报

28#
ID:17109 发表于 2022-1-15 12:30 来自手机 | 只看该作者
wulin 发表于 2022-1-15 08:08
难道这个不合理?难道这个不能测温?NTC热敏电阻规格众多,B值各不相同,温阻曲线呈非线性,分压电阻需要 ...

能显示,但是不能测温
回复

使用道具 举报

29#
ID:17109 发表于 2022-1-15 12:33 来自手机 | 只看该作者
wulin 发表于 2022-1-15 08:08
难道这个不合理?难道这个不能测温?NTC热敏电阻规格众多,B值各不相同,温阻曲线呈非线性,分压电阻需要 ...

把注释掉的重新开启就编译不到了

IMG_20220115_121552.jpg (822.15 KB, 下载次数: 71)

IMG_20220115_121552.jpg
回复

使用道具 举报

30#
ID:17109 发表于 2022-1-15 14:37 来自手机 | 只看该作者
wulin 发表于 2022-1-15 08:08
难道这个不合理?难道这个不能测温?NTC热敏电阻规格众多,B值各不相同,温阻曲线呈非线性,分压电阻需要 ...

编译不到

IMG_20220115_121549.jpg (1.31 MB, 下载次数: 90)

IMG_20220115_121549.jpg
回复

使用道具 举报

31#
ID:213173 发表于 2022-1-15 15:15 | 只看该作者

编译不了要问你自己根据什么理由写了这条代码,log是什么玩意?
回复

使用道具 举报

32#
ID:17109 发表于 2022-1-15 16:27 来自手机 | 只看该作者
wulin 发表于 2022-1-15 08:08
难道这个不合理?难道这个不能测温?NTC热敏电阻规格众多,B值各不相同,温阻曲线呈非线性,分压电阻需要 ...

把注释掉的重新开启就编译不到了
回复

使用道具 举报

33#
ID:17109 发表于 2022-1-15 21:43 来自手机 | 只看该作者
wulin 发表于 2022-1-15 15:15
编译不了要问你自己根据什么理由写了这条代码,log是什么玩意?

师傅,看看要什么修改才能编绎成功,可以上传过来吗?谢谢
回复

使用道具 举报

34#
ID:213173 发表于 2022-1-16 10:45 | 只看该作者
ll13536121668 发表于 2022-1-15 21:43
师傅,看看要什么修改才能编绎成功,可以上传过来吗?谢谢

你把这个程序看懂了用NTC测温就成了。
-30~150度数码管温度计(对分查表法).rar (27.25 KB, 下载次数: 17)

回复

使用道具 举报

35#
ID:979299 发表于 2022-1-16 13:23 | 只看该作者
用单片机做温度计为什么不用18B20之类的采集呢,用NTC之类的不用单片机也可以做成温度计的
回复

使用道具 举报

36#
ID:17109 发表于 2022-1-18 01:31 来自手机 | 只看该作者
兴安xa 发表于 2022-1-16 13:23
用单片机做温度计为什么不用18B20之类的采集呢,用NTC之类的不用单片机也可以做成温度计的

不用单片机的NTC温度计,电路图有吗?上传上来看看
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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