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

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

QQ登錄

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

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

單片機(jī)ntc檢測(cè)溫度,不顯示溫度值 是什么問(wèn)題?求解

[復(fù)制鏈接]
ID:858009 發(fā)表于 2021-10-11 16:57 | 顯示全部樓層 |閱讀模式
034801b32b26196140776760a2c1463.png
  1. #include<reg52.h>                                 //頭文件
  2. #include<intrins.h>
  3. #include"eeprom52.h"                  //調(diào)用STC89C52單片機(jī)的EEPROM控制程序
  4. #include "math.h"
  5. #define uchar unsigned char                 //宏定義
  6. #define uint unsigned int                 //宏定義
  7. #define LCD1602_dat P0                         //LCD1602的數(shù)據(jù)傳輸IO口

  8. sbit LCD1602_rs=P3^5;//LCD1602命令數(shù)據(jù)控制IO
  9. sbit LCD1602_rw=P3^6; //LCD1602讀寫(xiě)IO控制
  10. sbit LCD1602_e=P3^4;  //數(shù)據(jù)脈沖輸入

  11. sbit DIN  = P2^0;        //串行數(shù)據(jù)輸入端
  12. sbit DCLK  = P2^1;        //I/O時(shí)鐘輸入
  13. sbit DOUT = P2^5;   //串行數(shù)據(jù)輸出端
  14. sbit CS   = P3^7;        //片選腳IO

  15. #define  AD_CH3 0xe4

  16. float zhi;        //暫存讀取的輸入變量

  17. int temp;        //讀取熱敏溫度計(jì)的溫度數(shù)據(jù)

  18. void delay(uint T)                //系統(tǒng)延時(shí)程序
  19. {
  20.         while(T--);
  21. }

  22. /*=========================================
  23. 函數(shù)   :SPI_Write(uchar DAT)
  24. 參數(shù)   :DAT需要發(fā)送的數(shù)據(jù)
  25. 返回值 :無(wú)
  26. 描述   :發(fā)送一個(gè)字節(jié)數(shù)據(jù)
  27. ==========================================*/
  28. void SPI_Write(uchar DAT)
  29. {
  30.         uchar i;
  31.         for(i=0;i<8;i++)     //分別寫(xiě)8次,每次寫(xiě)一位
  32.         {
  33.                 DCLK = 0;        //拉低時(shí)鐘總,允許DIN變化
  34.                 if(DAT & 0x80)   //先寫(xiě)數(shù)據(jù)最高位
  35.                         DIN = 1;     //寫(xiě)1
  36.                 else
  37.                         DIN = 0;     //寫(xiě)0
  38.                 DCLK = 1;        //拉高時(shí)鐘,讓從位機(jī)讀取DIN        
  39.                 DAT <<=1;
  40.         }
  41. }
  42. /*========================================
  43. 函數(shù)   :ReadByte()
  44. 參數(shù)   :無(wú)
  45. 返回值 :返回讀出的數(shù)據(jù)
  46. =========================================*/
  47. uint SPI_Read()
  48. {
  49.         uchar i;
  50.         uint DAT;
  51.         for(i=0;i<12;i++)  //分別讀12次,每次讀一位
  52.         {
  53.                 DAT <<=1;      //數(shù)據(jù)左移一位,準(zhǔn)備接收一位
  54.                 DCLK = 1;      //拉高時(shí)鐘總線,讀取SDA上的數(shù)據(jù)
  55.                 DCLK = 0;      //拉低時(shí)鐘總線,允許從機(jī)控制SDA變化
  56.                 if(DOUT)
  57.                 DAT |= 0x01;   //為1則寫(xiě)1,否則不執(zhí)行寫(xiě)1,通過(guò)左移補(bǔ)零
  58.         }
  59.         return(DAT);   //返回讀出的數(shù)據(jù)
  60. }
  61. /*=======================================
  62. 函數(shù)   :PCF8591Read(uchar cmd)
  63. 參數(shù)   :cmd XPT2046控制字節(jié)
  64. 返回值 :AD轉(zhuǎn)出的數(shù)字量
  65. 描述   :讀指定通道的輸入的模擬量轉(zhuǎn)為數(shù)字量
  66. ========================================*/
  67. uint ReadAD(uchar cmd)
  68. {
  69.         uint DAT;
  70.         CS = 0;
  71.         SPI_Write(cmd);
  72.         DCLK = 0;        //拉低時(shí)鐘總線
  73.         _nop_();
  74.         _nop_();
  75.         _nop_();
  76.         _nop_();
  77.         _nop_();
  78.         DAT = SPI_Read();
  79.         CS = 1;
  80.         return(DAT);    //返回讀出數(shù)據(jù)
  81. }
  82. /********************************************************************
  83. * 名稱 : LCD1602_write(uchar order,dat)
  84. * 功能 : 1602寫(xiě)如數(shù)據(jù)函數(shù)
  85. * 輸入 : 輸入的命令值
  86. * 輸出 : 無(wú)
  87. ***********************************************************************/
  88. void LCD1602_write(uchar order,dat)                                  //1602 一個(gè)字節(jié)  處理
  89. {
  90.     LCD1602_e=0;
  91.     LCD1602_rs=order;
  92.     LCD1602_dat=dat;
  93.     LCD1602_rw=0;
  94.     LCD1602_e=1;
  95.     delay(1);
  96.     LCD1602_e=0;                                                                                                                                                                                                     
  97. }
  98. /********************************************************************
  99. * 名稱 : LCD1602_writebye(uchar *prointer)
  100. * 功能 : 1602寫(xiě)入數(shù)據(jù)函數(shù)  指針式
  101. * 輸入 : 輸入的命令值
  102. * 輸出 : 無(wú)
  103. ***********************************************************************/
  104. void LCD1602_writebyte(uchar *prointer)                                   //1602 字符串    處理
  105. {
  106.     while(*prointer!='\0')
  107.     {
  108.         LCD1602_write(1,*prointer);
  109.         prointer++;
  110.     }
  111. }
  112. /********************************************************************
  113. * 名稱 : LCD1602_cls()
  114. * 功能 : 初始化1602液晶
  115. * 輸入 : 無(wú)
  116. * 輸出 : 無(wú)
  117. ***********************************************************************/
  118. void LCD1602_cls()                                                                         //1602 初始化
  119. {
  120.         LCD1602_write(0,0x01);     //1602 清屏 指令
  121.         delay(1500);
  122.         LCD1602_write(0,0x38);     // 功能設(shè)置 8位、5*7點(diǎn)陣
  123.         delay(1500);
  124.         LCD1602_write(0,0x0c);     //設(shè)置 光標(biāo)   不顯示開(kāi)關(guān)、不顯示光標(biāo)、字符不閃爍
  125.         LCD1602_write(0,0x06);
  126.         LCD1602_write(0,0xd0);
  127.         delay(1500);
  128. }
  129. /********************************************************************
  130. * 名稱 : show()
  131. * 功能 : LCD1602液晶顯示程序
  132. * 輸入 : 無(wú)
  133. * 輸出 : 無(wú)
  134. ***********************************************************************/
  135. void show()                        //顯示數(shù)據(jù)
  136. {

  137.                 LCD1602_write(0,0x80);                   //顯示位置設(shè)定
  138.                 LCD1602_writebyte("Temp:");                //顯示當(dāng)前溫度值
  139.                 if(temp>=0)                         //顯示溫度整數(shù)部分
  140.                 {
  141.                            if(temp>999)LCD1602_write(1,0x30+temp/1000%10);           
  142.                         else LCD1602_writebyte(" ");
  143.                         if(temp>99)LCD1602_write(1,0x30+temp/100%10);
  144.                         else LCD1602_writebyte(" ");
  145.                         LCD1602_write(1,0x30+temp/10%10);
  146.                         LCD1602_writebyte(".");
  147.                            LCD1602_write(1,0x30+temp%10);
  148.                 }else
  149.                 {
  150.                         LCD1602_writebyte("-");          //顯示溫度負(fù)數(shù)部分
  151.                         if(temp*-1>99)LCD1602_write(1,0x30+(temp*-1)/10%10);
  152.                         else LCD1602_writebyte(" ");
  153.                         LCD1602_write(1,0x30+(temp*-1)%10);        
  154.                         LCD1602_writebyte(".");
  155.                            LCD1602_write(1,0x30+temp%10);
  156.                 }
  157.                 LCD1602_write(1,0xdf);
  158.                 LCD1602_writebyte("C  ");
  159. }
  160. /********************************************************************
  161. * 名稱 : float TempCalculate(float Rx,float B,float Revise,float BasicRx)
  162. * 功能 : 根據(jù)當(dāng)前熱敏電阻的阻值、以及參數(shù)、通過(guò)Sin曲線求出當(dāng)前系統(tǒng)的溫度值  并返回浮點(diǎn)型的溫度值
  163. * 輸入 : 無(wú)
  164. * 輸出 : 無(wú)
  165. ***********************************************************************/
  166. float TempCalculate(float Rx,float B,float Revise,float BasicRx)
  167. {
  168. /*

  169. Rx:  熱敏電阻當(dāng)前阻值
  170. B:   熱敏電阻參數(shù)B值
  171. Revise:  校正溫度
  172. BasicRx:  熱敏電阻25度時(shí)電阻(標(biāo)稱電阻數(shù)值)
  173. 返回: 攝氏度

  174. */  


  175.     Rx = Rx / BasicRx;

  176.     Rx = log(Rx);

  177.     Rx = (Rx) / B;

  178.     Rx = Rx + 0.003356;
  179.     Rx = 1 / Rx;
  180.     Rx = Rx - 273.13;  
  181.     Rx = Rx + Revise;


  182.     return Rx;

  183. }
  184. /********************************************************************
  185. * 名稱 : void main()
  186. * 功能 : 系統(tǒng)主程序
  187. * 輸入 : 無(wú)
  188. * 輸出 : 無(wú)
  189. ***********************************************************************/
  190. void main()
  191. {
  192.         float Rad;               //生成運(yùn)算暫存變量
  193.         LCD1602_cls();     //LCD1602初始化程序調(diào)用
  194.         while(1)
  195.         {
  196.                 zhi=(float)ReadAD(AD_CH3)/819.0;  //計(jì)算電壓值
  197.                 Rad=zhi/((5.0-zhi)/10000.0);   //計(jì)算熱敏電阻當(dāng)前阻值
  198.                 temp=(int)((temp * 0.5) + (TempCalculate(Rad,4200.0,0,10000.0) * 0.5)*10);//求出當(dāng)前系統(tǒng)的當(dāng)前溫度
  199.                 show();                 //顯示函數(shù)
  200.         }
  201. }

復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

ID:752974 發(fā)表于 2021-10-11 17:27 | 顯示全部樓層
數(shù)據(jù)采集和數(shù)據(jù)顯示應(yīng)該是獨(dú)立工作的兩個(gè)模塊,先調(diào)顯示函數(shù),正常工作后再調(diào)數(shù)據(jù)采集部分。
回復(fù)

使用道具 舉報(bào)

ID:959346 發(fā)表于 2021-10-11 19:39 | 顯示全部樓層
是所有都沒(méi)有顯示,還是其它固定顯示的正常,只有溫度沒(méi)有顯示?如果有顯示,按代碼看,溫度一定會(huì)顯示數(shù)字,那就是溫度值顯示不對(duì)?如果都沒(méi)有顯示,那就先把顯示調(diào)出來(lái)。如果是有顯示,但是溫度顯示不對(duì),先顯示固定的溫度值,看顯示是否正常,如果正常,就分析你的ADC檢測(cè)及溫度轉(zhuǎn)化部分。
回復(fù)

使用道具 舉報(bào)

ID:858009 發(fā)表于 2021-10-13 11:37 | 顯示全部樓層
Jiang_YY 發(fā)表于 2021-10-11 19:39
是所有都沒(méi)有顯示,還是其它固定顯示的正常,只有溫度沒(méi)有顯示?如果有顯示,按代碼看,溫度一定會(huì)顯示數(shù)字 ...

其他都正常,固定顯示溫度也可以,ADC轉(zhuǎn)換顯示在1602液晶屏可以顯示正確溫度,在斷碼屏顯示不出正常溫度,一直顯示三個(gè)0,不知道是什么原因
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲成人自拍 | 成人国产免费观看 | 在线观看国产 | 亚洲精品一区二区另类图片 | 黄网站在线播放 | 亚洲一区在线播放 | 欧美一区免费 | 欧美成人a | 国产欧美日韩一区二区三区在线观看 | 97视频精品 | 天天草天天干 | 国产精品视频一区二区三区不卡 | 97综合在线| 欧美黄色免费网站 | 成人二区 | 久草在线免费资源 | 国产一区二区 | 亚洲免费一区 | 国产免费播放视频 | 一区二区三区四区在线 | 免费三级黄 | 黄色日本片| 犬夜叉在线观看 | 91成人 | 亚洲欧美激情国产综合久久久 | 午夜天堂| 午夜亚洲 | 欧美成人久久 | 一级片在线观看 | 日日骚网| 久久精品国产一区二区电影 | 日韩欧美在线观看 | 欧美精品综合在线 | 精品国偷自产在线 | 欧美亚洲国语精品一区二区 | 91精品国产综合久久久久蜜臀 | 日日摸夜夜添夜夜添特色大片 | 中文字幕在线观看 | 免费在线成人 | 亚洲免费婷婷 | 精品久久久久久 |