標(biāo)題:
[請教]普中51單片機(jī)與max6675芯片用k型熱電偶檢測溫度的問題
[打印本頁]
作者:
timy82
時間:
2017-3-14 16:28
標(biāo)題:
[請教]普中51單片機(jī)與max6675芯片用k型熱電偶檢測溫度的問題
小白初學(xué),想實現(xiàn)k型熱電偶+max6675+stc89c52單片機(jī) 組成一個檢測溫度的系統(tǒng)。
但是上網(wǎng)學(xué)著寫了段程序,最后顯示不出正確的數(shù)值。。。想求助各位大大,哪里出問題了。
100553ynng9b9ffc0dpddo.png
(544.35 KB, 下載次數(shù): 75)
下載附件
2017-3-14 17:23 上傳
作者:
timy82
時間:
2017-3-14 16:28
附上程序:
#include "reg52.h"//頭文件
#include "absacc.h"
#include "math.h"
#include "intrins.h"
#define uchar unsigned char //宏定義
#define uint unsigned int
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
sbit SO=P1^0;
sbit SCK=P1^1;
sbit CS=P1^2;
#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
void delay(unsigned int i)
{
while(i--);
}
uint Re_Convert (void); //溫度轉(zhuǎn)換
void DigDisplay(); //溫度顯示
uchar qian=0,bai=0,shi=0,ge=0,xiao=0;
uint P_Temp;
float wendu;
uchar code smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//顯示0~F的值
uchar code xiaoshu[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; //顯示0~F的值(含小數(shù)點(diǎn))
void main(void) //主程序
{
delayNOP();
SO =0;
while(1)
{
P_Temp=Re_Convert();
wendu=0.25*P_Temp;//P_Temp =(1024*P_Temp)/4096
delayNOP();
DigDisplay();
P_Temp=0;
wendu=0;
}
}
uint Re_Convert() //熱電偶轉(zhuǎn)換
{
unsigned int i;
unsigned long tdata;
tdata=0;
SCK = 1;
SO=0;
CS = 1; //選擇從機(jī)
delayNOP();
CS=0;
for(i=0;i<16;i++)
{
tdata = tdata<<1; // 左移一位,或_crol_(temp,1)
delayNOP();
SCK=0;
if(SO == 1)
tdata = tdata|0x01; // 若接收到的位為1,則數(shù)據(jù)的最后一位置1
else
tdata = tdata & 0xfe; // 否則數(shù)據(jù)的最后一位置0
delayNOP();
SCK=1;
delayNOP();
}
tdata=tdata<<1;
tdata=tdata>>4;
return(tdata);
}
void DigDisplay()//溫度顯示
{
uchar i;
uint temp=wendu*10;
bai=temp%10000/1000;
shi=temp%1000/100;
ge=temp%100/10;
xiao=temp%10;
P0=0x0ff;
for(i=0;i<4;i++)
{
switch(i) //位選,選擇點(diǎn)亮的數(shù)碼管,
{
case(3):
LSA=1;LSB=1;LSC=0; P0=smgduan[bai];break;//顯示第3位,即百位
case(2):
LSA=0;LSB=1;LSC=0; P0=smgduan[shi];break;//顯示第2位,即十位
case(1):
LSA=1;LSB=0;LSC=0; P0=xiaoshu[ge];break;//顯示第1位,即個位
case(0):
LSA=0;LSB=0;LSC=0; P0=smgduan[xiao];break;//顯示第0位,即小數(shù)位
}
delay(100); //間隔一段時間掃描
P0=0x00;//消隱
}
}
作者:
timy82
時間:
2017-3-14 16:28
跪求大神,是不是熱電偶轉(zhuǎn)換那段函數(shù)出問題了?不是特別懂串口模擬SPI,不知道有沒有寫錯。
max6675是不是SCK CS SO三個引腳對應(yīng)程序自己定義的三個I/O口,剩下的VCC和GND接在MCU對應(yīng)的VCC和GND就好了?
作者:
小白66666
時間:
2020-5-12 19:37
樓主,我的MAX6675就是不輸出是怎么回事?
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1