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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6816|回復: 7
打印 上一主題 下一主題
收起左側

自制NTC測溫度帶24C02保存設置1637數碼管顯示單片機STC15

  [復制鏈接]
跳轉到指定樓層
樓主
這個很實用,主要用來給電熱水懷加熱控制的。

制作出來的實物圖如下:


單片機源碼:

  1. //*   基于STC15W408AS的NTC溫度計設計    */
  2. /*       測溫范圍-40°~110°          */
  3. //NTC使用MF52-103/3435;10K±1%精度;B值:3435±1%
  4. //NTC溫度輸出端子接P1.7
  5. #include "reg52.h"
  6. #include "intrins.h"
  7. #define uchar unsigned char
  8. #define uint  unsigned int
  9. //聲明增加的寄存器地址
  10. sfr AUXR = 0x8e;         //輔助寄存器   
  11. sfr P3M0 = 0xB2;         //P3口引腳模式寄存器
  12. sfr P2M0 = 0x96;         //P2口引腳模式寄存器
  13. sfr P1M0 = 0x92;         //P1口引腳模式寄存器


  14. sfr ADC_CONTR = 0xBC;//A/D 轉換控制寄存器 ADC_POWER,SPEED1,SPEED0,ADC_FLAG,ADC_START,CHS2,CHS1,CHS0;0000,0000
  15. sfr ADC_RES   = 0xBD;//A/D 轉換結果高8位  ADCV.9 ADCV.8 ADCV.7 ADCV.6 ADCV.5 ADCV.4 ADCV.3 ADCV.2;0000,0000
  16. sfr ADC_RESL  = 0xBE;//A/D 轉換結果低2位                                            ADCV.1 ADCV.0;0000,0000
  17. sfr P1ASF          = 0x9D;//P1引腳功能選擇寄存器


  18. #define ADC_POWER        0x80        //ADC電源控制位
  19. #define ADC_FLAG        0x10        //ADC完成標志位
  20. #define ADC_START        0x08        //ADC啟動控制位
  21. #define ADC_SPEED0        0x00        //ADC轉換速度,一次轉換需要540個時鐘
  22. #define ADC_SPEED1        0x20        //ADC轉換速度,一次轉換需要360個時鐘
  23. #define ADC_SPEED2        0x40        //ADC轉換速度,一次轉換需要180個時鐘
  24. #define ADC_SPEED3        0x60        //ADC轉換速度,一次轉換需要90個時鐘


  25. #define N 8        //ADC采樣使用遞推平均濾波算法,采樣次數


  26. unsigned int  Temp_Buf[N+1];                //采樣數組
  27. unsigned char Ledcount,ADCcount;        //數碼管顯示計數變量,ADC采樣次數變量
  28. sbit SCL=P2^0; //CLK
  29. sbit SDA=P2^1; //DIO
  30. sbit k1 = P2^2;//綠色線
  31. sbit k2= P2^3;//白色線
  32. sbit out = P2^4;//輸出繼電器
  33. int set,wd;//設置溫度


  34. sbit scl_24=P2^5;//24c02時鐘線
  35. sbit sda_24=P2^6;//24c02數據線




  36. void usdelay()
  37. {
  38. _nop_();_nop_();_nop_();
  39. _nop_();_nop_();_nop_();      
  40. }
  41. /***************以下開始為24CXX用子程序**********************/
  42. void star24()         //開始信號
  43. {//時鐘線在高電平時,數據線由高變低即為開始信號        由高變低即為開始信號
  44.         sda_24=1;
  45.         usdelay();
  46.         scl_24=1;
  47.         usdelay();
  48.         sda_24=0;//數據線由高變低即為開始信號
  49.         usdelay();
  50.         scl_24=0;
  51. }
  52. void stop24()         //結束信號
  53. {//時鐘線在高電平時,數據線由低變高即為結束信號
  54.         sda_24=0;
  55.         usdelay();
  56.         scl_24=1;
  57.         usdelay();
  58.         sda_24=1;
  59.         usdelay();
  60.         sda_24=0;        //這句可有可無
  61.         scl_24=0;        //這句可有可無
  62. }
  63. void Ack24()//應答         
  64. {        uchar i;
  65.         scl_24=1;
  66.         usdelay();      
  67.     while((sda_24==1)&&(i<200))i++;
  68.         scl_24=0;
  69.     usdelay();
  70. }
  71. /*
  72. void NoAck24()  //不應答
  73. {
  74.         sda_24=1;        //時鐘線高電平時,數據線高,即為不應答
  75.         usdelay();
  76.     scl_24=1;
  77.         usdelay();
  78.         scl_24=0;
  79.     usdelay();
  80. } */
  81. /**********24c0初始化***************************/
  82. void init_24()
  83. {
  84. sda_24=1;
  85. usdelay();
  86. scl_24=1;
  87. usdelay();
  88. }
  89. /**********讀數據24c02***************************/
  90. void write_byte(uchar dat)
  91. {
  92. uchar i,temp;
  93. temp=dat;
  94. //scl_24=0;//低電平可以變數據,為高時是讀,且不能變
  95. for(i=0;i<8;i++)
  96.   {
  97.    temp=temp<<1;
  98.    scl_24=0;
  99.    usdelay();
  100. sda_24=CY;//CY是PSW寄存器中的CY位,再把CY賦給SDA,再由SCL控制發出去
  101. //sda_24=(bit)(temp&0x80);//用這句也可以換掉上一句(bit)是強制轉換命令,把數據轉成非0即1
  102.    usdelay();
  103.    scl_24=1;
  104.    usdelay();
  105.   }
  106.   scl_24=0;
  107.   usdelay();
  108.   sda_24=1;//釋放總線
  109.   usdelay();
  110. }
  111. /**********讀數據24c02***************************/
  112. uchar read_byte()
  113. {


  114. uchar i,k;
  115. scl_24=0;         //這句可有可無
  116. usdelay(); //這句可有可無
  117. sda_24=1; //釋放總線
  118. usdelay();
  119. for(i=0;i<8;i++)
  120.   {
  121.    scl_24=1;
  122.    usdelay();
  123.    k=(k<<1)|sda_24;//判斷8次,移位7次
  124.    scl_24=0;
  125.    usdelay();
  126.    }
  127. return k;
  128. }
  129. /**********寫24c02指定地址的數據***************************/
  130. void write_add(uchar add,uchar dat)
  131. {
  132. star24();
  133. write_byte(0xa0);//呼叫器件,高四位為定了的1010,即A,低四位三個接了地,所以為000,最后一個0是寫標志
  134. Ack24();//寫了后要馬上應答
  135. write_byte(add);//寫要往哪個地址寫數據00-1023
  136. Ack24();//每寫一次要給一個應答位
  137.   write_byte(dat);//把數據寫入
  138.    Ack24();
  139.   stop24();//給一個停止位,結束寫數據
  140. }


  141. /**********讀數據24c02指定地址的數據***************************/
  142. uchar read_add(uchar add)
  143. {
  144. uchar dat;
  145. star24();
  146. write_byte(0xa0);//呼叫器件,高四位為定了的1010,即A,低四位三個接了地,所以為000,最后一個0是寫標志
  147. Ack24();//寫了后要馬上應答
  148. write_byte(add);//寫入要往哪個地址讀數據00-1023
  149. Ack24();//每寫一次要給一個應答位
  150. star24();                                                  
  151. write_byte(0xa1);//呼叫器件,高四位為定了的1010,即A,低四位三個接了地,所以為000,最后一個1是讀標志
  152. Ack24();//寫了后要馬上應答
  153. dat=read_byte();
  154. stop24();//給一個停止位,結束讀數據
  155. return dat;//返回一個DAT(數據)
  156. }










  157. unsigned char code xsbcdbuf[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77};


  158. unsigned int sum,tempvalue;//溫度
  159. /*************************************
  160. NTC阻值與溫度關系表
  161. Vcc---NTC(±1%)---R(10K±1%)---GND
  162.                 |
  163.               ADC端子
  164. NTC使用MF52-103/3435;10K±1%精度;B值:3435±1%
  165. **************************************/
  166. unsigned int code NTCcode[] = {
  167. /*ADC采樣值****溫度值*******電阻值**********/      
  168.         0x033,        // -40.00                190.5562
  169.         0x034,        // -39.00                183.4132
  170.         0x037,        // -38.00                175.6740
  171.         0x039,        // -37.00                167.6467
  172.         0x03c,        // -36.00                159.5647
  173.         0x03f,        // -35.00                151.5975
  174.         0x042,        // -34.00                143.8624
  175.         0x045,        // -33.00                136.4361
  176.         0x049,        // -32.00                129.3641
  177.         0x04d,        // -31.00                122.6678
  178.         0x050,        // -30.00                116.3519
  179.         0x054,        // -29.00                110.4098
  180.         0x059,        // -28.00                104.8272
  181.         0x05d,        // -27.00                99.5847
  182.         0x061,        // -26.00                94.6608
  183.         0x066,        // -25.00                90.0326
  184.         0x06a,        // -24.00                85.6778
  185.         0x06f,        // -23.00                81.5747
  186.         0x074,        // -22.00                77.7031
  187.         0x079,        // -21.00                74.0442
  188.         0x07e,        // -20.00                70.5811
  189.         0x084,        // -19.00                67.2987
  190.         0x089,        // -18.00                64.1834
  191.         0x08f,        // -17.00                61.2233
  192.         0x095,        // -16.00                58.4080
  193.         0x09b,        // -15.00                55.7284
  194.         0x0a1,        // -14.00                53.1766
  195.         0x0a8,        // -13.00                50.7456
  196.         0x0af,        // -12.00                48.4294
  197.         0x0b5,        // -11.00                46.2224
  198.         0x0bd,        // -10.00                44.1201
  199.         0x0c4,        // -9.00                42.1180
  200.         0x0cb,        // -8.00                40.2121
  201.         0x0d3,        // -7.00                38.3988
  202.         0x0db,        // -6.00                36.6746
  203.         0x0e3,        // -5.00                35.0362
  204.         0x0eb,        // -4.00                33.4802
  205.         0x0f3,        // -3.00                32.0035
  206.         0x0fb,        // -2.00                30.6028
  207.         0x0104,        // -1.00                29.2750
  208.         0x010d,        // 0.00                28.0170
  209.         0x0115,        // 1.00                26.8255
  210.         0x011e,        // 2.00                25.6972
  211.         0x0127,        // 3.00                24.6290
  212.         0x0130,        // 4.00                23.6176
  213.         0x0139,        // 5.00                22.6597
  214.         0x0142,        // 6.00                21.7522
  215.         0x014b,        // 7.00                20.8916
  216.         0x0154,        // 8.00                20.0749
  217.         0x015d,        // 9.00                19.2988
  218.         0x0166,        // 10.00                18.5600
  219.         0x0167,        // 11.00                18.4818
  220.         0x016b,        // 12.00                18.1489
  221.         0x0172,        // 13.00                17.6316
  222.         0x017b,        // 14.00                16.9917
  223.         0x0185,        // 15.00                16.2797
  224.         0x0190,        // 16.00                15.5350
  225.         0x019c,        // 17.00                14.7867
  226.         0x01a9,        // 18.00                14.0551
  227.         0x01b6,        // 19.00                13.3536
  228.         0x01c2,        // 20.00                12.6900
  229.         0x01cf,        // 21.00                12.0684
  230.         0x01dc,        // 22.00                11.4900
  231.         0x01e8,        // 23.00                10.9539
  232.         0x01f4,        // 24.00                10.4582
  233.         0x01ff,        // 25.00                10.0000
  234.         0x020a,        // 26.00                9.5762
  235.         0x0215,        // 27.00                9.1835
  236.         0x021f,        // 28.00                8.8186
  237.         0x0229,        // 29.00                8.4784
  238.         0x0233,        // 30.00                8.1600
  239.         0x023c,        // 31.00                7.8608
  240.         0x0245,        // 32.00                7.5785
  241.         0x024e,        // 33.00                7.3109
  242.         0x0257,        // 34.00                7.0564
  243.         0x0260,        // 35.00                6.8133
  244.         0x0268,        // 36.00                6.5806
  245.         0x0271,        // 37.00                6.3570
  246.         0x0279,        // 38.00                6.1418
  247.         0x0282,        // 39.00                5.9343
  248.         0x028a,        // 40.00                5.7340
  249.         0x0292,        // 41.00                5.5405
  250.         0x029a,        // 42.00                5.3534
  251.         0x02a2,        // 43.00                5.1725
  252.         0x02aa,        // 44.00                4.9976
  253.         0x02b1,        // 45.00                4.8286
  254.         0x02b9,        // 46.00                4.6652
  255.         0x02c1,        // 47.00                4.5073
  256.         0x02c8,        // 48.00                4.3548
  257.         0x02d0,        // 49.00                4.2075
  258.         0x02d7,        // 50.00                4.0650
  259.         0x02de,        // 51.00                3.9271
  260.         0x02e5,        // 52.00                3.7936
  261.         0x02ec,        // 53.00                3.6639
  262.         0x02f3,        // 54.00                3.5377
  263.         0x02fa,        // 55.00                3.4146
  264.         0x0301,        // 56.00                3.2939
  265.         0x0308,        // 57.00                3.1752
  266.         0x030f,        // 58.00                3.0579
  267.         0x0316,        // 59.00                2.9414
  268.         0x031d,        // 60.00                2.8250
  269.         0x0320,        // 61.00                2.7762
  270.         0x0324,        // 62.00                2.7179
  271.         0x0328,        // 63.00                2.6523
  272.         0x032d,        // 64.00                2.5817
  273.         0x0331,        // 65.00                2.5076
  274.         0x0336,        // 66.00                2.4319
  275.         0x033b,        // 67.00                2.3557
  276.         0x0341,        // 68.00                2.2803
  277.         0x0346,        // 69.00                2.2065
  278.         0x034b,        // 70.00                2.1350
  279.         0x034f,        // 71.00                2.0661
  280.         0x0354,        // 72.00                2.0004
  281.         0x0358,        // 73.00                1.9378
  282.         0x035d,        // 74.00                1.8785
  283.         0x0361,        // 75.00                1.8225
  284.         0x0365,        // 76.00                1.7696
  285.         0x0368,        // 77.00                1.7197
  286.         0x036c,        // 78.00                1.6727
  287.         0x036f,        // 79.00                1.6282
  288.         0x0372,        // 80.00                1.5860
  289.         0x0376,        // 81.00                1.5458
  290.         0x0378,        // 82.00                1.5075
  291.         0x037b,        // 83.00                1.4707
  292.         0x037e,        // 84.00                1.4352
  293.         0x0381,        // 85.00                1.4006
  294.         0x0383,        // 86.00                1.3669
  295.         0x0386,        // 87.00                1.3337
  296.         0x0389,        // 88.00                1.3009
  297.         0x038b,        // 89.00                1.2684
  298.         0x038e,        // 90.00                1.2360
  299.         0x0391,        // 91.00                1.2037
  300.         0x0393,        // 92.00                1.1714
  301.         0x0396,        // 93.00                1.1390
  302.         0x0399,        // 94.00                1.1067
  303.         0x039b,        // 95.00                1.0744
  304.         0x039e,        // 96.00                1.0422
  305.         0x03a1,        // 97.00                1.0104
  306.         0x03a3,        // 98.00                0.9789
  307.         0x03a6,        // 99.00                0.9481
  308.         0x03a8,        // 100.00                0.9180
  309.         0x03ab,        // 101.00                0.8889
  310.         0x03ad,        // 102.00                0.8610
  311.         0x03b0,        // 103.00                0.8346
  312.         0x03b2,        // 104.00                0.8099
  313.         0x03b4,        // 105.00                0.7870
  314.         0x03b6,        // 106.00                0.7665
  315.         0x03b7,        // 107.00                0.7485
  316.         0x03b9,        // 108.00                0.7334
  317.         0x03ba,        // 109.00                0.7214
  318.         0x03ba        // 110.00                0.7130
  319. };
  320. /******************************
  321. 函數說明:延時函數,執行一次1毫秒,STC_ISP_V6.21軟件給出
  322. 入口參數:i=延時毫秒數
  323. 出口參數:無
  324. ******************************/
  325. void Delay_MS(unsigned int ms)
  326. {
  327.         unsigned char i, j;
  328.         while(ms--)
  329.         {
  330.                 i = 6;        j = 211;
  331.                 do{
  332.                         while (--j);
  333.                 } while (--i);
  334.         }
  335. }
  336. void IIC_delay(void)
  337. {
  338.     unsigned char i;
  339.     for(i=0;i<20;i++) _nop_();
  340. }
  341. void start_IIC(void)// 啟動IIC


  342. {
  343.     SCL=1; //給芯片發送開始信號
  344.     SDA=1;
  345.     IIC_delay();
  346.     SDA=0;
  347.     IIC_delay();
  348.     SCL=0; //開始信號傳送完
  349.     IIC_delay();
  350. }
  351. void stop_IIC(void) //停止IIC
  352. {
  353.     SCL=0;
  354.     IIC_delay();
  355.     SDA=0;
  356.     IIC_delay();
  357.     SCL=1;
  358.     IIC_delay();
  359.     SDA=1;
  360. }
  361. void ack_IIC()
  362. {
  363.     SCL=0;
  364.     _nop_();_nop_();_nop_();
  365.     while(SDA);
  366.     SCL=1;
  367.     _nop_();_nop_();_nop_();
  368.     SCL=0;
  369. }
  370. void WriteByte(unsigned char WriteData) //寫一個字節數據
  371. {
  372.     unsigned char i;
  373.     for(i=0;i<8;i++)//開始傳送8位數據,每循環一次傳送一位數據
  374.     {
  375.         SCL=0;
  376.         IIC_delay();
  377.         WriteData=WriteData>>1;
  378.         SDA=CY;
  379.         IIC_delay();
  380.         SCL=1;
  381.         IIC_delay();
  382.     }
  383. //8位數據傳送完
  384.     ack_IIC(); //判斷芯片發過來的ACK應答信號
  385. }
  386. void write_LEDSROM(unsigned char addr,unsigned char WData) //寫一字節數據到LEDSROM
  387. {
  388.     start_IIC(); //調用開始信號
  389.     WriteByte(addr); //寫起始地址命令(0C0H),地址00H單元。
  390.     WriteByte(WData);//給顯示寄存器寫顯示數據,值可根據實參改變
  391.     stop_IIC(); //調用結束信號,一個字節命令發送完畢,可以發送下一個命令
  392. }

  393. /******************************
  394. 函數說明:初始化ADC寄存器,設置P1.7為ADC輸入功能
  395. 入口參數:無
  396. 出口參數:無
  397. ******************************/
  398. void Init_ADC(void)
  399. {
  400.     P1ASF = 0x80;                //打開P1.7口的ADC功能
  401.         ADC_RES = 0;      
  402.         ADC_RESL= 0;                //清掉ADC轉換結果寄存器
  403.     ADC_CONTR = ADC_POWER | ADC_SPEED3;        //使能A/D供電,設置轉換速度90T
  404. }


  405. /******************************
  406. 函數說明:查詢方式讀取ADC轉換結果
  407. 入口參數:ch  ADC采樣通道
  408. 出口參數:int ADC_RES ADC轉換結果
  409. ******************************/
  410. unsigned int Get_ADC_Result(unsigned char ch)
  411. {
  412.         unsigned int result;
  413.         ADC_RES = 0;      
  414.         ADC_RESL= 0;                                        //清掉ADC轉換結果寄存器
  415.         ADC_CONTR =ADC_POWER|ADC_SPEED3|ch|ADC_START;//配置ADC,設置轉換通道,啟動轉換
  416.     _nop_();        _nop_();
  417.     _nop_();        _nop_();                        //等待設置ADC_POWER完畢
  418.     while (!(ADC_CONTR & ADC_FLAG));//讀取轉換完畢標志位ADC_FLAG
  419.     ADC_CONTR &= ~ADC_FLAG;         //清除ADC_FLAG標志位
  420.         result = ADC_RES<<2|ADC_RESL;        //讀取10位轉換結果保存到result
  421.     return result;                  //返回ADC轉換結果10位
  422. }


  423. void Timer0Init(void)//定時器0,方式0(16位自動重裝),2毫秒@6.000MHz
  424. {
  425.         AUXR &= 0x7F;        //定時器時鐘12T模式
  426.         TMOD &= 0xF0;        //設置定時器模式
  427.         TL0 = 0x18;                //設置定時初值
  428.         TH0 = 0xFC;                //設置定時初值
  429.         TF0 = 0;                //清除TF0標志
  430.         TR0 = 1;                //定時器0開始計時
  431. }
  432. void display(int temp) //顯示
  433. {
  434.          
  435.     SDA=1;
  436.     SCL=1;
  437.     start_IIC(); //調用開始信號
  438.     WriteByte(0x40);//寫命令40H(數據設置)
  439.     stop_IIC(); //調用結束信號,一個字節命令發送完畢,可以發送下一個命令
  440.       
  441.       
  442.     //write_LEDSROM(0xC1,xsbcdbuf[temp/1000]); //第一個數碼管
  443.     write_LEDSROM(0xC1,xsbcdbuf[temp%1000/100]);  //第二個數碼管,0x80打開DP小數點
  444.          // write_LEDSROM(0xC1,xsbcdbuf[temp%1000/100]|0x80);  //第二個數碼管,0x80打開DP小數點
  445.     write_LEDSROM(0xC2,xsbcdbuf[temp%100/10]); //第三個數碼管
  446.          // write_LEDSROM(0xC3,xsbcdbuf[temp%10]);//第四個數碼管
  447.       
  448.     write_LEDSROM(0xC0,0x00);//第四個數碼管
  449.           write_LEDSROM(0xC3,0x58);//第四個數碼管
  450.       
  451.       
  452.       
  453.       
  454.     IIC_delay();
  455.     start_IIC(); //調用開始信號
  456.     WriteByte(0x8a); //送開屏命令,(8BH),亮度可以根據低三位調節。//顯示亮度
  457.     stop_IIC(); //調用結束信號,一個字節命令發送完畢,可以發送下一個命令
  458. }
  459. void display2(int temp) //顯示
  460. {
  461.          
  462.     SDA=1;
  463.     SCL=1;
  464.     start_IIC(); //調用開始信號
  465.     WriteByte(0x40);//寫命令40H(數據設置)
  466.     stop_IIC(); //調用結束信號,一個字節命令發送完畢,可以發送下一個命令
  467.       
  468.       
  469.     //write_LEDSROM(0xC1,xsbcdbuf[temp/1000]); //第一個數碼管
  470.     write_LEDSROM(0xC1,xsbcdbuf[temp%1000/100]);  //第二個數碼管,0x80打開DP小數點
  471.          // write_LEDSROM(0xC1,xsbcdbuf[temp%1000/100]|0x80);  //第二個數碼管,0x80打開DP小數點
  472.     write_LEDSROM(0xC2,xsbcdbuf[temp%100/10]); //第三個數碼管
  473.          // write_LEDSROM(0xC3,xsbcdbuf[temp%10]);//第四個數碼管
  474.       
  475.     write_LEDSROM(0xC0,0x40);//第四個數碼管
  476.           write_LEDSROM(0xC3,0x58);//第四個數碼管
  477.       
  478.       
  479.       
  480.       
  481.     IIC_delay();
  482.     start_IIC(); //調用開始信號
  483.     WriteByte(0x8a); //送開屏命令,(8BH),亮度可以根據低三位調節。//顯示亮度
  484.     stop_IIC(); //調用結束信號,一個字節命令發送完畢,可以發送下一個命令
  485. }
  486. void display3(int temp) //顯示
  487. {
  488.          
  489.     SDA=1;
  490.     SCL=1;
  491.     start_IIC(); //調用開始信號
  492.     WriteByte(0x40);//寫命令40H(數據設置)
  493.     stop_IIC(); //調用結束信號,一個字節命令發送完畢,可以發送下一個命令
  494.       
  495.       
  496.     //write_LEDSROM(0xC1,xsbcdbuf[temp/1000]); //第一個數碼管
  497.    // write_LEDSROM(0xC1,xsbcdbuf[temp%1000/100]);  //第二個數碼管,0x80打開DP小數點
  498.          // write_LEDSROM(0xC1,xsbcdbuf[temp%1000/100]|0x80);  //第二個數碼管,0x80打開DP小數點
  499.     write_LEDSROM(0xC1,xsbcdbuf[temp%100/10]); //第三個數碼管
  500.           write_LEDSROM(0xC2,xsbcdbuf[temp%10]);//第四個數碼管
  501.       
  502.     write_LEDSROM(0xC0,0x49);//第四個數碼管
  503.           write_LEDSROM(0xC3,0x58);//第四個數碼管
  504.       
  505.       
  506.       
  507.       
  508.     IIC_delay();
  509.     start_IIC(); //調用開始信號
  510.     WriteByte(0x8a); //送開屏命令,(8BH),亮度可以根據低三位調節。//顯示亮度
  511.     stop_IIC(); //調用結束信號,一個字節命令發送完畢,可以發送下一個命令
  512. }
  513. /******************************
  514. 函數說明:獲取溫度值
  515. 入口參數:無
  516. 出口參數:無
  517. ******************************/
  518. void Get_Temp(void)
  519. {
  520.         unsigned char xx;
  521. uint a,i;
  522.         sum = tempvalue =0;      
  523.         Temp_Buf[N]=Get_ADC_Result(7);        //將ADC轉換結果放數組最高位
  524.       
  525.         if( ++ADCcount < 8)                //采樣初期不使用濾波算法
  526.         {      
  527.                 for(xx=0;xx<N;xx++)        //準備濾波算法的數據
  528.                 {
  529.                         Temp_Buf[xx]=Temp_Buf[xx+1];//所有數據循環左移
  530.                 }
  531.                 tempvalue=Temp_Buf[N];//采樣初期使用當前采樣值
  532.         }
  533.         else         //只有采樣次數大于8次以后才使用濾波算法      
  534.         {
  535.                 ADCcount=8;        //采樣次數超過8次后,固定設置為8
  536.                 for(xx=0;xx<N;xx++)        //濾波算法
  537.                 {
  538.                         Temp_Buf[xx]=Temp_Buf[xx+1];//所有數據循環左移
  539.                         sum+=Temp_Buf[xx];        //求和
  540.                 }
  541.                 tempvalue=sum/N;                //求平均值               
  542.         }      
  543.         xx=0;
  544.         while( tempvalue > NTCcode[xx] )        //將當前溫度值與溫度表對比,得到所在位置
  545.         {        xx++;        }


  546.         tempvalue=xx*10 + (tempvalue*10 - NTCcode[xx-1]*10)/( NTCcode[xx] - NTCcode[xx-1] );
  547.         //插值法計算溫度,將數據全部擴大10倍,使小數變為整數


  548.         //tempvalue=tempvalue-30;//修正溫度,比正常高3.0度(擴大10倍為30)


  549.       
  550.       
  551.         if(tempvalue>400)        //正溫度(大于0度)
  552.         {
  553.                 tempvalue=tempvalue-400;        //取得0°以上溫度
  554.           display(tempvalue);//顯示溫度值 display
  555.                
  556.         }
  557.         else        //負溫度(小于0度)
  558.         {
  559.                 tempvalue=410-tempvalue;        //取得0°以下溫度
  560.                 //插值法計算溫度,將數據全部擴大10倍,使小數變為整數,+5是四舍五入
  561.            display2(tempvalue);//顯示溫度值
  562.         }


  563.         if(tempvalue>=set)
  564.                                  {
  565.                                  out=1;//繼電器工作停止
  566.                                  }
  567.                                         else
  568.                                         {
  569.                                  out=0;//繼電器工作輸出
  570.                                   }
  571.                        
  572.                               
  573.                 if(k1==0)//加溫度
  574.                                         {                                       
  575.                                         set=set+10;
  576.                                         if(set>=990)set=990;
  577.                                         for(a=5;a>0;a--)        //多顯示一會兒
  578.                                                 {
  579.                                                 display3(wd); //顯示設置溫度
  580.                                                 write_add(0,wd);//在地址2 寫入min               
  581.                                                 Delay_MS(1);      
  582.                                                 }      
  583.                                         }
  584.                                        
  585.                         if(k2==0)//加溫度
  586.                                         {                                       
  587.                                         set=set-10;
  588.                                         if(set<=10)set=10;
  589.                                         for(a=5;a>0;a--)        //多顯示一會兒
  590.                                                 {
  591.                                                 display3(wd); //顯示設置溫度
  592.                                                 write_add(0,wd);//在地址2 寫入min               
  593.                                                 Delay_MS(1);      
  594.                                                 }      
  595.                                         }                       
  596.       
  597. }


  598. void main(void)
  599. {
  600.       
  601.         Init_ADC();                //初始化ADC
  602.         ADCcount=0;                //ADC采樣次數        //1.7
  603.   //set=500;
  604.         wd=set/10;//
  605.                                   out=1;
  606.                 k1=1;
  607.                 k2=1;
  608.         init_24();//24c02初始化
  609.         Delay_MS(101);
  610.         wd=read_add(0);//從地址( )中讀出以前保存的數據
  611.         Delay_MS(101);
  612.         set=wd*10;//放大數據用于參考輸出
  613.         while(1)
  614.         {
  615.                 Get_Temp();        //獲取溫度值               
  616.                 Delay_MS(900);      
  617.                
  618.                 write_add(0,wd);//在地址2 寫入min      
  619.                 Delay_MS(1);
  620.                 wd=set/10;//只保持255數據,用于讀寫24C02
  621.         }
  622. }
復制代碼

全部資料51hei下載地址:
1637顯STC15按鈕24 C02 NTC10K溫度OK.zip (69.5 KB, 下載次數: 171)



評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏13 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:358930 發表于 2018-12-11 03:12 | 只看該作者
電源部分完成,用12V18A電源,這個電源也改過,要短路才跳保護,為的是功率更大,改了電流取樣部分,不然這個電源懂的人都知道太敏感了,只能給服務器用,控制部分用降壓模塊調節到5V。現在開始弄個芋頭吃吃,代碼還要改下,就是防到溫度閃爍現像,忙忘了,哈哈哈哈,開吃了。

15444612081920.17350934727717082.jpg (284.89 KB, 下載次數: 142)

15444612081920.17350934727717082.jpg

20181211_025332.jpg (297.86 KB, 下載次數: 131)

20181211_025332.jpg

20181211_025704.jpg (299.12 KB, 下載次數: 135)

20181211_025704.jpg
回復

使用道具 舉報

板凳
ID:412814 發表于 2018-12-11 06:32 | 只看該作者
太好了,謝謝樓主下載研究研究。
回復

使用道具 舉報

地板
ID:254251 發表于 2019-5-3 16:55 | 只看該作者
樓主加個回溫差才實用,或者可以設溫度上限和下限,
回復

使用道具 舉報

5#
ID:28260 發表于 2022-7-13 19:14 | 只看該作者
已拜讀,謝謝樓主!
回復

使用道具 舉報

6#
ID:72088 發表于 2022-7-16 12:40 | 只看該作者
單片機內部有EEPROM,不必再用外接24C02
回復

使用道具 舉報

7#
ID:941205 發表于 2022-7-28 02:26 | 只看該作者
下來研究下,多謝。
回復

使用道具 舉報

8#
ID:47634 發表于 2023-3-27 08:36 | 只看該作者
實際上可以使用單片機自帶的EEPROM
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 69热视频在线观看 | 国产精品一区二区三区在线播放 | 亚洲国产情侣自拍 | 亚洲高清成人 | 亚洲精品日韩欧美 | 天天爽夜夜爽精品视频婷婷 | 国产精品三级 | 永久免费视频 | 日中文字幕在线 | 毛片免费看 | 国产精品伦一区二区三级视频 | 久久久蜜臀国产一区二区 | 天天人人精品 | 午夜一区| 亚洲国产精品一区二区第一页 | 一级毛片视频免费观看 | 亚洲精品乱码久久久久久黑人 | 欧美在线视频网 | 草草草草视频 | 一区二区三区四区在线视频 | 久久国产免费 | 涩爱av一区二区三区 | 国产精品美女www爽爽爽 | 天堂网色 | 日韩精品 电影一区 亚洲 | 亚洲三级在线观看 | 国产精品久久久久久久久久东京 | 日韩精品一区二区三区中文在线 | av男人天堂影院 | 亚洲视频在线播放 | 亚洲欧美综合网 | 欧美精品一二三 | 一区二区福利视频 | 精品欧美一区二区中文字幕视频 | 免费看的av | 国产精品色哟哟网站 | 精品国产乱码久久久久久蜜柚 | 区一区二在线观看 | 国产色婷婷精品综合在线播放 | av中文字幕在线播放 | 天天爽天天操 |