詳細的K型熱電偶MAX6675中文代碼解析,分享給需要的朋友們。話不多說,直接在附件上傳代碼
電路原理圖如下:
0.png (109.65 KB, 下載次數: 126)
下載附件
2018-10-30 16:04 上傳
0.png (196.81 KB, 下載次數: 82)
下載附件
2018-10-30 16:05 上傳
1、 將K 型熱電偶“+”極接上模塊T+ “-”極接上模塊T- ;
2、 SO、CS、SCK 分別接上單片機對應IO 端口;
3、 檢查上述接線是否有誤,確認接線OK 后,將 VCC、GND 分別接上 DC+5V、GND 注意不要接反,以免燒壞模塊;
K型熱電偶MAX6675測溫的單片機源程序如下:
- /********************************************************************
- 開發環境:Keil
- 單片機:AT89S52-24PU 晶振:12 MZ
- 程序描述: K型熱電偶+MAX6675,LCD1602 顯示
- designed by YING
- 2012-08-29 21:16 完成
- 注:1:本程序沒有作斷偶檢測,請根據實際情況參考DATASHEET 編寫
- 2:本程序只供學習參考之用,請勿用于其它用途!!參考請自行驗證程序正確性及可靠性!!!
- **************************定義頭文件*****************************************/
- #include <reg51.h>
- #include<intrins.h>
- /*******************************************************************/
- //lcd part
- #define LINE1 0
- #define LINE2 1
- #define LINE1_HEAD 0x80
- #define LINE2_HEAD 0xC0
- #define LCD_DELAY_TIME 40
- #define DATA_MODE 0x38
- #define OPEN_SCREEN 0x0C
- #define DISPLAY_ADDRESS 0x80
- #define CLEARSCREEN LCD_en_command(0x01)
- #define HIGH 1
- #define LOW 0
- #define TRUE 1
- #define FALSE 0
- #define ZERO 0
- #define MSB 0x80
- #define LSB 0x01
- /*******************************************************************/
- #define LCDIO P1
- sbit LCD1602_RS=P2^0; //設置RS
- sbit LCD1602_RW=P2^1; //設置RW
- sbit LCD1602_EN=P2^2; //設置E
- sbit MAX6675_SO=P2^4;
- sbit MAX6675_SCK=P2^5;
- sbit MAX6675_CS=P2^6;
- unsigned char data disdata[5];
- unsigned int Value;
- /********************************************************************/
- void LCD_delay(void);//LCD延時函數
- void LCD_en_command(unsigned char command);//LCD寫指令
- void LCD_en_dat(unsigned char temp);//LCD寫數據
- void LCD_set_xy( unsigned char x, unsigned char y );//設置LCD顯示位置
- void LCD_write_char( unsigned x,unsigned char y,unsigned char dat);//向LCD寫入一個字符
- void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s);//向LCD寫入一串字符
- void LCD_init(void);//LCD初始化函數
- /********************************************************************/
- void delay_nms(unsigned int n);//延時函數
- /********************************************************************/
- /***********************從MAX6675讀取溫度*********************************************/
- unsigned int ReadMAX6675()
- {
- unsigned char count;
- MAX6675_CS=1; //關閉MAX6675
- //_nop_();
- // _nop_();
- MAX6675_CS=0;//置低,使能MAX6675
- //_nop_();
- MAX6675_SCK=1;
- Value=0;
- //_nop_();
- //_nop_();
- for(count=16;count>0;count--) //獲取16位MSB
- {
- MAX6675_SCK=0; //sck置低
- Value=Value<<1; //左移
- if(MAX6675_SO==1) //取當前值
- Value|=0x0001;
- else
- Value&=0xffff;
- MAX6675_SCK=1;
- //_nop_();
- //_nop_();
- //_nop_();
- //_nop_();
- }
- MAX6675_CS=1; //關閉MAX6675
- return Value;
- }
- /***************************************************************************************/
- /**************************溫度值顯示 **************************************************/
- void tempdisp()
- {
- unsigned int temp;
- unsigned int TempValue;
- // unsigned int testD2;
- unsigned int xiaoshu;
-
- TempValue=ReadMAX6675();//讀取MAX6675 轉換后的溫度數值;
- TempValue=TempValue<<1; //去掉第15位
- TempValue=TempValue>>4;//去掉第0~2位
- xiaoshu=TempValue*10;
- TempValue=TempValue/4; //MAX6675最大數值為1023。75,而AD精度為12位,即2的12次方為4096,轉換對應數,故要除4;
- xiaoshu=xiaoshu/4; //與上述同理
- if(TempValue>=1024)
- {TempValue=1024;}
- disdata[0]=(TempValue/1000)%10+0x30;//千位 +0x30是對應LCD里的ROM字符位置編碼
- disdata[1]=(TempValue/100)%10+0x30;//百位 +0x30是對應LCD里的ROM字符位置編碼
- disdata[2]=(TempValue/10)%10+0x30;//十位 +0x30是對應LCD里的ROM字符位置編碼
- disdata[3]=(TempValue)%10+0x30;//個位 +0x30是對應LCD里的ROM字符位置編碼
- disdata[4]=xiaoshu%10+0x30;//分位 +0x30是對應LCD里的ROM字符位置編碼
- if(disdata[0]==0x30)
- {
- LCD_write_char(4,LINE2,0x20); //顯示千位
- if(disdata[1]==0x30)
- { LCD_write_char(5,LINE2,0x20);
- if(disdata[2]==0x30)
- LCD_write_char(6,LINE2,0x20);
- else LCD_write_char(6,LINE2,disdata[2]); //顯示十位
- }
- else
- { LCD_write_char(5,LINE2,disdata[1]); //顯示百位
- LCD_write_char(6,LINE2,disdata[2]); //顯示十位
- }
- }
- else
- {
- LCD_write_char(4,LINE2,disdata[0]); //顯示千位
- LCD_write_char(5,LINE2,disdata[1]); //顯示百位
- LCD_write_char(6,LINE2,disdata[2]); //顯示十位
- }
- // LCD_write_char(6,LINE2,disdata[2]); //顯示十位
- LCD_write_char(7,LINE2,disdata[3]); //顯示個位
- LCD_write_char( 8,LINE2,0X2e);//顯示"點"
- LCD_write_char(9,LINE2,disdata[4]); //顯示分位
- LCD_write_char( 10,LINE2,0XDF);//顯示"度"
- LCD_write_char( 11,LINE2,0X43);//顯示"C"
-
- }
- /****************************主 程 序********************************************************/
- void main(void)
- {
- delay_nms(10);
- LCD_init(); //LCD初始化
- delay_nms(50);
- CLEARSCREEN; //清屏
- delay_nms(10);
- LCD_write_string(0,LINE1,"temperature TEST");
- while(TRUE )
- {
-
- tempdisp();
- delay_nms(220);
- }
- }
- /********************************************************************/
- /******************** LCD 函數部份 ***********************************/
- void LCD_delay(void)
- {
- unsigned char i;
- for(i=LCD_DELAY_TIME;i>ZERO;i--)
- ;
- }
- /********************************************************************/
- void LCD_en_command(unsigned char command)
- {
- LCD_delay();
- LCD1602_RS=LOW;
- LCD1602_RW=LOW;
- LCD1602_EN=HIGH;
- LCDIO=command;
- LCD1602_EN=LOW;
- }
- /********************************************************************/
- void LCD_en_dat(unsigned char dat)
- {
- LCD_delay();
- LCD1602_RS=HIGH;
- LCD1602_RW=LOW;
- LCD1602_EN=HIGH;
- LCDIO=dat;
- LCD1602_EN=LOW;
- }
- /********************************************************************/
- void LCD_set_xy( unsigned char x, unsigned char y )
- {
- unsigned char address;
- if (y == LINE1)
- address = LINE1_HEAD + x;
- else
- address = LINE2_HEAD + x;
- LCD_en_command(address);
- }
- /********************************************************************/
- void LCD_write_char( unsigned x,unsigned char y,unsigned char dat)
- {
- LCD_set_xy( x, y );
- LCD_en_dat(dat);
- }
- /********************************************************************/
- void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s)
- {
- LCD_set_xy( X, Y );//設置顯示XY地址
- while (*s) // 寫字符
- {
- LCDIO=*s;
- LCD_en_dat(*s);
- s ++;
- }
- }
- /********************************************************************/
- void LCD_init(void)
- { CLEARSCREEN;//clear screen
- LCD_en_command(DATA_MODE);//8位模式
- LCD_en_command(DATA_MODE);
- LCD_en_command(DATA_MODE);
- LCD_en_command(DATA_MODE);
- LCD_en_command(OPEN_SCREEN);//開顯示
- LCD_en_command(DISPLAY_ADDRESS);//設定顯示起始位
- CLEARSCREEN;//清屏
- }
- /********************************************************************/
- /*********************** 延時 *********************************/
- void delay_nms(unsigned int n)
- {
- unsigned int i=0,j=0;
- for (i=n;i>0;i--)
- for (j=0;j<1140;j++);
- }
- /********************************************************************/
復制代碼
所有資料51hei提供下載:
K型熱電偶MAX6675資料.zip
(199.38 KB, 下載次數: 428)
2018-10-30 13:59 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|