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

📄 振动测试治具b.c

📁 测试手机的振动功能
💻 C
字号:
#include <reg52.h>
#include <振动测试治具.h>
void main(void)
{
	#define WAITTIME 100
	#define SPEEDOKNUMBER 3
	#define CURRENTOKNUMBER 3
	unsigned int NowData;
	int SpeedOkNumber=0,CurrentOkNumber=0;
	bit SpeedOk,CurrentOk,SpeedNg,CurrentNg;
	#define SPEEDTOTALNUMBER 5
	#define CURRENTTOTALNUMBER 5
//	char SpeedTotalNumber=0,CurrentTotalNumber=0;
	int SpeedLimit=0,CurrentLimit=0;
	bit nn=0;
	char i;
	timeh=0;
	Initial();
	RUN=0;
	twinkle=1;
	Delay2ms(1);
	TR0=TR1;
	TR2=1;
	EX0=EX1=0;
	while(1)
	{
/*		if(CodeSwitchOk)
		{
			NowData=0;
			for(i=0;i<4;i++)
			{
				NowData=NowData*10+CodeSwitch[i];
			}
			SpeedLo=NowData;

			NowData=0;
			for(i=4;i<8;i++)
			{
				NowData=NowData*10+CodeSwitch[i];
			}
			SpeedHi=NowData;

			NowData=0;
			for(i=8;i<12;i++)
			{
				NowData=NowData*10+CodeSwitch[i];
			}
			CurrentLo=NowData;

			NowData=0;
			for(i=12;i<16;i++)
			{
				NowData=NowData*10+CodeSwitch[i];
			}
			CurrentHi=NowData;
			CodeSwitchOk=0;*/

/*		if(nn)
		{
			Speed=SpeedLo;Current=SpeedHi;
		}
		else
		{
			Speed=CurrentLo;Current=CurrentHi;
		}
		SpeedFinish=CurrentFinish=1;
		if(CurrentFinish)
		{
			NowData=Current;
			for(i=4;i<8;i++)
			{
				Smg[i]=NowData% 10;
				NowData=NowData/10;
			}
			CurrentFinish=0;
		}
		if(SpeedFinish)
		{
			
			NowData=Speed;
			for(i=0;i<4;i++)
			{
				Smg[i]=NowData% 10;
				NowData=NowData/10;
			}
			SpeedFinish=0;
//				SpeedStart=1;
		}
*/
		while(!STARTSWITCH);
		Delay2ms(10);
		for(i=0;i<WAITTIME;i++)
		{
			if(STARTSWITCH) break;
			Delay2ms(1);
		}
		if(i<WAITTIME) continue;
		twinkle=0;
		nn=~nn;
		SpeedOkNumber=CurrentOkNumber=0;
		SpeedOk=CurrentOk=SpeedNg=CurrentNg=0;
		SpeedLimit=SPEEDTOTALNUMBER;
		CurrentLimit=CURRENTTOTALNUMBER;
		SpeedStart=1;
		Speed=Current=0;
		CurrentFinish=SpeedFinish=1;
		SpeedTesting=0;
		SignalExist=0;
//		Round=0;
		hcn=0;
		MOTORON=0;
		Delay2ms(500);
		TR0=1;
		EX1=0;EX0=1;
		while(!STARTSWITCH)
		{
			if(CurrentFinish)
			{
				NowData=Cur[4];
				for(i=3;i>=0;i--)
				{
					NowData=NowData*10+Cur[i];
				}
				NowData++;NowData>>=1;   //NowData/2
				Current=NowData;
				for(i=4;i<8;i++)
				{
					Smg[i]=NowData% 10;
					NowData=NowData/10;
				}
				CurrentFinish=0;
			}
			if(!CurrentOk&&!CurrentNg)
			{
				if(CurrentLimit)
				{
					CurrentLimit--;
					if(Current<=CurrentHi&&Current>=CurrentLo)
					{
						CurrentOkNumber++;
						if(CurrentOkNumber>=CURRENTOKNUMBER) CurrentOk=1;
					}
					else
					{
						CurrentOkNumber=0;
					}
				}
				else
				{
					CurrentNg=1;
				}
			}
			if(SpeedFinish)
			{
				if(SignalExist)
				{
					NowData=Speed=(2000.0*1000*100*hcn)/(TL1+TH1*0x100L+timeh*0x10000L)+0.5;
				}
				else
				{
					NowData=Speed=0;
				}
				for(i=0;i<4;i++)
				{
					Smg[i]=NowData%10;
					NowData=NowData/10;
				}
				timeh=TL1=TH1=0;
				SpeedFinish=0;
				SpeedStart=1;
				SignalExist=0;
				EX1=1;TR1=1;
			}
			if(!SpeedOk&&!SpeedNg)
			{
				if(SpeedLimit)
				{
					SpeedLimit--;
					if(Speed<=SpeedHi&&Speed>=SpeedLo)
					{
						SpeedOkNumber++;
						if(SpeedOkNumber>=SPEEDOKNUMBER) SpeedOk=1;
					}
					else
					{
						SpeedOkNumber=0;
					}
				}
				else
				{
					SpeedNg=1;
				}
			}

/*			if(SpeedOk&&CurrentOk)
			{
				OKLED=0;NGLED=1;
				BELL=0;Delay2ms(150);BELL=1;
				break;
			}
			else
			{
				if(SpeedNg||CurrentNg)
				{
					OKLED=1;NGLED=0;
					BELL=0;Delay2ms(100);BELL=1;Delay2ms(100);
					BELL=0;Delay2ms(100);BELL=1;
					break;
				}
			}*/
		}
		MOTORON=1;
		TR0=0;EX0=0;
	}
}
void Initial(void)
{
	P0=P1=P2=P3=0xff;
//	RECLED=1;
//	INPORT=INKEYPORT;
	IT0=IT1=1;
	TMOD=0x12;		//Timer0:Mode2  Timer1:Mode1
	T2CON=0x0;
	TL0=TH0=-10;

//	TL0=T2MS & 256;
//	TH0=T2MS/256;
	RCAP2L=TL2=(T2MS & 256);
	RCAP2H=TH2=(T2MS/256);
	TL1=0;
	TH1=0;
	IE=0xaf;		//EA=1;EX0=1;ET0=1,ET1=1,EX1=1,ET2=1;
	IP=0xa;			//PX0=1,PX1=1
	TR0=0;
	TR1=0;
	TR2=1;
}
void Hwin (void) interrupt INT1INT
{
	if(SpeedTesting)
	{
		hcn++;
		if(hcn>=HCN||timeh>=MAXTIME)
		{
			TR1=0;
			SpeedTesting=EX1=0;
			SpeedFinish=1;
		}
	}
	else
	{
		if(SpeedStart)
		{
			TR1=0;
			TL1=0;
			TR1=1;
			TH1=0;
			hcn=0;
			timeh=0;
			SpeedStart=0;
			SpeedTesting=1;
//			Round=1;
		}
	}
	SignalExist=1;
}
void Timer1 (void) interrupt TIMER1INT
{
	if(!SignalExist)
	{
		TR1=SpeedTesting=EX1=0;
		SpeedFinish=1;
	}
	timeh++;
	SignalExist=0;
}
void Strobe7135 (void) interrupt INT0INT
{
//	static unsigned int NewCurrent=0;
//	bit mcd;
	static char cb=5;
//	mcd=MCD5;
	if(MCD5)
	{
		cb=5;
		if(!CurrentFinish) CurrentStart=1;
	}
	cb--;
	if(CurrentStart)
	{
		Cur[cb]=P1&0xf;
		if(!cb) CurrentFinish=1;
	}
}
void Time05us (void) interrupt TIMER0INT
{
	Clock=~Clock;
}





	
	
void Time2ms (void) interrupt TIMER2INT
{
	#define TWINKLETIME 250
	//	static char cn=100;
	static unsigned char tn=TWINKLETIME;
	//	static char InP1=0,InP2=0;
	//	char InP,InP3;
	static bit CodeSwitchStart=0;
	char n1,n2;
	static unsigned int Data1=0,Data2=0;
//	static int tm=MI;
	static char Digital=0;
	TF2=0;
//	TL0=T2MS & 256;
//	TH0=T2MS/256;
/*	tm--;
	if(tm<=0) 
	{
		TR1=0;
//		Speed=TH1*0x100+TL1;
		TH1=0;
		TL1=0;
		TR1=1;
//		Speed<<=1;
//		SpeedFinish=1;
		tm=MI;
	}*/
//	Clock=1;
	if(!STARTSWITCH) CodeSwitchStart=0;
	P0=0;SMGB=1;SMGB=0;P0=0xff;   //put off DISPLAY
	//Switch 8-15
	P2=Digital|(P2&0xf0);
	if(CodeSwitchStart)
	{
		P2=Digital|(P2&0xc0);BS3=1;  //LTS=0,SMGB=0
		P2=Digital|(P2&0xc0);BS3=1;  //LTS=0,SMGB=0
		P2=Digital|(P2&0xc0);BS3=1;  //LTS=0,SMGB=0
		P2=Digital|(P2&0xc0);BS3=1;  //LTS=0,SMGB=0
		LTS=0;
		if(P0==0xff)
		{
			if(!SP8)
			{
				n2=8;
			}
			else
			{
				n2=9;
			}
		}
		else
		{
			switch(P0)
			{
				case ~2:n2=1;break;
				case ~4:n2=2;break;
				case ~8:n2=3;break;
				case ~0x10:n2=4;break;
				case ~0x20:n2=5;break;
				case ~0x40:n2=6;break;
				case ~0x80:n2=7;break;
				default:n2=0;
			}
		}
//		CodeSwitch[Digital+8]=n;
		//Switch 0-7
		BS3=0;BS3=0;BS3=0;BS3=0;BS3=0;BS3=0;BS3=0;BS3=0;				
		if(P0==0xff)
		{
			if(!SP8)
			{
				n1=8;
			}
			else
			{
				n1=9;
			}
		}
		else
		{
			switch(P0)
			{
				case ~2:n1=1;break;
				case ~4:n1=2;break;
				case ~8:n1=3;break;
				case ~0x10:n1=4;break;
				case ~0x20:n1=5;break;
				case ~0x40:n1=6;break;
				case ~0x80:n1=7;break;
				default:n1=0;
			}
		}
	
//		CodeSwitch[Digital]=n;
		LTS=1;
		Data1=Data1*10+n1;
		Data2=Data2*10+n2;
		switch(Digital)
		{
			case 3:
				SpeedLo=Data1;
				CurrentLo=Data2;
				Data1=Data2=0;
				break;
			case 7:
				SpeedHi=Data1;
				CurrentHi=Data2;
				Data1=Data2=0;
				break;
		}
	}

	P0=LED[Smg[Digital]];
	switch(Digital)
	{
		case 1:
		case 5:P0|=0x80;break;
	}
	SMGB=1;				//Put on Display

	//inc Digital
	Digital++;
	if(Digital>=8)
	{
		Digital=0;
		if(STARTSWITCH)
		{
//			if(CodeSwitchStart)
//			{
//				CodeSwitchStart=0;
//				CodeSwitchOk=1;
//			}
//			if(!CodeSwitchOk) CodeSwitchStart=1;
			CodeSwitchStart=1;
		}
	}

/*	InP=INPORT^INKEYPORT;
	InP3=InP&InP2;
	InP2=InP&InP1&(~InP3);
	InP1=InP&(~InP3);
	InP^=INPORT;
	InP&=InP3;
	INPORT&=~InP3;
	INPORT|=InP;
*/		
	if(td) td--;
/*	here=1;

	if(!(--cn))
	{
		cn=100;
//		SMG^=0x80; 
		tlong--;
	}
*/
	if(twinkle)
	{
		if(!(--tn))
		{
			tn=TWINKLETIME;
			OKLED=~OKLED;
			NGLED=~NGLED;
		}
	}
//	Clock=0;
}
void Delay2ms(int a)
{
	td=a;
	while(td);
}
/*
bit TestS(bit a,bit A)
{
	if(a)
	{
		if(!A&!A&!A&!A) a=0;
	}
	else
	{
		if(A&A&A&A) a=1;
	}
	return(a);
}*/

⌨️ 快捷键说明

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