楼主,我的MAX6675就是不输出是怎么回事? |
跪求大神,是不是热电偶转换那段函数出问题了?不是特别懂串口模拟SPI,不知道有没有写错。 max6675是不是SCK CS SO三个引脚对应程序自己定义的三个I/O口,剩下的VCC和GND接在MCU对应的VCC和GND就好了? |
附上程序: #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); //温度转换 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的值(含小数点) 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() //热电偶转换 { unsigned int i; unsigned long tdata; tdata=0; SCK = 1; SO=0; CS = 1; //选择从机 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,则数据的最后一位置1 else tdata = tdata & 0xfe; // 否则数据的最后一位置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) //位选,选择点亮的数码管, { 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位,即小数位 } delay(100); //间隔一段时间扫描 P0=0x00;//消隐 } } |