#include "drvtm6932.h"
#include "intrins.h" //_nop_();延时函数用
#include "cpu.h"
#include "drvMax6675.h"
#include "AppTimer.h"
//extern unsigned char TIM;
//extern delay(unsigned int x);
#define CS IO_MAX6675_CS
#define SO IO_MAX6675_MISO
#define SCK IO_MAX6675_SCLK
//sbit SCK=P2^1;
//sbit CS=P2^3;
//sbit SO=P2^2;
//sbit A0=P2^6;
//sbit A1=P2^5;
//热电偶数据读取,返回温度
unsigned int vMax6675GetTemp()
{
unsigned char i;
unsigned int Temp;
Temp = 0;
CS=0;
_nop_();
_nop_();
_nop_();
SCK=0;
_nop_();
_nop_();
//这个_nop_()等效与汇编里面的NOP指令,也就是空一个机器周期,
//在51单片机中_nop_()等于空12个时钟周期【即一个机器周期】
//CS=0;
//EA=0;
for(i=0;i<16;i++)//16位数据读取
{
Temp<<=1;//向左移一位
_nop_();
SCK=1;//上升
_nop_();
_nop_();
_nop_();
_nop_();
if(SO==1)
Temp|=0x01;
else
Temp|=0x00;
_nop_();
_nop_();
_nop_();
_nop_();
SCK=0;
_nop_();
_nop_();
_nop_();
_nop_();
}
CS=1;
//EA=1;
//16(0-15)位数据中,3-14为数据位。其中3,4两位为小数位,其余为整数位。
Temp<<=1; //向左移1位,取0-14位
Temp>>=4; //向右移4位,取3-14位
Temp>>=2; //取整数位
//delay(10);
// A0=1;
//A1=1;
if(Temp > 1000)
{
Temp =999 ;
}
return Temp;
}
void vMax6675_showTest(void)
{
u32 Temperature = 0;
u8 dispdata[4],i,temp;
Temperature = 0;
Temperature = vMax6675GetTemp()-2;
if(Temperature > 1000)
{
Temperature = 999;
}
// Temperature = vSysTimerGetms();
temp = Temperature/100;
if(temp)
dispdata[0] = temp;
else
dispdata[0] = eDispOFF;
dispdata[1] = Temperature/10%10;
dispdata[2] = Temperature%10;
dispdata[3] = eDispErr;
for(i = 0;i< 4; i++)
{
vTm1638Disp(eDigitalA,i,dispdata[i]);
}
//vADC_showTest();
}