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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5253|回復(fù): 5
收起左側(cè)

關(guān)于ADC0831讀取熱敏電阻如何轉(zhuǎn)化為阻值并顯示溫度

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


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

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

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

unsigned int NTC_R;//定義熱敏電阻阻值變量
unsigned char code segmcode[]={
    0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90  //共陰極數(shù)碼管段碼0-9
};
unsigned int code Ttable[106][2]={//溫度與電阻阻值對應(yīng)關(guān)系表格
0,3274,//0度對應(yīng)阻值32.74k
1,3111,//1度對應(yīng)阻值31.11k
2,2957,//2度對應(yīng)阻值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度對應(yīng)阻值10k               
26,957,//26度對應(yīng)阻值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度對應(yīng)阻值1.02k
87,        99,//87度對應(yīng)阻值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度對應(yīng)阻值0.58k
};
unsigned char data bitcode[4]={0,0,0,0};  //數(shù)碼管顯示位置 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置低,啟動轉(zhuǎn)換
    CLK=1;        _nop_();        _nop_();
        CLK=0;        _nop_();        _nop_();//第一個下降沿,準(zhǔn)備輸出數(shù)據(jù)
        CLK=1;        _nop_();        _nop_();

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

//數(shù)碼管顯:
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();      //顯示
        }
       
}

最佳答案

查看完整內(nèi)容

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

使用道具 舉報

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

給你寫了一個簡單的溫度表示例,8位ADC溫度不是很準(zhǔn)確,需要補(bǔ)充完善,但程序框架和邏輯沒有問題。 無標(biāo)題.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. //順序共陰極數(shù)碼管段碼表,段碼a-h順序接PX0-PX7
  9. uchar code table[]={//共陰數(shù)碼管段碼"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. /*******主函數(shù)********/
  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. }

復(fù)制代碼





回復(fù)

使用道具 舉報

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




回復(fù)

使用道具 舉報

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

是的更改了你給的電壓碼表,電壓值轉(zhuǎn)換阻值/溫度顯示錯誤,麻煩看一下是不是我的轉(zhuǎn)換程序錯誤,試了很多次顯示還是錯的,還是摸不著頭腦。
//電壓換算成溫度//與上面程序?qū)?yīng)
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;
}
回復(fù)

使用道具 舉報

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

多謝你給予的幫助!!!
回復(fù)

使用道具 舉報

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

樓主,單片機(jī)AD采集的固定電阻和NTC電阻中間,分出來的電壓,你是怎么轉(zhuǎn)換成阻值的呢,謝謝指導(dǎo)
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: www.国产一区 | 精品亚洲永久免费精品 | 91成人在线 | 日韩免费成人av | 日韩一区二区三区视频在线观看 | 亚洲国产精品99久久久久久久久 | 欧美自拍第一页 | 欧美xxxx网站 | 草草视频在线免费观看 | 国产精品视频一二三区 | xxx.在线观看| 亚洲视频在线看 | 超碰在线影院 | 国产美女精品 | 91视频国产精品 | 国产精品久久久久久久久久免费 | 午夜精品一区 | 羞羞视频网页 | 国产三区在线观看视频 | 中文字幕在线免费视频 | 国产第一亚洲 | 日日综合 | 一区二区在线免费观看 | 男女网站免费观看 | 一区二区三区四区在线免费观看 | va精品| 国产综合精品 | 91.com视频| 日韩精品在线一区 | 日韩精品极品视频在线观看免费 | 国产精品一区二区三区久久 | 精品免费国产一区二区三区四区介绍 | 国产视频一区二区 | 在线免费观看毛片 | 99久久中文字幕三级久久日本 | 欧美美女一区二区 | 日日操夜夜操视频 | 亚洲自拍偷拍欧美 | 精品一二三区 | 免费观看一级视频 | 精品久久久久久 |