⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 max6675.c

📁 程序完成热电偶专用处理芯片MAX6675的数据读取
💻 C
字号:
//程序功能:MAX6675 的输出数据为16 位,输出时高位在前。D15 为无用位;
//D14~D3 对应于热电偶模拟输出电压的数字量;
//D2 用于检测热电偶是否断线(D2为1表明热电偶断线) ;
//D1为 MAX6675的 标识符;D0为三态
//温度值= 1023.75 ×转换后的数字量/4095 =0.25*转换后的数字量
//程序接口:P3.2->SO; P3.0->CS; P3.3->SCK;使用IO口模拟SPI接口;
//当室温为11C时,用热电偶测得的显示温度值为24C,约为两倍,程序有待改进;
//实验结果:此结果为对读取的MAX6675的输出数值做右移一位处理的结果,也就是除以2
//           热电偶输出3.1mv,显示的温度值88.25C;
//           热电偶输出2.9mv,显示的温度值84.25C
//           测量工具为普通的万用表;
//编写时间:2月23日
//作者:林丽娟
#include <msp430x14x.h>
#include "lcd1602to430.h"
#define CS1 P3OUT |= BIT0;	
#define CS0 P3OUT &=~BIT0;	
#define SCK1 P3OUT|=BIT3;
#define SCK0 P3OUT&=~BIT3;
#define SO  P3IN&BIT2
const unsigned char digit[10] = {'0','1','2','3','4','5','6','7', '8','9'};
unsigned char dis_temp [9] = {'+','0','0','0', '0', '.' ,'0','0','\0'};
unsigned char dis_K[]={"T-K-->"};
int disdata[12]={0};
unsigned char flag;
int i;
Init()
{
P3SEL&= 0x00;                            // 普通I/O
P3DIR |= 0x09;                            // P3.0,P3.3 输出;P3.2输入;
P3OUT |= 0x01;	
}

void delay3(int z)     //z=1时为2ms    
{
	int x,y;
	for(x=z;x>0;x--)
	   for(y=110;y>0;y--);
}




void  K_test()
{	   
        double ch;
        unsigned int dt;
	unsigned char temp1,temp2;
	   unsigned char da=0;
	    temp1=0;
	    temp2=0;  
	    CS0;
	    _NOP();	
	    SCK1;
		delay3(20);
		SCK0; 
	        delay3(20);  //*输出数据D15
		SCK1; 	 
	   	delay3(20);
		for(i=0;i<4;i++)
		{
		  SCK0 ;
		  if((P3IN&BIT2)==0x00)
                   {da=0x00;}
                  else
                     da=0x01;
		  delay3(10);
		  SCK1 ;
		  temp1=(temp1<<1)|da;
		  delay3(10);
			}
		da = 0;
		for(i=0;i<8;i++)
		{
		  SCK0;
		 if((P3IN&BIT2)==0x00)
                   {da=0x00;}
                  else
                    da=0x01;
		  delay3(2);
		  SCK1;
		  temp2=(temp2<<1)|da;
		  delay3(5);  
		 }
               dt=temp1*256+temp2;
               dt>>=1;
		SCK0;
	 	delay3(5);
		if((P3IN&BIT2)==0x00)
                   {flag=0;}
                  else
                     flag=1; 		//*读取D2断偶标志so=1表断线
		SCK1;	
		delay3(5);
		SCK0;	
		SCK1;
		SCK0;                //*输出数据D0
		CS1;
		delay3(10);	  	
     	    ch=(double)dt*0.25;
            disdata[0]=(int)ch/1000;	
	    disdata[1]=(int)ch%1000/100;   
	    disdata[2]=(int)ch%100/10; 
	    disdata[3]=(int)ch%10;
	   // disdata[4]=10;
	    disdata[5]=(int)(ch*100)%100/10;
	    disdata[6]=(int)(ch*100)%10;	
          delay3(500); 
         dis_temp[1]=digit[disdata[0]];
         dis_temp[2]=digit[disdata[1]];
         dis_temp[3]=digit[disdata[2]];
         dis_temp[4]=digit[disdata[3]];
         dis_temp[6]=digit[disdata[5]];
         dis_temp[7]=digit[disdata[6]];
}		

main()
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  InitPort();
  InitLCD() ;
  Init();
  while(1)
  {
  K_test();
  lcd_pos(0x44);		 // 设置显示位置为第一行的第5个字符
     delay(30);
      i = 0;
     while(i<8)
     {						// 显示字符"welcome!"
         lcd_wdat(dis_temp [i]);
         delay(10);
         i++;
      }
     if(flag==1)
     {
       lcd_pos(0x00);		 // 设置显示位置为第一行的第5个字符
       lcd_wdat('r');
     }    
     else
     {
       lcd_pos(0x00);		 // 设置显示位置为第一行的第5个字符
       for(i=0;i<6;i++)
       lcd_wdat(dis_K[i]);
     }
   
  delay3(2000);}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -