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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 25871|回復: 17
收起左側

K型熱電偶MAX6675電路原理圖以及51單片機源程序

  [復制鏈接]
ID:324780 發表于 2018-10-30 13:59 | 顯示全部樓層 |閱讀模式
詳細的K型熱電偶MAX6675中文代碼解析,分享給需要的朋友們。話不多說,直接在附件上傳代碼

電路原理圖如下:
0.png

0.png

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

K型熱電偶MAX6675測溫的單片機源程序如下:
  1. /********************************************************************
  2. 開發環境:Keil
  3. 單片機:AT89S52-24PU  晶振:12 MZ
  4. 程序描述: K型熱電偶+MAX6675,LCD1602 顯示  
  5. designed by YING
  6. 2012-08-29 21:16   完成
  7. 注:1:本程序沒有作斷偶檢測,請根據實際情況參考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延時函數
  42. void LCD_en_command(unsigned char command);//LCD寫指令
  43. void LCD_en_dat(unsigned char temp);//LCD寫數據
  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初始化函數
  48. /********************************************************************/
  49. void delay_nms(unsigned int n);//延時函數

  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 轉換后的溫度數值;   
  91.    TempValue=TempValue<<1;         //去掉第15位
  92.    TempValue=TempValue>>4;//去掉第0~2位
  93.    xiaoshu=TempValue*10;
  94.    TempValue=TempValue/4;             //MAX6675最大數值為1023。75,而AD精度為12位,即2的12次方為4096,轉換對應數,故要除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 函數部份 ***********************************/
  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, 下載次數: 428)


評分

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

查看全部評分

回復

使用道具 舉報

ID:76041 發表于 2019-2-20 21:47 | 顯示全部樓層
電路太簡單
回復

使用道具 舉報

ID:245919 發表于 2019-2-28 10:36 | 顯示全部樓層
還不錯哦
回復

使用道具 舉報

ID:101819 發表于 2019-4-28 09:53 | 顯示全部樓層
樓主棒棒的.....
回復

使用道具 舉報

ID:508509 發表于 2019-5-10 23:57 | 顯示全部樓層
有程序運行成功的嗎?我運行的時候LCD為什么不亮啊
回復

使用道具 舉報

ID:525832 發表于 2019-5-17 18:06 | 顯示全部樓層
明棋M 發表于 2019-5-10 23:57
有程序運行成功的嗎?我運行的時候LCD為什么不亮啊

我的LCD也啥都不顯示,請問你解決了嗎
回復

使用道具 舉報

ID:221379 發表于 2019-5-29 13:25 | 顯示全部樓層
感謝了,下載先看看那
回復

使用道具 舉報

ID:382826 發表于 2019-5-29 14:52 | 顯示全部樓層
謝謝樓主,下來研究一下。
回復

使用道具 舉報

ID:267803 發表于 2019-5-30 10:57 | 顯示全部樓層
共同學習,共同進步
回復

使用道具 舉報

ID:137447 發表于 2019-6-19 12:43 | 顯示全部樓層
感謝分享
回復

使用道具 舉報

ID:561156 發表于 2019-6-29 15:23 | 顯示全部樓層
感謝分享
回復

使用道具 舉報

ID:532502 發表于 2019-7-30 17:31 | 顯示全部樓層
不用查表么?
回復

使用道具 舉報

ID:377803 發表于 2019-9-16 15:08 | 顯示全部樓層
我搭臺測試了一下,平常室內溫度應該是26度左右,顯示卻是57度。我打火機在探頭邊上烤,溫度顯示也會上升,但因為地鼠在那里57度,應該顯示不準的了,不知道是程序問題還是啥問題。有誰懂得解答一下么,我是小白一個呢
回復

使用道具 舉報

ID:377803 發表于 2019-9-16 15:12 | 顯示全部樓層
補充一下,剛才用別的一個加熱溫控的程序灌進去,顯示實時溫度貌似正常了,說明硬件搭的沒有問題,應該是這個程序算法有錯吧,但是我不知道哪里有錯,我只知道結果不對,要是相差個1-2度,我也看不出來會有問題,應為我沒有校準設備,但是室內溫度57度肯定是不對的。
回復

使用道具 舉報

ID:478238 發表于 2019-11-14 16:47 | 顯示全部樓層
多謝樓主,下載看看
回復

使用道具 舉報

ID:701188 發表于 2020-3-14 19:35 來自觸屏版 | 顯示全部樓層
allblue 發表于 2019-5-17 18:06
我的LCD也啥都不顯示,請問你解決了嗎

想問一下樓主解決了嗎,我也是一樣的問題
回復

使用道具 舉報

ID:705649 發表于 2020-3-18 16:51 | 顯示全部樓層
         一載驗證下,剛好有個產品用到,不知結果如何??
回復

使用道具 舉報

ID:1036371 發表于 2022-6-22 13:51 | 顯示全部樓層
我下載了然后修改了那個LCD1602的接線位置。用的STC89C52RC.室溫和火機測試都正常
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日本精品视频一区二区 | 亚洲黄色成人网 | 日韩区| 亚洲欧洲综合av | 亚洲一级毛片 | 久久久久国产一区二区三区 | 91在线视频观看免费 | 国产精品一区二区av | 岛国精品 | 成人久久18免费网站麻豆 | a级在线免费观看 | 欧美一区在线视频 | 在线播放日韩 | 羞羞的视频免费看 | 一区二区三区 在线 | 91中文| 日韩av一二三区 | 成人免费一区二区三区视频网站 | 午夜精品久久久久久不卡欧美一级 | 日韩美女一区二区三区在线观看 | 精品国产色 | 久久久免费少妇高潮毛片 | 91福利在线观看 | 日韩精品一区二区三区 | 日韩一区二区av | 在线观看a视频 | 美女久久视频 | 国产成人久久av免费高清密臂 | 国产精品日韩欧美一区二区三区 | 日本免费在线看 | 欧美日韩国产三级 | 日本一区二区影视 | 日韩中文字幕免费在线 | 国产午夜在线观看 | 中文字幕在线国产 | 拍真实国产伦偷精品 | 久久久久国产精品午夜一区 | 91小视频 | 精品视频一区二区在线观看 | 99精品网站| 成年人网站免费 |