找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 3963|回復(fù): 35
打印 上一主題 下一主題
收起左側(cè)

1寸LED時(shí)鐘修改的熱敏電阻溫度計(jì)顯示帶有鬼影 附單片機(jī)程序

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:17109 發(fā)表于 2021-12-28 16:21 | 只看該作者 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
原來是用4位LED顯示的時(shí)鐘修改的熱敏電阻溫度計(jì)
修改成通電就顯示溫度計(jì) 4位LED顯示正常,     修改去除. ds1302.c和ds1302.h .  熱敏電阻溫度顯示帶有鬼影    把     原來的程序   和修改的程序   放上給大家看看是那里出問題  那位師博能  看  修改后的程序那里出問題的,修改上傳一下謝謝


單片機(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開始計(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;//啟動定時(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ù)制代碼

原來的程序.rar

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

修改的程序.zip

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

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏5 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:301191 發(fā)表于 2021-12-29 05:13 | 只看該作者
頂一下
回復(fù)

使用道具 舉報(bào)

板凳
ID:844772 發(fā)表于 2021-12-29 08:57 | 只看該作者
剔除了時(shí)間,那就把 main()里的 Display();刪除,ADC_convert();本身就能顯示啊。
回復(fù)

使用道具 舉報(bào)

地板
ID:213173 發(fā)表于 2021-12-29 09:35 | 只看該作者
樓主顯示函數(shù)寫得有點(diǎn)復(fù)雜,自己也會看花眼,先簡化再加一句消隱即可。

  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開始計(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)//查詢T1中斷請求標(biāo)志
  58.                 {
  59.                         TF1=0;//清0 TF1標(biāo)志
  60.                         ADC_convert()//讀取ADC并轉(zhuǎn)換為溫度值
  61.                         Display();//動態(tài)數(shù)碼管顯示
  62.                 }
  63.         }//while
  64. }//main
復(fù)制代碼



回復(fù)

使用道具 舉報(bào)

5#
ID:488334 發(fā)表于 2021-12-29 10:32 | 只看該作者
建議你顯示和溫度數(shù)值處理分開做,顯示就做顯示,放在一定的時(shí)間內(nèi)例如1ms。main函數(shù)里面的while(1ms標(biāo)志位)循環(huán)加一個(gè)1ms的標(biāo)志位,1ms時(shí)間夠程序跑完的,數(shù)碼管也可以均勻亮度,如果覺得亮度不夠,就改成100us,甚至可以10us放在中斷里面顯示。
回復(fù)

使用道具 舉報(bào)

6#
ID:17109 發(fā)表于 2021-12-29 20:54 來自觸屏版 | 只看該作者
wulin 發(fā)表于 2021-12-29 09:35
樓主顯示函數(shù)寫得有點(diǎn)復(fù)雜,自己也會看花眼,先簡化再加一句消隱即可。

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

使用道具 舉報(bào)

7#
ID:883242 發(fā)表于 2021-12-29 21:00 | 只看該作者
ll13536121668 發(fā)表于 2021-12-29 20:54
師傅你好,可以編譯打包發(fā)上嗎?謝謝

按下“復(fù)制代碼”,然后新建一個(gè)空文件,Ctrl-V即可。
回復(fù)

使用道具 舉報(bào)

8#
ID:17109 發(fā)表于 2021-12-30 10:56 | 只看該作者
wulin 發(fā)表于 2021-12-29 09:35
樓主顯示函數(shù)寫得有點(diǎn)復(fù)雜,自己也會看花眼,先簡化再加一句消隱即可。

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

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

使用道具 舉報(bào)

9#
ID:298123 發(fā)表于 2021-12-30 13:48 | 只看該作者
定時(shí)器中斷去掃描顯示,這樣就不會被別的打斷或者延遲。掃描頻率足夠就行
回復(fù)

使用道具 舉報(bào)

10#
ID:998586 發(fā)表于 2021-12-30 14:15 | 只看該作者
增加消隱。一般電子原件都有寄生電容,關(guān)閉LED要電平翻轉(zhuǎn)一下。
回復(fù)

使用道具 舉報(bào)

11#
ID:17109 發(fā)表于 2022-1-4 14:07 來自觸屏版 | 只看該作者
wulin 發(fā)表于 2021-12-29 09:35
樓主顯示函數(shù)寫得有點(diǎn)復(fù)雜,自己也會看花眼,先簡化再加一句消隱即可。

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

使用道具 舉報(bào)

12#
ID:161164 發(fā)表于 2022-1-4 15:18 | 只看該作者
ll13536121668 發(fā)表于 2021-12-30 10:56
我新建試過不知道是否出錯(cuò) 編譯不到

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

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

學(xué)編程就要學(xué)懂看錯(cuò)誤信息
把編譯器的錯(cuò)誤信息貼上來看看
回復(fù)

使用道具 舉報(bào)

13#
ID:123289 發(fā)表于 2022-1-4 15:45 | 只看該作者
記�。焊淖冿@示內(nèi)容時(shí),讓LED全黑就可以了。
回復(fù)

使用道具 舉報(bào)

14#
ID:213173 發(fā)表于 2022-1-4 16:02 | 只看該作者
ll13536121668 發(fā)表于 2022-1-4 14:07
師傅你好,可以編譯打包發(fā)上嗎?謝謝

這段代碼只是在你貼的代碼基礎(chǔ)上改寫的,你的ADC_convert(void)函數(shù)計(jì)算很復(fù)雜,我沒有驗(yàn)證是否正確。仿真也是屏蔽了ADC_convert(void)函數(shù),定時(shí)器更改為51/12T 2ms,虛擬一個(gè)4位數(shù)的ADC返回值temp=1234,目的只是解決你的特殊用法4位數(shù)碼管的鬼影問題。代碼是隨手寫的,沒有保存。如果你對這個(gè)仿真有興趣可以給你重新寫一個(gè)。
回復(fù)

使用道具 舉報(bào)

15#
ID:17109 發(fā)表于 2022-1-4 21:55 來自觸屏版 | 只看該作者
這樣就感謝老師傅,編澤打包發(fā)上
回復(fù)

使用道具 舉報(bào)

16#
ID:213173 發(fā)表于 2022-1-5 08:45 | 只看該作者
ll13536121668 發(fā)表于 2022-1-4 21:55
這樣就感謝老師傅,編澤打包發(fā)上

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

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

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

使用道具 舉報(bào)

17#
ID:17109 發(fā)表于 2022-1-11 11:55 來自觸屏版 | 只看該作者
wulin 發(fā)表于 2022-1-5 08:45
兩個(gè)文件對比一下很容易看明白,可以用ADC測溫函數(shù)取代DS18b20函數(shù)。

改寫前的文件

師傅你好,能用你簡化后貼出
的代碼,用我的AD.C生成可用程序打包上傳嗎?謝謝
回復(fù)

使用道具 舉報(bào)

18#
ID:526543 發(fā)表于 2022-1-11 13:42 | 只看該作者

建議你顯示和溫度數(shù)值處理分開做,顯示就做顯示,放在一定的時(shí)間內(nèi)例如1ms。main函數(shù)里面的while(1ms標(biāo)志位)循環(huán)加一個(gè)1ms的標(biāo)志位,1ms時(shí)間夠程序跑完的,數(shù)碼管也可以均勻亮度,如果覺得亮度不夠,就改成100us,甚至可以10us放在中斷里面顯示。
回復(fù)

使用道具 舉報(bào)

19#
ID:17109 發(fā)表于 2022-1-12 20:15 來自觸屏版 | 只看該作者
123456ZXC1 發(fā)表于 2022-1-11 13:42
建議你顯示和溫度數(shù)值處理分開做,顯示就做顯示,放在一定的時(shí)間內(nèi)例如1ms。main函數(shù)里面的while(1ms標(biāo) ...


師傅你好,能用你簡化后貼出
的代碼,用我的AD.C生成可用程序打包上傳嗎
回復(fù)

使用道具 舉報(bào)

20#
ID:213173 發(fā)表于 2022-1-12 22:22 | 只看該作者
ll13536121668 發(fā)表于 2022-1-11 11:55
師傅你好,能用你簡化后貼出
的代碼,用我的AD.C生成可用程序打包上傳嗎?謝謝

給你重新寫了一個(gè)簡化的程序,用的是你的ADC代碼。你的溫度計(jì)算公式的出處是在哪里找來的?沒有外圍硬件圖根本無法判斷是否可用�,F(xiàn)在是注釋掉的,顯示函數(shù)直接顯示ADC轉(zhuǎn)換值,不是溫度值。從你的代碼不能正確判斷MCU型號,簡化的程序適用于STC12/STC15系列。
測試程序.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開始計(jì)時(shí)
  93. }
  94. /******************************************************************************/
  95. void ADC_convert(void)
  96. {
  97.         GetADCResult(6,&temp[0]);       
  98. // 此處計(jì)算方法有問題,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ù)制代碼




回復(fù)

使用道具 舉報(bào)

21#
ID:17109 發(fā)表于 2022-1-14 21:49 來自觸屏版 | 只看該作者
wulin 發(fā)表于 2022-1-12 22:22
給你重新寫了一個(gè)簡化的程序,用的是你的ADC代碼。你的溫度計(jì)算公式的出處是在哪里找來的?沒有外圍硬件 ...

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

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

1642167869754.jpg
回復(fù)

使用道具 舉報(bào)

22#
ID:17109 發(fā)表于 2022-1-14 21:52 來自觸屏版 | 只看該作者
wulin 發(fā)表于 2022-1-12 22:22
給你重新寫了一個(gè)簡化的程序,用的是你的ADC代碼。你的溫度計(jì)算公式的出處是在哪里找來的?沒有外圍硬件 ...

測試的圖片

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

IMG_20220114_211023.jpg
回復(fù)

使用道具 舉報(bào)

23#
ID:17109 發(fā)表于 2022-1-14 21:54 來自觸屏版 | 只看該作者
wulin 發(fā)表于 2022-1-12 22:22
給你重新寫了一個(gè)簡化的程序,用的是你的ADC代碼。你的溫度計(jì)算公式的出處是在哪里找來的?沒有外圍硬件 ...

電路圖

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

IMG_20220114_215324.jpg
回復(fù)

使用道具 舉報(bào)

24#
ID:213173 發(fā)表于 2022-1-14 22:55 | 只看該作者

如果顯示的數(shù)字能隨溫度傳感器變化就算能檢測溫度,傳感器輸出的是電壓值變化,需要用合適的計(jì)算方法轉(zhuǎn)換成溫度值。不知道你這計(jì)算方法哪來的? temp[0]=(unsigned int) ((1/(log(((float)temp[0]*4700/(1024-(float)temp[0]))/10000)/3950+1/298.15)-273.15)*100);
回復(fù)

使用道具 舉報(bào)

25#
ID:17109 發(fā)表于 2022-1-15 00:45 來自觸屏版 | 只看該作者
wulin 發(fā)表于 2022-1-14 22:55
如果顯示的數(shù)字能隨溫度傳感器變化就算能檢測溫度,傳感器輸出的是電壓值變化,需要用合適的計(jì)算方法轉(zhuǎn)換 ...

把這段加入
回復(fù)

使用道具 舉報(bào)

26#
ID:17109 發(fā)表于 2022-1-15 00:56 來自觸屏版 | 只看該作者
wulin 發(fā)表于 2022-1-14 22:55
如果顯示的數(shù)字能隨溫度傳感器變化就算能檢測溫度,傳感器輸出的是電壓值變化,需要用合適的計(jì)算方法轉(zhuǎn)換 ...

師傅,編寫一個(gè)合理的程序,帶測溫的可以嗎?
回復(fù)

使用道具 舉報(bào)

27#
ID:213173 發(fā)表于 2022-1-15 08:08 | 只看該作者
ll13536121668 發(fā)表于 2022-1-15 00:56
師傅,編寫一個(gè)合理的程序,帶測溫的可以嗎?

難道這個(gè)不合理?難道這個(gè)不能測溫?NTC熱敏電阻規(guī)格眾多,B值各不相同,溫阻曲線呈非線性,分壓電阻需要按測溫范圍取值。幾乎不可能僅憑一個(gè)通用公式計(jì)算就能制作一款能實(shí)用的溫度計(jì)!
回復(fù)

使用道具 舉報(bào)

28#
ID:17109 發(fā)表于 2022-1-15 12:30 來自觸屏版 | 只看該作者
wulin 發(fā)表于 2022-1-15 08:08
難道這個(gè)不合理?難道這個(gè)不能測溫?NTC熱敏電阻規(guī)格眾多,B值各不相同,溫阻曲線呈非線性,分壓電阻需要 ...

能顯示,但是不能測溫
回復(fù)

使用道具 舉報(bào)

29#
ID:17109 發(fā)表于 2022-1-15 12:33 來自觸屏版 | 只看該作者
wulin 發(fā)表于 2022-1-15 08:08
難道這個(gè)不合理?難道這個(gè)不能測溫?NTC熱敏電阻規(guī)格眾多,B值各不相同,溫阻曲線呈非線性,分壓電阻需要 ...

把注釋掉的重新開啟就編譯不到了

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

IMG_20220115_121552.jpg
回復(fù)

使用道具 舉報(bào)

30#
ID:17109 發(fā)表于 2022-1-15 14:37 來自觸屏版 | 只看該作者
wulin 發(fā)表于 2022-1-15 08:08
難道這個(gè)不合理?難道這個(gè)不能測溫?NTC熱敏電阻規(guī)格眾多,B值各不相同,溫阻曲線呈非線性,分壓電阻需要 ...

編譯不到

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

IMG_20220115_121549.jpg
回復(fù)

使用道具 舉報(bào)

31#
ID:213173 發(fā)表于 2022-1-15 15:15 | 只看該作者

編譯不了要問你自己根據(jù)什么理由寫了這條代碼,log是什么玩意?
回復(fù)

使用道具 舉報(bào)

32#
ID:17109 發(fā)表于 2022-1-15 16:27 來自觸屏版 | 只看該作者
wulin 發(fā)表于 2022-1-15 08:08
難道這個(gè)不合理?難道這個(gè)不能測溫?NTC熱敏電阻規(guī)格眾多,B值各不相同,溫阻曲線呈非線性,分壓電阻需要 ...

把注釋掉的重新開啟就編譯不到了
回復(fù)

使用道具 舉報(bào)

33#
ID:17109 發(fā)表于 2022-1-15 21:43 來自觸屏版 | 只看該作者
wulin 發(fā)表于 2022-1-15 15:15
編譯不了要問你自己根據(jù)什么理由寫了這條代碼,log是什么玩意?

師傅,看看要什么修改才能編繹成功,可以上傳過來嗎?謝謝
回復(fù)

使用道具 舉報(bào)

34#
ID:213173 發(fā)表于 2022-1-16 10:45 | 只看該作者
ll13536121668 發(fā)表于 2022-1-15 21:43
師傅,看看要什么修改才能編繹成功,可以上傳過來嗎?謝謝

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

回復(fù)

使用道具 舉報(bào)

35#
ID:979299 發(fā)表于 2022-1-16 13:23 | 只看該作者
用單片機(jī)做溫度計(jì)為什么不用18B20之類的采集呢,用NTC之類的不用單片機(jī)也可以做成溫度計(jì)的
回復(fù)

使用道具 舉報(bào)

36#
ID:17109 發(fā)表于 2022-1-18 01:31 來自觸屏版 | 只看該作者
興安xa 發(fā)表于 2022-1-16 13:23
用單片機(jī)做溫度計(jì)為什么不用18B20之類的采集呢,用NTC之類的不用單片機(jī)也可以做成溫度計(jì)的

不用單片機(jī)的NTC溫度計(jì),電路圖有嗎?上傳上來看看
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表