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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 5019|回復(fù): 5
打印 上一主題 下一主題
收起左側(cè)

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

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:709561 發(fā)表于 2020-11-20 16:18 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
50黑幣
購(gòu)買了一個(gè)ADC0831就試著編寫程序,讀取電壓值正確。使用NTC(3950   10K)顯示溫度,但是在轉(zhuǎn)換阻值與查表卻無法編寫出正確的程序,經(jīng)多次實(shí)驗(yàn)還是無法寫出程序,實(shí)屬無奈還請(qǐ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ù)時(shí)鐘
sbit RCK = P1^1;    //12腳輸出時(shí)鐘
sbit SI  = P1^2;    //14腳數(shù)據(jù)

sbit CS=P1^3;        //ADC片選信號(hào)
sbit CLK=P1^4;        //ADC時(shí)鐘信號(hào)
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]={//溫度與電阻阻值對(duì)應(yīng)關(guān)系表格
0,3274,//0度對(duì)應(yīng)阻值32.74k
1,3111,//1度對(duì)應(yīng)阻值31.11k
2,2957,//2度對(duì)應(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度對(duì)應(yīng)阻值10k               
26,957,//26度對(duì)應(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度對(duì)應(yīng)阻值1.02k
87,        99,//87度對(duì)應(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度對(duì)應(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置低,啟動(dòng)轉(zhuǎn)換
    CLK=1;        _nop_();        _nop_();
        CLK=0;        _nop_();        _nop_();//第一個(gè)下降沿,準(zhǔn)備輸出數(shù)據(jù)
        CLK=1;        _nop_();        _nop_();

        for(i=8;i>0;i--){
                CLK=1;        //第二至九個(gè)下降沿
        _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)容

給你寫了一個(gè)簡(jiǎn)單的溫度表示例,8位ADC溫度不是很準(zhǔn)確,需要補(bǔ)充完善,但程序框架和邏輯沒有問題。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

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

給你寫了一個(gè)簡(jiǎn)單的溫度表示例,8位ADC溫度不是很準(zhǔn)確,需要補(bǔ)充完善,但程序框架和邏輯沒有問題。
  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ù)

使用道具 舉報(bào)

板凳
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ù)

使用道具 舉報(bào)

地板
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)換阻值/溫度顯示錯(cuò)誤,麻煩看一下是不是我的轉(zhuǎn)換程序錯(cuò)誤,試了很多次顯示還是錯(cuò)的,還是摸不著頭腦。
//電壓換算成溫度//與上面程序?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ù)

使用道具 舉報(bào)

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

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

使用道具 舉報(bào)

6#
ID:398219 發(fā)表于 2023-3-1 20:27 | 只看該作者
1P1P 發(fā)表于 2020-11-25 11:16
多謝你給予的幫助!!!

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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产视频一区二区 | 日本一区二区三区在线观看 | www.亚洲精品 | 特a毛片| 国产一区二区视频在线观看 | 精品久久久久久久久久久久久久 | 日韩午夜精品 | 日韩免费一区二区 | 欧美日韩一区二区三区四区 | 九九在线精品视频 | 亚洲成人一区 | 91精品国产91久久综合桃花 | 日韩欧美精品在线播放 | 欧美性极品xxxx做受 | 欧美网站一区二区 | 午夜精品久久久久久 | 免费在线一区二区 | 色橹橹欧美在线观看视频高清 | 精品国产一区探花在线观看 | 99视频免费在线观看 | 在线中文字幕av | 成人精品一区二区 | 日韩欧美国产精品一区二区 | 国产精品久久久久无码av | 亚洲一区综合 | 国产精品久久久久无码av | 精品视频在线免费观看 | 日韩av一区二区在线观看 | 日本aa毛片a级毛片免费观看 | 欧美日韩国产在线观看 | 亚洲成人精| 岛国av在线免费观看 | 国产精品一区在线 | 日韩午夜网站 | 欧美区日韩区 | 激情a| 羞羞视频在线观免费观看 | 国产精品美女一区二区 | 欧美中文一区 | 福利色导航| 国产成人精品一区二区三区视频 |