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

📄 max6675tc.c

📁 基于MAX6675的温度测试及在液晶显示程序
💻 C
字号:
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define nop2()  _nop_();_nop_();
#define CnSet 10;
uchar code tab1[]="Tu:";
uchar code tab2[]="Tm:";
sbit lcden=P2^7;
sbit lcdrs=P2^1;
sbit lcdrw=P2^0;
sbit CS1=P2^5;
sbit SCK=P2^2;
sbit SO=P2^3;
sbit ALARM=P1^2;
sbit SSR1=P1^3;

bit col;
bit bt;
uchar Cn,status;

uchar curpos[]={0xc4,0xca,0xcf,0xc9,0xc6,0xc3} ;  //光标位置
uint RealTemp,LastTemp,SetTemp=200;//
uchar count;
uchar kp,ki,kd;




void increase();
void decrease();
void RunPID();


void delay(uint z)
{
	uint x,y;
	for(x=z;x>0;x--)
		for(y=110;y>0;y--);
}
void write_com(uchar com)
{
	lcdrs=0;
	lcdrw=0;
	P0=com;
	delay(1);
	lcden=0;
	lcden=1;
	delay(1);
	lcden=0;
}

void write_data(uchar date)
{
	lcdrs=1;
	lcdrw=0;
	P0=date;
	delay(1);
	lcden=0;
	lcden=1;
	delay(1);
	lcden=0;	
}
uint measure(void)
{
	uint i,value;
	SCK=0;
	nop2();
	CS1=0;
	value=0;
	for(i=0;i<16;i++)
	{
		nop2();
		SCK=1;
		value=value+value;
		nop2();
		if(SO)
		{
			value=value+1;
         }
		SCK=0;
	}
		CS1=1;
		value=value>>3;
		return value;
	
}
 void Display(void)
{
	uint tmp;
	uchar wan,qian,bai,shi,ge,num;
	tmp=RealTemp*25;
	write_com(0x80);
	for(num=0;num<3;num++)
	{
	write_data(tab1[num]);
	}
	
    wan=tmp/10000;
	qian=tmp/1000%10;
	bai=tmp/100%10;
	shi=tmp/10%10;
	ge=tmp%10;

    if(wan==0)
	{write_data(0x20);}
	else   
	write_data(0x30+wan);
	write_data(0x30+qian);
	write_data(0x30+bai);
	write_data(0x2E);
	write_data(0x30+shi);
	write_data(0x30+ge);

	tmp=SetTemp*25;
	write_com(0x80+0x40);
	for(num=0;num<3;num++)
	{
	write_data(tab2[num]);
	}
	wan=tmp/10000;
	qian=tmp/1000%10;
	bai=tmp/100%10;
	shi=tmp/10%10;
	ge=tmp%10;

    if(wan==0)
	{write_data(0x20);}
	else   
	write_data(0x30+wan);
	write_data(0x30+qian);
	write_data(0x30+bai);
	write_data(0x2E);
	write_data(0x30+shi);
	write_data(0x30+ge);
 	if (status!=0)      //若在调整状态,则置相应的光标闪烁
 	{
   	write_com(curpos[status-1]);
   	write_com(0x0f);
 	}
//	else
//	{
//	write_com(0x0c);  //光标不闪烁
//	}

}

void init()
{
	write_com(0x38);
	write_com(0x0c);
	write_com(0x06);
	write_com(0x01);
	write_com(0x80+2);
	TMOD=0x01;
	TH0=(65535-10000)/256;
	TL0=(65535-10000)%256;
	EA=1;
	ET0=1;
	TR0=1;
    bt=0;
	Cn=CnSet;
	ALARM=0;
}


//键盘处理
void ScanKey()
{ 	uint Key,Key0;
	P3|=0xf0;
 	Key=P3;
	Key0=Key&0xf0;
 	if (Key0==0xf0) return;
 	Key=Key0;
	delay(100);
   do{
	P3|=0xf0;
   	Key0=P3;
   	Key0=Key0&0xf0;
  } while (Key==Key0);

  switch(Key&0xf0)
   {case 0xe0:  if (status <1)
                {
                 status++;
                 }
            	 else
              	{
                status=0;
              	}
               	break;
   case 0xd0: 	increase();
			  	break;
   case 0xb0: 	decrease();
				break;
   case 7:   	status=0;
                RunPID();
            	break;
   default:break;
  }
}

void increase()
{
 switch(status)
  {  
	case 1:  SetTemp+=4;
            break;
   case 2:  kp++;
            break;
   case 3: 	ki++;
            break;
   case 4:  kd++;
   			break;
    default:break;
   } 
}

void decrease()
{
 switch(status)
  {
	case 1:  SetTemp-=4;
            break;
   case 2:	kp--;
            break;
   case 3: 	ki--;
            break;
   case 4: 	kd--;
            break;

   default:break;
    }
}


void timer0() interrupt 1
{   
	TH0=(65536-50000)/256;
	TL0=(65536-50000)%256;
	if((--Cn)==0)
	{
	col=1;
	Cn=CnSet;
	if(col)
		{
			col=0;
			RealTemp=measure();
	
		}
	}
			Display();
}

void RunPID()
{
;
}
 
void main()
{   delay(100);
	init();	
	delay(100);
	while(1)
	{
	ScanKey();
	if(RealTemp>SetTemp)
	SSR1=0;
	else
	SSR1=1;

	}	
	
		
}



⌨️ 快捷键说明

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