欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: K型熱電偶MAX6675電路原理圖以及51單片機源程序 [打印本頁]

作者: 13480828805    時間: 2018-10-30 13:59
標題: K型熱電偶MAX6675電路原理圖以及51單片機源程序
詳細的K型熱電偶MAX6675中文代碼解析,分享給需要的朋友們。話不多說,直接在附件上傳代碼

電路原理圖如下:




1、 將K 型熱電偶“+”極接上模塊T+ “-”極接上模塊T-  ;
2、 SO、CS、SCK 分別接上單片機對應IO 端口;
3、 檢查上述接線是否有誤,確認接線OK 后,將 VCC、GND 分別接上 DC+5V、GND 注意不要接反,以免燒壞模塊;

K型熱電偶MAX6675測溫的單片機源程序如下:
  1. /********************************************************************
  2. 開發(fā)環(huán)境:Keil
  3. 單片機:AT89S52-24PU  晶振:12 MZ
  4. 程序描述: K型熱電偶+MAX6675,LCD1602 顯示  
  5. designed by YING
  6. 2012-08-29 21:16   完成
  7. 注:1:本程序沒有作斷偶檢測,請根據(jù)實際情況參考DATASHEET 編寫
  8.     2:本程序只供學習參考之用,請勿用于其它用途!!參考請自行驗證程序正確性及可靠性!!!
  9. **************************定義頭文件*****************************************/
  10. #include <reg51.h>
  11. #include<intrins.h>
  12. /*******************************************************************/
  13. //lcd part
  14. #define  LINE1     0
  15. #define  LINE2     1
  16. #define  LINE1_HEAD    0x80
  17. #define  LINE2_HEAD    0xC0
  18. #define  LCD_DELAY_TIME   40
  19. #define  DATA_MODE    0x38
  20. #define  OPEN_SCREEN    0x0C
  21. #define  DISPLAY_ADDRESS   0x80
  22. #define  CLEARSCREEN    LCD_en_command(0x01)
  23. #define  HIGH   1
  24. #define  LOW    0
  25. #define  TRUE    1
  26. #define  FALSE    0
  27. #define  ZERO    0
  28. #define  MSB    0x80
  29. #define  LSB    0x01
  30. /*******************************************************************/
  31. #define  LCDIO     P1
  32. sbit LCD1602_RS=P2^0;   //設置RS
  33. sbit LCD1602_RW=P2^1;   //設置RW
  34. sbit LCD1602_EN=P2^2;   //設置E
  35. sbit MAX6675_SO=P2^4;   
  36. sbit MAX6675_SCK=P2^5;   
  37. sbit MAX6675_CS=P2^6;
  38. unsigned char data disdata[5];
  39. unsigned int Value;
  40. /********************************************************************/
  41. void LCD_delay(void);//LCD延時函數(shù)
  42. void LCD_en_command(unsigned char command);//LCD寫指令
  43. void LCD_en_dat(unsigned char temp);//LCD寫數(shù)據(jù)
  44. void LCD_set_xy( unsigned char x, unsigned char y );//設置LCD顯示位置
  45. void LCD_write_char( unsigned x,unsigned char y,unsigned char dat);//向LCD寫入一個字符
  46. void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s);//向LCD寫入一串字符
  47. void LCD_init(void);//LCD初始化函數(shù)
  48. /********************************************************************/
  49. void delay_nms(unsigned int n);//延時函數(shù)

  50. /********************************************************************/
  51. /***********************從MAX6675讀取溫度*********************************************/
  52. unsigned int ReadMAX6675()   
  53. {
  54. unsigned char count;
  55. MAX6675_CS=1; //關閉MAX6675
  56.   //_nop_();
  57. //  _nop_();
  58. MAX6675_CS=0;//置低,使能MAX6675
  59. //_nop_();

  60. MAX6675_SCK=1;
  61. Value=0;
  62. //_nop_();
  63. //_nop_();
  64. for(count=16;count>0;count--) //獲取16位MSB
  65. {
  66.   MAX6675_SCK=0;  //sck置低
  67.   Value=Value<<1;     //左移
  68.     if(MAX6675_SO==1) //取當前值
  69.    Value|=0x0001;
  70.   else
  71.    Value&=0xffff;
  72.   MAX6675_SCK=1;
  73. //_nop_();
  74.   //_nop_();
  75.   //_nop_();
  76. //_nop_();
  77. }
  78. MAX6675_CS=1;  //關閉MAX6675
  79. return Value;
  80. }
  81. /***************************************************************************************/
  82. /**************************溫度值顯示 **************************************************/
  83. void tempdisp()  
  84. {
  85.   unsigned int temp;
  86.   unsigned int TempValue;
  87. // unsigned int testD2;
  88.   unsigned int xiaoshu;
  89.   
  90.    TempValue=ReadMAX6675();//讀取MAX6675 轉換后的溫度數(shù)值;   
  91.    TempValue=TempValue<<1;         //去掉第15位
  92.    TempValue=TempValue>>4;//去掉第0~2位
  93.    xiaoshu=TempValue*10;
  94.    TempValue=TempValue/4;             //MAX6675最大數(shù)值為1023。75,而AD精度為12位,即2的12次方為4096,轉換對應數(shù),故要除4;
  95.    xiaoshu=xiaoshu/4;                        //與上述同理
  96.         if(TempValue>=1024)
  97.         {TempValue=1024;}
  98.         disdata[0]=(TempValue/1000)%10+0x30;//千位 +0x30是對應LCD里的ROM字符位置編碼
  99.     disdata[1]=(TempValue/100)%10+0x30;//百位  +0x30是對應LCD里的ROM字符位置編碼
  100.     disdata[2]=(TempValue/10)%10+0x30;//十位 +0x30是對應LCD里的ROM字符位置編碼
  101.     disdata[3]=(TempValue)%10+0x30;//個位  +0x30是對應LCD里的ROM字符位置編碼
  102.     disdata[4]=xiaoshu%10+0x30;//分位         +0x30是對應LCD里的ROM字符位置編碼  

  103.         if(disdata[0]==0x30)
  104.         {
  105.           LCD_write_char(4,LINE2,0x20);        //顯示千位        
  106.           if(disdata[1]==0x30)
  107.             { LCD_write_char(5,LINE2,0x20);  
  108.                   if(disdata[2]==0x30)
  109.                LCD_write_char(6,LINE2,0x20);
  110.                    else  LCD_write_char(6,LINE2,disdata[2]);         //顯示十位
  111.             }
  112.            else  
  113.           {    LCD_write_char(5,LINE2,disdata[1]); //顯示百位
  114.                LCD_write_char(6,LINE2,disdata[2]);         //顯示十位
  115.           }
  116.          }           
  117.          else  
  118.          {
  119.          LCD_write_char(4,LINE2,disdata[0]);        //顯示千位
  120.          LCD_write_char(5,LINE2,disdata[1]);   //顯示百位
  121.          LCD_write_char(6,LINE2,disdata[2]);        //顯示十位
  122.          }
  123.          // LCD_write_char(6,LINE2,disdata[2]);         //顯示十位
  124.          LCD_write_char(7,LINE2,disdata[3]);        //顯示個位
  125.          LCD_write_char( 8,LINE2,0X2e);//顯示"點"
  126.           LCD_write_char(9,LINE2,disdata[4]);        //顯示分位
  127.           LCD_write_char( 10,LINE2,0XDF);//顯示"度"                 
  128.      LCD_write_char( 11,LINE2,0X43);//顯示"C"


  129. }  
  130. /****************************主 程 序********************************************************/
  131. void main(void)
  132. {
  133. delay_nms(10);
  134. LCD_init();   //LCD初始化
  135. delay_nms(50);
  136. CLEARSCREEN;        //清屏
  137. delay_nms(10);
  138. LCD_write_string(0,LINE1,"temperature TEST");

  139. while(TRUE )   
  140. {
  141.      
  142.         tempdisp();  
  143.         delay_nms(220);              
  144. }
  145. }
  146. /********************************************************************/
  147. /******************** LCD 函數(shù)部份 ***********************************/
  148. void LCD_delay(void)   
  149. {
  150. unsigned char i;
  151. for(i=LCD_DELAY_TIME;i>ZERO;i--)
  152.    ;
  153. }
  154. /********************************************************************/  
  155. void LCD_en_command(unsigned char command)
  156. {
  157. LCD_delay();
  158. LCD1602_RS=LOW;   
  159. LCD1602_RW=LOW;
  160. LCD1602_EN=HIGH;
  161. LCDIO=command;
  162. LCD1602_EN=LOW;
  163. }
  164. /********************************************************************/
  165. void LCD_en_dat(unsigned char dat)
  166. {
  167. LCD_delay();
  168. LCD1602_RS=HIGH;
  169. LCD1602_RW=LOW;
  170. LCD1602_EN=HIGH;
  171. LCDIO=dat;
  172. LCD1602_EN=LOW;
  173. }
  174. /********************************************************************/
  175. void LCD_set_xy( unsigned char x, unsigned char y )
  176. {
  177. unsigned char address;
  178. if (y == LINE1)
  179.   address = LINE1_HEAD + x;
  180. else
  181.      address = LINE2_HEAD + x;
  182. LCD_en_command(address);
  183. }
  184. /********************************************************************/
  185. void LCD_write_char( unsigned x,unsigned char y,unsigned char dat)
  186. {
  187. LCD_set_xy( x, y );
  188. LCD_en_dat(dat);
  189. }
  190. /********************************************************************/
  191. void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s)
  192. {
  193.     LCD_set_xy( X, Y );//設置顯示XY地址
  194.     while (*s)  // 寫字符
  195.     {
  196.      LCDIO=*s;
  197.         LCD_en_dat(*s);   
  198. s ++;
  199.     }
  200. }
  201. /********************************************************************/
  202. void LCD_init(void)
  203. {  CLEARSCREEN;//clear screen
  204. LCD_en_command(DATA_MODE);//8位模式
  205.   LCD_en_command(DATA_MODE);
  206.   LCD_en_command(DATA_MODE);
  207.   LCD_en_command(DATA_MODE);
  208. LCD_en_command(OPEN_SCREEN);//開顯示
  209. LCD_en_command(DISPLAY_ADDRESS);//設定顯示起始位
  210. CLEARSCREEN;//清屏
  211. }
  212. /********************************************************************/
  213. /***********************  延時 *********************************/
  214. void delay_nms(unsigned int n)      
  215. {
  216.     unsigned int i=0,j=0;
  217.     for (i=n;i>0;i--)
  218.      for (j=0;j<1140;j++);  
  219. }
  220. /********************************************************************/
復制代碼

所有資料51hei提供下載:
K型熱電偶MAX6675資料.zip (199.38 KB, 下載次數(shù): 428)



作者: 鬼卒神戈    時間: 2019-2-20 21:47
電路太簡單
作者: wangdanadn1989    時間: 2019-2-28 10:36
還不錯哦
作者: 黃金杰倫22    時間: 2019-4-28 09:53
樓主棒棒的.....
作者: 明棋M    時間: 2019-5-10 23:57
有程序運行成功的嗎?我運行的時候LCD為什么不亮啊

作者: allblue    時間: 2019-5-17 18:06
明棋M 發(fā)表于 2019-5-10 23:57
有程序運行成功的嗎?我運行的時候LCD為什么不亮啊

我的LCD也啥都不顯示,請問你解決了嗎
作者: abcd123.    時間: 2019-5-29 13:25
感謝了,下載先看看那
作者: zhanghoub    時間: 2019-5-29 14:52
謝謝樓主,下來研究一下。
作者: 春日榮榮    時間: 2019-5-30 10:57
共同學習,共同進步
作者: bird666    時間: 2019-6-19 12:43
感謝分享
作者: 221524    時間: 2019-6-29 15:23
感謝分享
作者: colinh    時間: 2019-7-30 17:31
不用查表么?
作者: chenxianping    時間: 2019-9-16 15:08
我搭臺測試了一下,平常室內溫度應該是26度左右,顯示卻是57度。我打火機在探頭邊上烤,溫度顯示也會上升,但因為地鼠在那里57度,應該顯示不準的了,不知道是程序問題還是啥問題。有誰懂得解答一下么,我是小白一個呢
作者: chenxianping    時間: 2019-9-16 15:12
補充一下,剛才用別的一個加熱溫控的程序灌進去,顯示實時溫度貌似正常了,說明硬件搭的沒有問題,應該是這個程序算法有錯吧,但是我不知道哪里有錯,我只知道結果不對,要是相差個1-2度,我也看不出來會有問題,應為我沒有校準設備,但是室內溫度57度肯定是不對的。
作者: buck    時間: 2019-11-14 16:47
多謝樓主,下載看看
作者: 運寶寶    時間: 2020-3-14 19:35
allblue 發(fā)表于 2019-5-17 18:06
我的LCD也啥都不顯示,請問你解決了嗎

想問一下樓主解決了嗎,我也是一樣的問題
作者: mainloop    時間: 2020-3-18 16:51
         一載驗證下,剛好有個產品用到,不知結果如何??

作者: lishilaoshi1    時間: 2022-6-22 13:51
我下載了然后修改了那個LCD1602的接線位置。用的STC89C52RC.室溫和火機測試都正常




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1