久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5273|回復: 5
收起左側

關于ADC0831讀取熱敏電阻如何轉化為阻值并顯示溫度

[復制鏈接]
ID:709561 發表于 2020-11-20 16:18 | 顯示全部樓層 |閱讀模式
50黑幣
購買了一個ADC0831就試著編寫程序,讀取電壓值正確。使用NTC(3950   10K)顯示溫度,但是在轉換阻值與查表卻無法編寫出正確的程序,經多次實驗還是無法寫出程序,實屬無奈還請大神不吝賜教,給予文獻作為參考不勝感激!!!單片機使用;STC89C52;


#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char

sbit SCK = P1^0;    //11腳數據時鐘
sbit RCK = P1^1;    //12腳輸出時鐘
sbit SI  = P1^2;    //14腳數據

sbit CS=P1^3;        //ADC片選信號
sbit CLK=P1^4;        //ADC時鐘信號
sbit DO=P1^5;        //ADC數據接口

unsigned int NTC_R;//定義熱敏電阻阻值變量
unsigned char code segmcode[]={
    0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90  //共陰極數碼管段碼0-9
};
unsigned int code Ttable[106][2]={//溫度與電阻阻值對應關系表格
0,3274,//0度對應阻值32.74k
1,3111,//1度對應阻值31.11k
2,2957,//2度對應阻值29.57k
3,2812,//
4,2674,//
5,2545,
6,2422,
7,2306,
8,2196,
9,2092,
10,1993,
11,1900,
12,1811,
13,1728,
14,1648,
15,1573,
16,1501,
17,1433,
18,1369,
19,1308,
20,1250,
21,1194,
22,1142,
23,1092,
24,1045,
25,1000,//25度對應阻值10k               
26,957,//26度對應阻值9.57k
27,916,
28,877,
29,840,
30,805,
31,771,
32,739,
33,709,
34,679,
35,652,
36,625,
37,600,
38,576,
39,553,
40,531,
41,510,
42,490,
43,471,
44,453,
45,435,
46,418,
47,402,
48,387,
49,372,
50,358,
51,345,
52,332,
53,320,
54,308,
55,297,
56,286,
57,276,
58,266,
59,256,
60,247,
61,238,
62,230,
63,222,
64,214,
65,207,
66,199,
67,193,
68,186,
69,180,
70,174,
71,168,
72,162,
73,157,
74,        152,
75,        147,
76,        142,
77,        137,
78,        133,
79,        128,
80,        124,
81,        120,
82,        116,
83,        113,
84,        109,
85,        106,
86,        102,//86度對應阻值1.02k
87,        99,//87度對應阻值0.99k
88,        96,
89,        93,
90,        90,
91,        88,
92,        85,
93,        82,
94,        80,
95,        78,
96,        75,
97,        73,
98,        71,
99,        69,
100,67,
101,65,
102,63,
103,61,
104,59,
105,58//105度對應阻值0.58k
};
unsigned char data bitcode[4]={0,0,0,0};  //數碼管顯示位置 1-4
unsigned int date,i;

void hc595(uchar num)
{
    uchar i;
    for(i=0;i<8;i++)
    {
        SI=(num<<i)&0x80;
        SCK=0;
        _nop_();
        SCK=1;
        SCK=0;
    }
    RCK=0;
    _nop_();
    RCK=1;
    RCK=0;
}
unsigned char ad_conv(void){
        unsigned char i,com;
        CS=1;
        CLK=0;        _nop_();        _nop_();
        CS=0;        _nop_();        _nop_();//CS置低,啟動轉換
    CLK=1;        _nop_();        _nop_();
        CLK=0;        _nop_();        _nop_();//第一個下降沿,準備輸出數據
        CLK=1;        _nop_();        _nop_();

        for(i=8;i>0;i--){
                CLK=1;        //第二至九個下降沿
        _nop_();
        _nop_();
                com<<=1;//左移,先采最高位
                if(DO)com++;//采當前數據
                CLK=0;
                _nop_();
            _nop_();
        }       
        CS=1;
    _nop_();
    _nop_();
        return com;
}

//數碼管顯:
void display()
{
        static uchar i=0;
        bitcode[0]=segmcode[date/100]   ;
        bitcode[1]=segmcode[date%100/10];
        bitcode[2]=segmcode[date%10];
        P0=0xFF;
        hc595(0x01<<i);
        P0=bitcode[i];
        i++;
        i%=3;
}
void main(void)
{
   uchar i = 0;
        while(1)
        {
            i++;
            if(i==100)
            {
                i=0;
                date=ad_conv()*100;   
                date=date/51;        
            }
            display();      //顯示
        }
       
}

最佳答案

查看完整內容

給你寫了一個簡單的溫度表示例,8位ADC溫度不是很準確,需要補充完善,但程序框架和邏輯沒有問題。
回復

使用道具 舉報

ID:213173 發表于 2020-11-20 16:18 | 顯示全部樓層
1P1P 發表于 2020-11-23 13:35
是的更改了你給的電壓碼表,電壓值轉換阻值/溫度顯示錯誤,麻煩看一下是不是我的轉換程序錯誤,試了很多 ...

給你寫了一個簡單的溫度表示例,8位ADC溫度不是很準確,需要補充完善,但程序框架和邏輯沒有問題。 無標題.jpg
  1. #include "reg52.h"
  2. #include <intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. sbit CS =P1^0;
  6. sbit CLK=P1^1;
  7. sbit DO =P1^2;
  8. //順序共陰極數碼管段碼表,段碼a-h順序接PX0-PX7
  9. uchar code table[]={//共陰數碼管段碼"0~f-."
  10.                 0x3f,0x06,0x5b,0x4f,
  11.                 0x66,0x6d,0x7d,0x07,
  12.                 0x7f,0x6f,0x77,0x7c,
  13.                 0x39,0x5e,0x79,0x71,0x40,0x80};
  14. uchar data dis_buf[4];
  15. uchar code Temp[102]={
  16. 239         ,//        0
  17. 238         ,//        1
  18. 237         ,//        2
  19. 236         ,//        3
  20. 235         ,//        4
  21. 234         ,//        5
  22. 233         ,//        6
  23. 232         ,//        7
  24. 231         ,//        8
  25. 230         ,//        9
  26. 229         ,//        10
  27. 227         ,//        11
  28. 226         ,//        12
  29. 225         ,//        13
  30. 224         ,//        14
  31. 222         ,//        15
  32. 221         ,//        16
  33. 219         ,//        17
  34. 218         ,//        18
  35. 216         ,//        19
  36. 215         ,//        20
  37. 213         ,//        21
  38. 212         ,//        22
  39. 210         ,//        23
  40. 208         ,//        24
  41. 207         ,//        25
  42. 205         ,//        26
  43. 203         ,//        27
  44. 201         ,//        28
  45. 199         ,//        29
  46. 197         ,//        30
  47. 195         ,//        31
  48. 193         ,//        32
  49. 191         ,//        33
  50. 189         ,//        34
  51. 187         ,//        35
  52. 185         ,//        36
  53. 183         ,//        37
  54. 181         ,//        38
  55. 179         ,//        39
  56. 177         ,//        40
  57. 174         ,//        41
  58. 172         ,//        42
  59. 170         ,//        43
  60. 168         ,//        44
  61. 165         ,//        45
  62. 163         ,//        46
  63. 161         ,//        47
  64. 158         ,//        48
  65. 156         ,//        49
  66. 154         ,//        50
  67. 151         ,//        51
  68. 149         ,//        52
  69. 147         ,//        53
  70. 144         ,//        54
  71. 142         ,//        55
  72. 140         ,//        56
  73. 137         ,//        57
  74. 135         ,//        58
  75. 133         ,//        59
  76. 130         ,//        60
  77. 128         ,//        61
  78. 126         ,//        62
  79. 124         ,//        63
  80. 121         ,//        64
  81. 119         ,//        65
  82. 117         ,//        66
  83. 115         ,//        67
  84. 112         ,//        68
  85. 110         ,//        69
  86. 108         ,//        70
  87. 106         ,//        71
  88. 104         ,//        72
  89. 102         ,//        73
  90. 100         ,//        74
  91. 98         ,//        75
  92. 96         ,//        76
  93. 94         ,//        77
  94. 92         ,//        78
  95. 90         ,//        79
  96. 88         ,//        80
  97. 86         ,//        81
  98. 84         ,//        82
  99. 83         ,//        83
  100. 81         ,//        84
  101. 79         ,//        85
  102. 77         ,//        86
  103. 76         ,//        87
  104. 74         ,//        88
  105. 72         ,//        89
  106. 71         ,//        90
  107. 69         ,//        91
  108. 68         ,//        92
  109. 66         ,//        93
  110. 65         ,//        94
  111. 63         ,//        95
  112. 62         ,//        96
  113. 61         ,//        97
  114. 59         ,//        98
  115. 58         ,//        99
  116. 57         ,//        100
  117. 56          //        101
  118. };
  119. uchar Read_ADC0831()
  120. {
  121.         uchar i,temp;
  122.         DO=1;
  123.         _nop_();
  124.         _nop_();
  125.         CS=0;
  126.         _nop_();
  127.         _nop_();
  128.         CLK=0;
  129.         _nop_();
  130.         _nop_();
  131.         CLK=1;
  132.         _nop_();
  133.         _nop_();
  134.         CLK=0;
  135.         _nop_();
  136.         _nop_();
  137.         CLK=1;
  138.         _nop_();
  139.         _nop_();
  140.         CLK=0;
  141.         _nop_();
  142.         _nop_();
  143.         for(i=0;i<8;i++)
  144.         {
  145.                 CLK=1;
  146.                 _nop_();
  147.                 _nop_();
  148.                 temp<<=1;
  149.                 if(DO) temp++;
  150.                 CLK=0;
  151.                 _nop_();
  152.                 _nop_();
  153.         }
  154.         CS=1;
  155.         _nop_();
  156.         _nop_();
  157.         return temp;
  158. }
  159. void display()
  160. {
  161.         static uchar i=0;
  162.         P0=0x00;
  163.         P2=~(0x01<<i);
  164.         P0=dis_buf[i];
  165.         i++;
  166.         i%=4;
  167. }
  168. void delay(uint n)
  169. {
  170.         uint i,j;
  171.         for(i=n;i>0;i--)
  172.                 for(j=120;j>0;j--);
  173. }
  174. /*******主函數********/
  175. void main()
  176. {
  177.         uint i,T,date;
  178.         while(1)
  179.         {         
  180.                 date=Read_ADC0831();
  181.                 for(i=0;i<101;i++)
  182.                 {
  183.                         if(date<=Temp[i]&&date>Temp[i+1])
  184.                         {
  185.                                 T=i;
  186.                                 break;
  187.                         }
  188.                 }
  189.                 dis_buf[0]=table[T/100];
  190.                 dis_buf[1]=table[T/10%10];
  191.                 dis_buf[2]=table[T%10];
  192.                 dis_buf[3]=0x39;//'C'
  193.                 display();
  194.                 delay(1);
  195.         }
  196. }

復制代碼





回復

使用道具 舉報

ID:213173 發表于 2020-11-21 16:04 | 顯示全部樓層
ADC0831需要輸入的是電壓值,電壓范圍0~VCC。要根據生產商提供的溫度/阻值資料制作數據表。獲取的ADC轉換值通過查表得到當前溫度值。 10K B3950 NTC溫阻電壓編碼表 上偏電阻2.4K.zip (23.96 KB, 下載次數: 29)




回復

使用道具 舉報

ID:709561 發表于 2020-11-23 13:35 | 顯示全部樓層
wulin 發表于 2020-11-21 16:04
ADC0831需要輸入的是電壓值,電壓范圍0~VCC。要根據生產商提供的溫度/阻值資料制作數據表。獲取的ADC轉換值 ...

是的更改了你給的電壓碼表,電壓值轉換阻值/溫度顯示錯誤,麻煩看一下是不是我的轉換程序錯誤,試了很多次顯示還是錯的,還是摸不著頭腦。
//電壓換算成溫度//與上面程序對應
void temp_data()
{
   float Rt=0;
   float Rp=10000;
   float T2=273.15+25;
   float Bx=3950;
   float Ka=273.15;
   float vol=0;
   vol=(float)((date)*(5/256));
   Rt=(5-vol)*10000/vol;
   temp=1/(1/T2+log(Rt/Rp)/Bx)-Ka+0.5;
}
回復

使用道具 舉報

ID:709561 發表于 2020-11-25 11:16 | 顯示全部樓層
wulin 發表于 2020-11-23 19:36
給你寫了一個簡單的溫度表示例,8位ADC溫度不是很準確,需要補充完善,但程序框架和邏輯沒有問題。

多謝你給予的幫助!!!
回復

使用道具 舉報

ID:398219 發表于 2023-3-1 20:27 | 顯示全部樓層
1P1P 發表于 2020-11-25 11:16
多謝你給予的幫助!!!

樓主,單片機AD采集的固定電阻和NTC電阻中間,分出來的電壓,你是怎么轉換成阻值的呢,謝謝指導
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品久久久久久久久久 | 中文字幕在线一区二区三区 | 色网在线看 | 97国产在线观看 | 99精品国产一区二区青青牛奶 | 午夜精品久久久久久久久久久久久 | 欧美一区二区三区视频在线 | 久久久久久久国产精品影院 | 成人免费黄色 | 午夜精品久久久久久久久久久久 | av高清 | 九九热精品视频 | 亚洲欧美成人影院 | 一区二区免费看 | 免费在线观看一级毛片 | 色综合一区二区三区 | 精品久久久久久久久久久久 | av中文字幕在线观看 | 日日操夜夜操视频 | 国产高清在线 | 青青草一区二区 | 亚洲精品久久久一区二区三区 | 一区二区三区久久久 | 欧美 中文字幕 | 狠狠干天天干 | 国产成人综合亚洲欧美94在线 | 中文字幕久久精品 | 成人一区在线观看 | 在线视频成人 | 亚洲成人精品一区 | 97视频精品 | 在线a视频网站 | 精品一区二区三区免费毛片 | www.天天操 | 天天干夜夜操 | 91精品国产一二三 | 色免费看 | 亚洲欧美日韩在线 | 中文字幕在线观 | 免费黄色在线观看 | 成人网av|