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

📄 play.#2

📁 该程序是基于c8051f的红外线发射率的测量程序
💻 #2
📖 第 1 页 / 共 5 页
字号:
	LCDDAT(0xBD);  
	LCDDAT(0xE1);
	LCDDAT(0xB0);  
	LCDDAT(0xB4); 
	LCDDAT(0xC8); 
	LCDDAT(0xB7);     
	LCDDAT(0xB6); 
	LCDDAT(0xA8);                         
	LCDASIIC();
	LCDLINE(0x07,0,0,0xEE,0,0x3F,0x01,0xEE,0);
	//
	while(1)
	{
		if(SAMPLEN)
		{
			SAMPLEN=0;
			workshow_temp();
		}		
		if(KEY == 'S' || KEY == 'C')
		{
			key=KEY;
			switch(key)
			{
				case 'S':{							  
							  //************************************
							  //画温度过程基本曲线,画压力过程基本曲线
								temp1=33;
								temp2=(uint)(197-(GY[GYNUM].temperature[0]-TEMPRATURE_lo)*scale2);
								temp3=(uint)(197-(GY[GYNUM].power[0]-POWER_lo)*scale3);
								X1L[0]=33;X1H[0]=0;
								X1L[1]=33;X1H[1]=0;
								Y1L[0]=temp2%256;Y1H[0]=temp2/256;
								Y1L[1]=temp3%256;Y1H[1]=temp3/256;	
								for(i=1,alltime=0;i<20;i++)
								{
									if(GY[GYNUM].time[i]!=0)
									{
										alltime+=GY[GYNUM].time[i];
										temp1=(uint)(33+alltime*scale1);
										temp2=(uint)(197-(GY[GYNUM].temperature[i]-TEMPRATURE_lo)*scale2);
										temp3=(uint)(197-(GY[GYNUM].power[i]-POWER_lo)*scale3);
										X2L[0]=temp1%256;X2H[0]=temp1/256;
										X2L[1]=temp1%256;X2H[1]=temp1/256;
										Y2L[0]=temp2%256;Y2H[0]=temp2/256;
										Y2L[1]=temp3%256;Y2H[1]=temp3/256;
										LCDLINE(0x00,X1L[0],X1H[0],Y1L[0],Y1H[0],X2L[0],X2H[0],Y2L[0],Y2H[0]);
										LCDLINE(0x00,X1L[1],X1H[1],Y1L[1],Y1H[1],X2L[1],X2H[1],Y2L[1],Y2H[1]);
										X1L[0]=X2L[0];X1H[0]=X2H[0];Y1L[0]=Y2L[0];Y1H[0]=Y2H[0];
										X1L[1]=X2L[1];X1H[1]=X2H[1];Y1L[1]=Y2L[1];Y1H[1]=Y2H[1];
									}
									else
									{
										break;
									}
								}
							  //************************************
							  AUTO_MAN=1;alltime=0;MOTORRUN;SEGMENT=1;segtemp=1;TEMPTIME=0;SAMPLEN=1;first=0;							  
							  X1L[0]=33;X1H[0]=0;Y1L[0]=197;Y1H[0]=0;
							  X1L[1]=33;X1H[1]=0;Y1L[1]=197;Y1H[1]=0;
							  //
							  LCDXY(12,14);
							  for(i=0;i<14;i++)
							  {
							       LCDDAT(' ');
							  }
							  LCDLINE(0x07,0,0,0xEE,0,0x3F,0x01,0xEE,0);
							  DAC0CN=0x80;//开DAC0
							  DAC0L=0x00;
							  DAC0H=0x00;
							  delay1s();delay1s();delay1s();
							  delay1s();delay1s();delay1s();
							 // delay1s();delay1s();delay1s();
							 // delay1s();delay1s();delay1s();
							  DAC0L=0xC9;
							  DAC0H=0x00;
							  delay1s();delay1s();
							  DAC0L=0x92;
							  DAC0H=0x01;
							  delay1s();delay1s();
							  DAC0L=0x5B;
							  DAC0H=0x02;
							  delay1s();delay1s();
							  DAC0L=0x25;
							  DAC0H=0x03;						  
							  WRITEAI(0x15,4);
							  TG=0;
							  //
							  goto ack;break;
						 }
				case 'C':{goto cancel;break;}
				default: {break;}
			}
		}	
	}
ack:
	SFRPAGE=DAC1_PAGE;
	DAC1CN=0x00;//关DAC1	
	SFRPAGE=LEGACY_PAGE;
	LCDFCOLOR(4);//前景色为红色	
	LCDHANZ();
	LCDXY(3,0);
	LCDDAT(0xD7);
	LCDDAT(0xD4);
	LCDDAT(0xB6);
	LCDDAT(0xAF);//自动
	LCDXY(31,0);
	LCDDAT(0xD4);
	LCDDAT(0xCB);
	LCDDAT(0xD0);
	LCDDAT(0xD0);//运行
	LCDASIIC();
	LCDLINE(0x07,0,0,15,0,0x3F,0x01,15,0);
	while(1)
	{
		if(SAMPLEN)
		{
			SAMPLEN=0;
			workshow_temp();
			if((AIBUF[0]+AIBUF[1]*256) > (TEMPRATURE_lo+5))
			{
				break;
			}
		}
	}		
	WRITEAI(0x15,0);
	WRITEAI(0x18,1);
	DAC0CN=0x80;//开DAC0
	POWEROUT=0;
	PrevError=0;
	PrevDError=0;
	PIDEN=1;
	goto AUTO;
MAN:
	PIDEN=0;
	DAC0CN=0x00;//关DAC0
	SFRPAGE=DAC1_PAGE;
	DAC1CN=0x80;//开DAC1	
	SFRPAGE=LEGACY_PAGE;
	LCDFCOLOR(4);//前景色为红色	
	LCDHANZ();
	LCDXY(3,0);
	LCDDAT(0xCA);
	LCDDAT(0xD6);
	LCDDAT(0xB6);
	LCDDAT(0xAF);//手动
	LCDXY(31,0);
	LCDDAT(0xD4);
	LCDDAT(0xDD);
	LCDDAT(0xCD);
	LCDDAT(0xA3);//暂停
	LCDLINE(0x07,0,0,15,0,0x3F,0x01,15,0);
	LCDASIIC();
	WRITEAI(0x15,4);
	WRITEAI(0x18,33);
	goto MANU;	
AUTO:	
	if(!AUTO_MAN)
	{		
		goto MAN;
	}
	if(SAMPLEN)	
	{
		SAMPLEN=0;
		PIDEN=0;	
		SEGMENT=READAI(0x00);
		if(first==1 && SEGMENT ==1)
		{
			DAC0CN=0x00;
			SFRPAGE=0x01;//DAC1 and T3 are in the same SFR page
			DAC1CN=0x00;	
			TR3=0;
			SFRPAGE=LEGACY_PAGE;
			LCDFCOLOR(7);//前景色为白色	
			LCDXY(13,1);
			LCDDAT(TOTALTIME/600+0x30);
			LCDDAT(TOTALTIME/60%10+0x30);
			LCDDAT(':');
			LCDDAT(TOTALTIME%60/10+0x30);
			LCDDAT(TOTALTIME%10+0x30);//显示时间值
			//画温度过程曲线,画压力过程曲线
			temp1=(uint)(33+TOTALTIME*scale1);
			temp2=(uint)(197-(temptemp-TEMPRATURE_lo)*scale2);
			temp3=(uint)(197-(temppower-POWER_lo)*scale3);
			X2L[0]=temp1%256;X2H[0]=temp1/256;
			X2L[1]=temp1%256;X2H[1]=temp1/256;
			Y2L[0]=temp2%256;Y2H[0]=temp2/256;
			Y2L[1]=temp3%256;Y2H[1]=temp3/256;
			LCDLINE(14,X1L[0],X1H[0],Y1L[0],Y1H[0],X2L[0],X2H[0],Y2L[0],Y2H[0]);
			LCDLINE(11,X1L[1],X1H[1],Y1L[1],Y1H[1],X2L[1],X2H[1],Y2L[1],Y2H[1]);
			WRITEAI(0x15,12);
			//
			LCDFCOLOR(4);//前景色为红色		
			LCDHANZ();
			LCDXY(31,0);
			LCDDAT(0xBD);
			LCDDAT(0xE1);
			LCDDAT(0xCA);
			LCDDAT(0xF8);//结束
			LCDLINE(0x07,0,0,15,0,0x3F,0x01,15,0);
			LCDASIIC();		
			//
			LCDFCOLOR(6);//前景色为黄色	
			LCDHANZ();                                       
			LCDXY(12,14);//油缸回程请稍候
			LCDDAT(0xD3);  
			LCDDAT(0xCD); 
			LCDDAT(0xB8); 
			LCDDAT(0xD7);     
			LCDDAT(0xBB); 
			LCDDAT(0xD8);             
			LCDDAT(0xB3);  
			LCDDAT(0xCC);
			LCDDAT(0xC7);  
			LCDDAT(0xEB); 
			LCDDAT(0xC9); 
			LCDDAT(0xD4);     
			LCDDAT(0xBA); 
			LCDDAT(0xF2);                         
			LCDASIIC();
			LCDLINE(0x07,0,0,0xEE,0,0x3F,0x01,0xEE,0);
			//
			if(HDISTANCE)
			{	
				TPFCON;
				MOTORRUN;
loop:
				while(HDISTANCE){}
				delay200ms();	
				if(!HDISTANCE)
				{
					MOTORSTOP;
					delay200ms();
					TPFCOFF;
				}
				else
				{
					goto loop;
				}		
			}
			else
			{
				MOTORSTOP;
				delay200ms();
				TPFCOFF;
			}	
			//
			LCDXY(12,14);
			for(i=0;i<14;i++)
			{
			     LCDDAT(' ');
			}
			LCDLINE(0x07,0,0,0xEE,0,0x3F,0x01,0xEE,0);		
			//
			BEEP=1;
			delay200ms();
			BEEP=0;
			delay200ms();
			BEEP=1;
			delay200ms();
			BEEP=0;
			delay200ms();
			BEEP=1;
			delay200ms();
			BEEP=0;
			delay1s();
			delay1s();
			goto again;
		}
		if(first==0 && SEGMENT >=2)	
		{
			first=1;
		}
		if(SEGMENT == segtemp)
		{
			TEMPTIME=READAI(0x56);//读取运行时间
			PIDEN=1;
		}
		else
		{
			segtemp=SEGMENT;
			goto AUTO;
		}
		for(i=0,alltime=0;i<SEGMENT;i++)
		{
			alltime+=GY[GYNUM].time[i];
		}
		alltime+=TEMPTIME;//得到总的时间
		LCDFCOLOR(7);//前景色为白色	
		LCDXY(5,1);
		LCDDAT(SEGMENT/10+0x30);
		LCDDAT(SEGMENT%10+0x30);//显示段号值
		LCDXY(13,1);
		LCDDAT(alltime/600+0x30);
		LCDDAT(alltime/60%10+0x30);
		LCDDAT(':');
		LCDDAT(alltime%60/10+0x30);
		LCDDAT(alltime%10+0x30);//显示时间值
		//************
		ZERO=0;
		temptemp=AIBUF[0]+AIBUF[1]*256;//得到温度值
		LCDFCOLOR(4);//前景色为红色
		LCDXY(24,1);//光标到(24,1)
		if(ZERO==0 && temptemp/1000==0)
		{
			LCDDAT(' ');
		}
		else
		{
			ZERO=1;
			LCDDAT(temptemp/1000+0x30);
		}
		if(ZERO==0 && temptemp/100%10==0)
		{
			LCDDAT(' ');
		}
		else
		{
			ZERO=1;
			LCDDAT(temptemp/100%10+0x30);
		}
		if(ZERO==0 && temptemp%100/10==0)
		{
			LCDDAT(' ');
		}
		else
		{
			LCDDAT(temptemp%100/10+0x30);
		}
		LCDDAT(temptemp%10+0x30);//显示温度
		//
		temppower=(uchar)(((float)GY[GYNUM].power[SEGMENT]-(float)GY[GYNUM].power[SEGMENT-1])/(float)GY[GYNUM].time[SEGMENT]*(float)TEMPTIME+(float)GY[GYNUM].power[SEGMENT-1]);
		ttpp=(uchar)(REALPOWER*BL+temppower*(1-BL));
		//
		LCDXY(35,1);//光标到(35,1)
		LCDFCOLOR(1);//前景色为兰色
		ZERO=0;
		if(ZERO==0 && ttpp/100==0)
		{
			LCDDAT(' ');
		}
		else
		{
			ZERO=1;
			LCDDAT(ttpp/100+0x30);
		}
		if(ZERO==0 && ttpp/10%10==0)
		{
			LCDDAT(' ');
		}
		else
		{
			LCDDAT(ttpp/10%10+0x30);
		}
		LCDDAT(ttpp%10+0x30);//显示实时压力值
		//画温度过程曲线,画压力过程曲线
		temp1=(uint)(33+alltime*scale1);
		temp2=(uint)(197-(temptemp-TEMPRATURE_lo)*scale2);
		temp3=(uint)(197-(temppower-POWER_lo)*scale3);
		X2L[0]=temp1%256;X2H[0]=temp1/256;
		X2L[1]=temp1%256;X2H[1]=temp1/256;
		Y2L[0]=temp2%256;Y2H[0]=temp2/256;
		Y2L[1]=temp3%256;Y2H[1]=temp3/256;
		LCDLINE(14,X1L[0],X1H[0],Y1L[0],Y1H[0],X2L[0],X2H[0],Y2L[0],Y2H[0]);
		LCDLINE(11,X1L[1],X1H[1],Y1L[1],Y1H[1],X2L[1],X2H[1],Y2L[1],Y2H[1]);
		X1L[0]=X2L[0];X1H[0]=X2H[0];Y1L[0]=Y2L[0];Y1H[0]=Y2H[0];
		X1L[1]=X2L[1];X1H[1]=X2H[1];Y1L[1]=Y2L[1];Y1H[1]=Y2H[1];
	}
	//************
	goto AUTO;
MANU:	
	if(AUTO_MAN)
	{		
		goto ack;
	}
	SFRPAGE=DAC1_PAGE;
	if(KEY == 'U')
	{
		DACVALUE=DAC1L+(DAC1H & 0x0F)*256;  
		if(DACVALUE < 3889)//由于外部电压放大倍数为3.9倍,电压输出最大为2.43V
		{                   //才能使输出电压在9V以内,对应DA最大为0x0F31即3889
			DACVALUE++;
			DAC1L=DACVALUE%256;
			DAC1H=DACVALUE/256;
			delay5ms();
		}
	}
	if(KEY == 'D')
	{
		DACVALUE=DAC1L+(DAC1H & 0x0F)*256;
		if(DACVALUE > 0)
		{
			DACVALUE--;
			DAC1L=DACVALUE%256;
			DAC1H=DACVALUE/256;
			delay5ms();
		}
	}
	SFRPAGE=LEGACY_PAGE;
	if(SAMPLEN)
	{
		SAMPLEN=0;
		workshow();
	}	
	goto MANU;
cancel:
	LCDSHOW(MENUSELECT);//菜单选择画面
}
//***********************
void selectpronum()//选择工艺序号
{
	uchar i;
	uchar gynum[2];
	uchar gynumber;
	uchar key;
	LCDSHOW(PRONUMSELT);
	LCDASIIC();//西文方式
	LCDGBCOLOR(7,0);//光标前景色为白色//光标背景色为黑色
	LCDFCOLOR(2);//设置前景色为绿色
	LCDOVERLAP(1);//覆盖方式
again:
	LCDXY(22,10);//光标移到x=22光标移到y=10
	gynum[0]=GYNUM/10;
	if(gynum[0]==0)
	{
		LCDDAT(' ');
	}
	else
	{
		LCDDAT(gynum[0]+0x30);//显示当前工艺序号的高位
	}	
	gynum[1]=GYNUM%10;
	LCDDAT(gynum[1]+0x30);//显示当前工艺序号的低位
	LCDGBOC(1);//光标显示
	while(1)
	{
newlly: 
		LCDXY(22,10);//光标移到x=22光标移到y=10	
		for(i=0;i<2;i++)
		{
loop:
			while((KEY <'0' || KEY >'9') && (KEY != 'S') && (KEY != 'C') && (KEY != 'R') && (KEY != 'L')){}
			key=KEY;
			switch(key)
			{
				case '0':
				case '1':
				case '2':
				case '3':
				case '4':
				case '5':
				case '6':
				case '7':
				case '8':
				case '9':
						{
							 gynum[i]=(key-0x30);
							 if(i==0)
							 {
							 	if(gynum[i]==0)
								{
									LCDDAT(' ');
								}
								else
								{
									LCDDAT(key);
								}							 	
							 }
							 else
							 {
								LCDDAT(key);
							 }						 
							 break;
						}
				case 'R':{LCDRSFT(1);break;}
				case 'L':{goto newlly;break;}
				case 'S':{goto ack;break;}
				case 'C':{goto cancel;break;}
				default: {goto loop;break;}
			}	
			while(KEY != 0xFF){}
		}
	}
ack:
	while(KEY != 0xFF){}
	gynumber=(gynum[0]*10+gynum[1]);
	if((gynumber > 60) || (gynumber == 0))
	{
		LCDGBOC(0);//光标关闭
		goto again;
	}
	else
	{
		GYNUM=gynumber;
	}	
cancel:
    LCDSHOW(MENUSELECT);//菜单选择画面
}
//***********************
void setpropara()//设置工艺参数
{
	uchar i,j,k;
	uint address;
	uint addr;
	bit ZERO=0;
	uchar key;
	uchar xdata temp[20][11];
	LCDSHOW(PROPARASET);
	LCDASIIC();//西文方式
	LCDGBCOLOR(7,0);//光标前景色为白色光标背景色为黑色
	LCDFCOLOR(7);//设置前景色为白色
	LCDXY(21,1);//光标到(21,1)
	if(GYNUM/10==0)
	{
		LCDDAT(' ');
	}
	else
	{
		LCDDAT(GYNUM/10+0x30);
	}
	LCDDAT(GYNUM%10+0x30);	
	LCDOVERLAP(1);//覆盖方式
again:	
	for(i=0;i<20;i++)
	{		
		if(i<10)
		{
			LCDXY(5,4+i);//光标到(5,4+i)	
		}
		else
		{
			LCDXY(24,i-6);//光标到(24,i-6)	
		}
		LCDFCOLOR(4);//设置前景色为红色
		temp[i][10]=GY[GYNUM].time[i]/600;
		LCDDAT(temp[i][10]+0x30);
		temp[i][9]=GY[GYNUM].time[i]/60%10;
		LCDDAT(temp[i][9]+0x30);
		LCDDAT(':');
		temp[i][8]=GY[GYNUM].time[i]%60/10;
		LCDDAT(temp[i][8]+0x30);
		temp[i][7]=GY[GYNUM].time[i]%10;
		LCDDAT(temp[i][7]+0x30);
		LCDRSFT(1);//右移一个字符
		LCDFCOLOR(1);//设置前景色为兰色
		temp[i][6]=GY[GYNUM].temperature[i]/1000;
		ZERO=0;
		if(ZERO==0 && temp[i][6]==0)
		{
			LCDDAT(' ');
		}
		else
		{
			ZERO=1;
			LCDDAT(temp[i][6]+0x30);
		}		
		temp[i][5]=GY[GYNUM].temperature[i]/100%10;
		if(ZERO==0 && temp[i][5]==0)
		{
			LCDDAT(' ');
		}
		else
		{
			ZERO=1;
			LCDDAT(temp[i][5]+0x30);
		}		
		temp[i][4]=GY[GYNUM].temperature[i]%100/10;
		if(ZERO==0 && temp[i][4]==0)
		{
			LCDDAT(' ');
		}
		else
		{
			LCDDAT(temp[i][4]+0x30);
		}		
		temp[i][3]=GY[GYNUM].temperature[i]%10;
		LCDDAT(temp[i][3]+0x30);
		ZERO=0;		
		LCDRSFT(1);//右移一个字符
		LCDFCOLOR(6);//设置前景色为黄色
		temp[i][2]=GY[GYNUM].power[i]/100;
		if(ZERO==0 && temp[i][2]==0)
		{
			LCDDAT(' ');
		}
		else
		{
			ZERO=1;
			LCDDAT(temp[i][2]+0x30);
		}		
		temp[i][1]=GY[GYNUM].power[i]%100/10;
		if(ZERO==0 && temp[i][1]==0)
		{
			LCDDAT(' ');
		}

⌨️ 快捷键说明

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