標(biāo)題: 1寸LED時(shí)鐘修改的熱敏電阻溫度計(jì)顯示帶有鬼影 附單片機(jī)程序 [打印本頁(yè)]

作者: ll13536121668    時(shí)間: 2021-12-28 16:21
標(biāo)題: 1寸LED時(shí)鐘修改的熱敏電阻溫度計(jì)顯示帶有鬼影 附單片機(jī)程序
原來(lái)是用4位LED顯示的時(shí)鐘修改的熱敏電阻溫度計(jì)
修改成通電就顯示溫度計(jì) 4位LED顯示正常,     修改去除. ds1302.c和ds1302.h .  熱敏電阻溫度顯示帶有鬼影    把     原來(lái)的程序   和修改的程序   放上給大家看看是那里出問(wèn)題  那位師博能  看  修改后的程序那里出問(wèn)題的,修改上傳一下謝謝


單片機(jī)源程序如下:
  1. #include <reg51.h>
  2. #include <math.h>
  3. #include "ADC.H"

  4. sbit LED1      = P3 ^ 7;//數(shù)碼管1
  5. sbit LED2      = P3 ^ 6;//數(shù)碼管2
  6. sbit LED3      = P3 ^ 5;//數(shù)碼管3
  7. sbit LED4      = P3 ^ 4;//數(shù)碼管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;//鬧鐘調(diào)時(shí)閃爍標(biāo)志位
  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數(shù)值
  27. unsigned char code LEDData2 [ ] = {  0xc0,0xcf,0xA4,0x86,0x8B,0x92,0x90,0xc7,0x80,0x82,0xff }; //反0-9LED數(shù)值

  28. void Delayms(unsigned int di) //延時(shí)
  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循環(huán)點(diǎn)亮
  35. {
  36.    time++;
  37.    if(time==1)
  38.    {  
  39.                          if(dot_Bell)
  40.                  {
  41.                                  P2=LEDData1[disbuff[0]]&0x7f;// 0x7F點(diǎn)亮DP小數(shù)點(diǎn)
  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;                //定時(shí)器時(shí)鐘12T模式
  108.         TMOD &= 0x0F;                //設(shè)置定時(shí)器模式        
  109.         TL1 = 0xE0;                //設(shè)置定時(shí)初值
  110.         TH1 = 0xB1;                //設(shè)置定時(shí)初值
  111.         TF1 = 0;                //清除TF1標(biāo)志
  112.         TR1 = 1;                //定時(shí)器1開(kāi)始計(jì)時(shí)        
  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;//啟動(dòng)定時(shí)器1
  151. }

  152. /******************************************************************************/
  153. void main(void)//主函數(shù)
  154. {

  155.   P3M1=0x00;
  156.         P3M0=0x08;
  157.         InitADC(); //初始化ADC
  158.         Timer1Init();
  159.         EA=1;
  160.         while(1)//主循環(huán)
  161.          {         
  162.                   Display();
  163.              switch( id )
  164.               {
  165.                                         case 1:ADC_convert();break;//顯示溫度        
  166.                  default:break;        
  167.               }
  168.         }//while
  169. }//main
復(fù)制代碼

原來(lái)的程序.rar

593.54 KB, 下載次數(shù): 21

修改的程序.zip

76.13 KB, 下載次數(shù): 15


作者: 人工置頂員    時(shí)間: 2021-12-29 05:13
頂一下
作者: glinfei    時(shí)間: 2021-12-29 08:57
剔除了時(shí)間,那就把 main()里的 Display();刪除,ADC_convert();本身就能顯示啊。
作者: wulin    時(shí)間: 2021-12-29 09:35
樓主顯示函數(shù)寫(xiě)得有點(diǎn)復(fù)雜,自己也會(huì)看花眼,先簡(jiǎn)化再加一句消隱即可。

  1. #include <reg51.h>
  2. #include <math.h>
  3. #include "ADC.H"
  4. /*
  5. sbit LED1      = P3 ^ 7;//數(shù)碼管1
  6. sbit LED2      = P3 ^ 6;//數(shù)碼管2
  7. sbit LED3      = P3 ^ 5;//數(shù)碼管3
  8. sbit LED4      = P3 ^ 4;//數(shù)碼管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數(shù)值
  15. unsigned char code LEDData2[ ] = {  0xc0,0xcf,0xa4,0x86,0x8B,0x92,0x90,0xc7,0x80,0x82,0xff }; //反0-9LED數(shù)值
  16. unsigned char data disbuff[4];
  17. unsigned int  temp[1];

  18. /******************************************************************************/
  19. void Timer1Init(void)                //2毫秒@12.000MHz
  20. {
  21.         AUXR |= 0x40;                //定時(shí)器時(shí)鐘1T模式
  22.         TMOD &= 0x0F;                //設(shè)置定時(shí)器模式
  23.         TL1 = 0x40;                //設(shè)置定時(shí)初始值
  24.         TH1 = 0xA2;                //設(shè)置定時(shí)初始值
  25.         TF1 = 0;                //清除TF1標(biāo)志
  26.         TR1 = 1;                //定時(shí)器1開(kāi)始計(jì)時(shí)
  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循環(huán)點(diǎn)亮
  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)//主函數(shù)
  50. {
  51.         P3M1=0x00;
  52.         P3M0=0x08;
  53.         InitADC(); //初始化ADC
  54.         Timer1Init();
  55.         while(1)//主循環(huán)
  56.         {         
  57.                 if(TF1)//查詢(xún)T1中斷請(qǐng)求標(biāo)志
  58.                 {
  59.                         TF1=0;//清0 TF1標(biāo)志
  60.                         ADC_convert()//讀取ADC并轉(zhuǎn)換為溫度值
  61.                         Display();//動(dòng)態(tài)數(shù)碼管顯示
  62.                 }
  63.         }//while
  64. }//main
復(fù)制代碼




作者: tatachaoren    時(shí)間: 2021-12-29 10:32
建議你顯示和溫度數(shù)值處理分開(kāi)做,顯示就做顯示,放在一定的時(shí)間內(nèi)例如1ms。main函數(shù)里面的while(1ms標(biāo)志位)循環(huán)加一個(gè)1ms的標(biāo)志位,1ms時(shí)間夠程序跑完的,數(shù)碼管也可以均勻亮度,如果覺(jué)得亮度不夠,就改成100us,甚至可以10us放在中斷里面顯示。
作者: ll13536121668    時(shí)間: 2021-12-29 20:54
wulin 發(fā)表于 2021-12-29 09:35
樓主顯示函數(shù)寫(xiě)得有點(diǎn)復(fù)雜,自己也會(huì)看花眼,先簡(jiǎn)化再加一句消隱即可。

師傅你好,可以編譯打包發(fā)上嗎?謝謝
作者: Hephaestus    時(shí)間: 2021-12-29 21:00
ll13536121668 發(fā)表于 2021-12-29 20:54
師傅你好,可以編譯打包發(fā)上嗎?謝謝

按下“復(fù)制代碼”,然后新建一個(gè)空文件,Ctrl-V即可。
作者: ll13536121668    時(shí)間: 2021-12-30 10:56
wulin 發(fā)表于 2021-12-29 09:35
樓主顯示函數(shù)寫(xiě)得有點(diǎn)復(fù)雜,自己也會(huì)看花眼,先簡(jiǎn)化再加一句消隱即可。

我新建試過(guò)不知道是否出錯(cuò) 編譯不到

師傅你好,可以編譯打包發(fā)上嗎?謝謝
作者: hz_dyg    時(shí)間: 2021-12-30 13:48
定時(shí)器中斷去掃描顯示,這樣就不會(huì)被別的打斷或者延遲。掃描頻率足夠就行
作者: 遠(yuǎn)眺    時(shí)間: 2021-12-30 14:15
增加消隱。一般電子原件都有寄生電容,關(guān)閉LED要電平翻轉(zhuǎn)一下。
作者: ll13536121668    時(shí)間: 2022-1-4 14:07
wulin 發(fā)表于 2021-12-29 09:35
樓主顯示函數(shù)寫(xiě)得有點(diǎn)復(fù)雜,自己也會(huì)看花眼,先簡(jiǎn)化再加一句消隱即可。

師傅你好,可以編譯打包發(fā)上嗎?謝謝
作者: lkc8210    時(shí)間: 2022-1-4 15:18
ll13536121668 發(fā)表于 2021-12-30 10:56
我新建試過(guò)不知道是否出錯(cuò) 編譯不到

師傅你好,可以編譯打包發(fā)上嗎?謝謝

不是人人都有那個(gè)"ADC.h"頭文擋
編譯打包不了

學(xué)編程就要學(xué)懂看錯(cuò)誤信息
把編譯器的錯(cuò)誤信息貼上來(lái)看看
作者: yzwzfyz    時(shí)間: 2022-1-4 15:45
記。焊淖冿@示內(nèi)容時(shí),讓LED全黑就可以了。
作者: wulin    時(shí)間: 2022-1-4 16:02
ll13536121668 發(fā)表于 2022-1-4 14:07
師傅你好,可以編譯打包發(fā)上嗎?謝謝

這段代碼只是在你貼的代碼基礎(chǔ)上改寫(xiě)的,你的ADC_convert(void)函數(shù)計(jì)算很復(fù)雜,我沒(méi)有驗(yàn)證是否正確。仿真也是屏蔽了ADC_convert(void)函數(shù),定時(shí)器更改為51/12T 2ms,虛擬一個(gè)4位數(shù)的ADC返回值temp=1234,目的只是解決你的特殊用法4位數(shù)碼管的鬼影問(wèn)題。代碼是隨手寫(xiě)的,沒(méi)有保存。如果你對(duì)這個(gè)仿真有興趣可以給你重新寫(xiě)一個(gè)。
作者: ll13536121668    時(shí)間: 2022-1-4 21:55
這樣就感謝老師傅,編澤打包發(fā)上
作者: wulin    時(shí)間: 2022-1-5 08:45
ll13536121668 發(fā)表于 2022-1-4 21:55
這樣就感謝老師傅,編澤打包發(fā)上

兩個(gè)文件對(duì)比一下很容易看明白,可以用ADC測(cè)溫函數(shù)取代DS18b20函數(shù)。

改寫(xiě)前的文件 4位數(shù)碼管時(shí)鐘溫度表仿真.rar (175.41 KB, 下載次數(shù): 7)

改寫(xiě)后的文件 4位反向數(shù)碼管時(shí)鐘溫度表仿真.rar (177.51 KB, 下載次數(shù): 8)

作者: ll13536121668    時(shí)間: 2022-1-11 11:55
wulin 發(fā)表于 2022-1-5 08:45
兩個(gè)文件對(duì)比一下很容易看明白,可以用ADC測(cè)溫函數(shù)取代DS18b20函數(shù)。

改寫(xiě)前的文件

師傅你好,能用你簡(jiǎn)化后貼出
的代碼,用我的AD.C生成可用程序打包上傳嗎?謝謝
作者: 123456ZXC1    時(shí)間: 2022-1-11 13:42

建議你顯示和溫度數(shù)值處理分開(kāi)做,顯示就做顯示,放在一定的時(shí)間內(nèi)例如1ms。main函數(shù)里面的while(1ms標(biāo)志位)循環(huán)加一個(gè)1ms的標(biāo)志位,1ms時(shí)間夠程序跑完的,數(shù)碼管也可以均勻亮度,如果覺(jué)得亮度不夠,就改成100us,甚至可以10us放在中斷里面顯示。
作者: ll13536121668    時(shí)間: 2022-1-12 20:15
123456ZXC1 發(fā)表于 2022-1-11 13:42
建議你顯示和溫度數(shù)值處理分開(kāi)做,顯示就做顯示,放在一定的時(shí)間內(nèi)例如1ms。main函數(shù)里面的while(1ms標(biāo) ...


師傅你好,能用你簡(jiǎn)化后貼出
的代碼,用我的AD.C生成可用程序打包上傳嗎
作者: wulin    時(shí)間: 2022-1-12 22:22
ll13536121668 發(fā)表于 2022-1-11 11:55
師傅你好,能用你簡(jiǎn)化后貼出
的代碼,用我的AD.C生成可用程序打包上傳嗎?謝謝

給你重新寫(xiě)了一個(gè)簡(jiǎn)化的程序,用的是你的ADC代碼。你的溫度計(jì)算公式的出處是在哪里找來(lái)的?沒(méi)有外圍硬件圖根本無(wú)法判斷是否可用,F(xiàn)在是注釋掉的,顯示函數(shù)直接顯示ADC轉(zhuǎn)換值,不是溫度值。從你的代碼不能正確判斷MCU型號(hào),簡(jiǎn)化的程序適用于STC12/STC15系列。
測(cè)試程序.rar (12.91 KB, 下載次數(shù): 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位結(jié)果
  17. sfr ADC_LOW2    =   0xBE;           //ADC低2位結(jié)果
  18. sfr P1ASF       =   0x9D;           //P1口第2功能控制寄存器
  19. /*
  20. sbit LED1      = P3 ^ 7;//數(shù)碼管1
  21. sbit LED2      = P3 ^ 6;//數(shù)碼管2
  22. sbit LED3      = P3 ^ 5;//數(shù)碼管3
  23. sbit LED4      = P3 ^ 4;//數(shù)碼管4
  24. */
  25. #define ADC_POWER   0x80            //ADC電源控制位
  26. #define ADC_FLAG    0x10            //ADC完成標(biāo)志
  27. #define ADC_START   0x08            //ADC起始控制位
  28. #define ADC_SPEEDLL 0x00            //540個(gè)時(shí)鐘
  29. #define ADC_SPEEDL  0x20            //360個(gè)時(shí)鐘
  30. #define ADC_SPEEDH  0x40            //180個(gè)時(shí)鐘
  31. #define ADC_SPEEDHH 0x60            //90個(gè)時(shí)鐘

  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數(shù)值
  37. unsigned char code LEDData2 [ ] = {  0xc0,0xcf,0xA4,0x86,0x8B,0x92,0x90,0xc7,0x80,0x82,0xff }; //反0-9LED數(shù)值

  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循環(huán)點(diǎn)亮
  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;                //定時(shí)器時(shí)鐘1T模式
  88.         TMOD &= 0xF0;                //設(shè)置定時(shí)器模式
  89.         TL0 = 0x00;                //設(shè)置定時(shí)初始值
  90.         TH0 = 0x28;                //設(shè)置定時(shí)初始值
  91.         TF0 = 0;                //清除TF0標(biāo)志
  92.         TR0 = 1;                //定時(shí)器0開(kāi)始計(jì)時(shí)
  93. }
  94. /******************************************************************************/
  95. void ADC_convert(void)
  96. {
  97.         GetADCResult(6,&temp[0]);       
  98. // 此處計(jì)算方法有問(wèn)題,log是什么鬼?temp[0]保存的是ADC結(jié)果,數(shù)據(jù)范圍0~1023,代入顯示函數(shù)可以正常顯示ADC結(jié)果
  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)//主函數(shù)
  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();//定時(shí)器T0初始化
  116.         while(1)//主循環(huán)
  117.         {       
  118.                 if(TF0)
  119.                 {
  120.                         TF0=0;
  121.                         ADC_convert();
  122.                         Display();
  123.                 }
  124.         }
  125. }
復(fù)制代碼





作者: ll13536121668    時(shí)間: 2022-1-14 21:49
wulin 發(fā)表于 2022-1-12 22:22
給你重新寫(xiě)了一個(gè)簡(jiǎn)化的程序,用的是你的ADC代碼。你的溫度計(jì)算公式的出處是在哪里找來(lái)的?沒(méi)有外圍硬件 ...

師傅測(cè)試了你的程序能顯示,不能測(cè)溫,拍電路你看看是否正確

1642167869754.jpg (871.99 KB, 下載次數(shù): 80)

1642167869754.jpg

作者: ll13536121668    時(shí)間: 2022-1-14 21:52
wulin 發(fā)表于 2022-1-12 22:22
給你重新寫(xiě)了一個(gè)簡(jiǎn)化的程序,用的是你的ADC代碼。你的溫度計(jì)算公式的出處是在哪里找來(lái)的?沒(méi)有外圍硬件 ...

測(cè)試的圖片

IMG_20220114_211023.jpg (468.08 KB, 下載次數(shù): 91)

IMG_20220114_211023.jpg

作者: ll13536121668    時(shí)間: 2022-1-14 21:54
wulin 發(fā)表于 2022-1-12 22:22
給你重新寫(xiě)了一個(gè)簡(jiǎn)化的程序,用的是你的ADC代碼。你的溫度計(jì)算公式的出處是在哪里找來(lái)的?沒(méi)有外圍硬件 ...

電路圖

IMG_20220114_215324.jpg (1.43 MB, 下載次數(shù): 83)

IMG_20220114_215324.jpg

作者: wulin    時(shí)間: 2022-1-14 22:55
ll13536121668 發(fā)表于 2022-1-14 21:54
電路圖

如果顯示的數(shù)字能隨溫度傳感器變化就算能檢測(cè)溫度,傳感器輸出的是電壓值變化,需要用合適的計(jì)算方法轉(zhuǎn)換成溫度值。不知道你這計(jì)算方法哪來(lái)的? temp[0]=(unsigned int) ((1/(log(((float)temp[0]*4700/(1024-(float)temp[0]))/10000)/3950+1/298.15)-273.15)*100);
作者: ll13536121668    時(shí)間: 2022-1-15 00:45
wulin 發(fā)表于 2022-1-14 22:55
如果顯示的數(shù)字能隨溫度傳感器變化就算能檢測(cè)溫度,傳感器輸出的是電壓值變化,需要用合適的計(jì)算方法轉(zhuǎn)換 ...

把這段加入
作者: ll13536121668    時(shí)間: 2022-1-15 00:56
wulin 發(fā)表于 2022-1-14 22:55
如果顯示的數(shù)字能隨溫度傳感器變化就算能檢測(cè)溫度,傳感器輸出的是電壓值變化,需要用合適的計(jì)算方法轉(zhuǎn)換 ...

師傅,編寫(xiě)一個(gè)合理的程序,帶測(cè)溫的可以嗎?
作者: wulin    時(shí)間: 2022-1-15 08:08
ll13536121668 發(fā)表于 2022-1-15 00:56
師傅,編寫(xiě)一個(gè)合理的程序,帶測(cè)溫的可以嗎?

難道這個(gè)不合理?難道這個(gè)不能測(cè)溫?NTC熱敏電阻規(guī)格眾多,B值各不相同,溫阻曲線呈非線性,分壓電阻需要按測(cè)溫范圍取值。幾乎不可能僅憑一個(gè)通用公式計(jì)算就能制作一款能實(shí)用的溫度計(jì)!
作者: ll13536121668    時(shí)間: 2022-1-15 12:30
wulin 發(fā)表于 2022-1-15 08:08
難道這個(gè)不合理?難道這個(gè)不能測(cè)溫?NTC熱敏電阻規(guī)格眾多,B值各不相同,溫阻曲線呈非線性,分壓電阻需要 ...

能顯示,但是不能測(cè)溫
作者: ll13536121668    時(shí)間: 2022-1-15 12:33
wulin 發(fā)表于 2022-1-15 08:08
難道這個(gè)不合理?難道這個(gè)不能測(cè)溫?NTC熱敏電阻規(guī)格眾多,B值各不相同,溫阻曲線呈非線性,分壓電阻需要 ...

把注釋掉的重新開(kāi)啟就編譯不到了

IMG_20220115_121552.jpg (822.15 KB, 下載次數(shù): 71)

IMG_20220115_121552.jpg

作者: ll13536121668    時(shí)間: 2022-1-15 14:37
wulin 發(fā)表于 2022-1-15 08:08
難道這個(gè)不合理?難道這個(gè)不能測(cè)溫?NTC熱敏電阻規(guī)格眾多,B值各不相同,溫阻曲線呈非線性,分壓電阻需要 ...

編譯不到

IMG_20220115_121549.jpg (1.31 MB, 下載次數(shù): 90)

IMG_20220115_121549.jpg

作者: wulin    時(shí)間: 2022-1-15 15:15
ll13536121668 發(fā)表于 2022-1-15 14:37
編譯不到

編譯不了要問(wèn)你自己根據(jù)什么理由寫(xiě)了這條代碼,log是什么玩意?
作者: ll13536121668    時(shí)間: 2022-1-15 16:27
wulin 發(fā)表于 2022-1-15 08:08
難道這個(gè)不合理?難道這個(gè)不能測(cè)溫?NTC熱敏電阻規(guī)格眾多,B值各不相同,溫阻曲線呈非線性,分壓電阻需要 ...

把注釋掉的重新開(kāi)啟就編譯不到了

作者: ll13536121668    時(shí)間: 2022-1-15 21:43
wulin 發(fā)表于 2022-1-15 15:15
編譯不了要問(wèn)你自己根據(jù)什么理由寫(xiě)了這條代碼,log是什么玩意?

師傅,看看要什么修改才能編繹成功,可以上傳過(guò)來(lái)嗎?謝謝
作者: wulin    時(shí)間: 2022-1-16 10:45
ll13536121668 發(fā)表于 2022-1-15 21:43
師傅,看看要什么修改才能編繹成功,可以上傳過(guò)來(lái)嗎?謝謝

你把這個(gè)程序看懂了用NTC測(cè)溫就成了。
-30~150度數(shù)碼管溫度計(jì)(對(duì)分查表法).rar (27.25 KB, 下載次數(shù): 17)


作者: 興安xa    時(shí)間: 2022-1-16 13:23
用單片機(jī)做溫度計(jì)為什么不用18B20之類(lèi)的采集呢,用NTC之類(lèi)的不用單片機(jī)也可以做成溫度計(jì)的
作者: ll13536121668    時(shí)間: 2022-1-18 01:31
興安xa 發(fā)表于 2022-1-16 13:23
用單片機(jī)做溫度計(jì)為什么不用18B20之類(lèi)的采集呢,用NTC之類(lèi)的不用單片機(jī)也可以做成溫度計(jì)的

不用單片機(jī)的NTC溫度計(jì),電路圖有嗎?上傳上來(lái)看看




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1