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

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

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 5059|回復(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)買(mǎi)了一個(gè)ADC0831就試著編寫(xiě)程序,讀取電壓值正確。使用NTC(3950   10K)顯示溫度,但是在轉(zhuǎn)換阻值與查表卻無(wú)法編寫(xiě)出正確的程序,經(jīng)多次實(shí)驗(yàn)還是無(wú)法寫(xiě)出程序,實(shí)屬無(wú)奈還請(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)容

給你寫(xiě)了一個(gè)簡(jiǎn)單的溫度表示例,8位ADC溫度不是很準(zhǔn)確,需要補(bǔ)充完善,但程序框架和邏輯沒(méi)有問(wèn)題。
分享到:  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ò)誤,試了很多 ...

給你寫(xiě)了一個(gè)簡(jiǎn)單的溫度表示例,8位ADC溫度不是很準(zhǔn)確,需要補(bǔ)充完善,但程序框架和邏輯沒(méi)有問(wèn)題。
  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)換值通過(guò)查表得到當(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
給你寫(xiě)了一個(gè)簡(jiǎn)單的溫度表示例,8位ADC溫度不是很準(zhǔn)確,需要補(bǔ)充完善,但程序框架和邏輯沒(méi)有問(wèn)題。

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

使用道具 舉報(bào)

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

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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲a视频 | 午夜影院 | 国产精品国产三级国产aⅴ中文 | 成人天堂| www.色53色.com | 91久久精品国产91久久 | av看片网| 欧产日产国产精品视频 | 成人在线免费观看 | 久久中文网 | 欧美精品一区二区三区视频 | 大吊一区二区 | 日韩中文字幕一区 | 日本韩国电影免费观看 | 中文字幕综合在线 | 日韩成人av在线 | www.av在线| 久久久久久综合 | 久久久精品一区二区三区四季av | 99久久久国产精品免费消防器 | 国产精品成人在线播放 | 一区二区三区视频在线 | 色在线看 | 欧美综合在线视频 | 日本一区二区高清视频 | 午夜影视| 国产在线对白 | 国产一级电影在线观看 | 波多野结衣一区二区 | 国产精品久久av | 国产成人精品午夜视频免费 | 精品久久久一区 | 欧美一区二区三区视频在线播放 | 日韩av电影院 | 超碰人人做 | 国产四虎 | 亚洲综合激情 | 国产精品一区2区 | 久久国产免费看 | 国产日韩欧美一区 | 日本在线一二 |