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

📄 gressy.c

📁 测试手机底盖安装部件
💻 C
字号:
//#define GRESSY 0
//#define TORCH1 1
//#define TORCH2 2
//#define TYPE GRESSY
#include <reg52.h>
#include <GRESSY.h>
void main(void)
{
	bit oldLAST=0;
	bit oldNEXT=0;
	unsigned int addr=0;
	unsigned char addrh=0,addrl=0;

	//LED TEST
//	start=1;
	PLAY=1;
	EA=0;
	Top1=0;DelayA();Top1=1;
	Top2=0;DelayA();Top2=1;
	Top3=0;DelayA();Top3=1;
	Top4=0;DelayA();Top4=1;
	Top5=0;DelayA();Top5=1;
	Top6=0;DelayA();Top6=1;
	Bot1=0;DelayA();Bot1=1;
	Bot2=0;DelayA();Bot2=1;
	Bot3=0;DelayA();Bot3=1;
	Bot4=0;DelayA();Bot4=1;
	Bot5=0;DelayA();Bot5=1;
	BELL=OKLED=0;DelayA();BELL=OKLED=1;

	isrecord=0;
//	isplay=0;
	Initial();
//	InitialINT();
//	LedTest();
//	Initial();
//	start=0;
	oldLAST=LAST;
	oldNEXT=NEXT;
//	playno=1;
	PowerUp();Delay(50);PowerUp();Delay(100);
	sd=0;BELL=1;
	PL=0;CLK=0;
	isrecord=0;
	ledchange=1;
	while(1)
	{
		if(PLAY|REC)
		{
			if(PLAY)
			{
//				RECERROR=1;RECLED=1;
//				RECSEL=1;
//				isrecord=0;
//				if(!isplay)
//				{
//					if(playno<1||playno>MAXNO) playno=1;
//					isplay=1;
//					ledchange=1;
//				}
				//SET ADDRESS AND PLAY
				if((!INT)||ledchange)
				{
					if(ledchange)
					{
						Stop();
						Delay(200);
						if(playno<1||playno>MAXNO) playno=1;
						addr=(playno-1)*PERDURATION;
						addrl=addr%256;
						addrh=addr>>8;
	//					SMG=~(LED[playno]);
						ledchange=0;
					}
					SetPlay(addrl,addrh);
					Play();
				}
				MUTEOUT=(md?0:1);
				//CHANNEL CHANGE
				if(!LAST||!NEXT)
				{
					if(oldLAST&&LAST)
					{
						if(playno<=1||playno>MAXNO) playno=MAXNO;else playno--;
						sd=SHOWTIME;
						ledchange=1;
					}
					if(oldNEXT&&NEXT)
					{
						if(playno<1||playno>=MAXNO) playno=1;else playno++;
						sd=SHOWTIME;
						ledchange=1;
					}
				}
			}
			else
			{
//				isplay=0;RECSEL=0;
//				if(!isrecord)
//				{
//					ledchange=1;
//					isrecord=1;
//					if(playno<1||playno>MAXNO) playno=1;
//				}
				RECLED=0;   //ON
				if(ledchange)
				{
					Stop();
					Delay(200);
					if(playno<1||playno>MAXNO) playno=1;
					addr=(playno-1)*PERDURATION;
					addrl=addr%256;
					addrh=addr>>8;
//					SMG=~(LED[playno]);
					ledchange=0;
				}
				if(LAST)
				{
					if(NEXT)
					{
						while(LAST||NEXT);
						Delay(1000);
					}
					else
					{
	/*					PowerUp();
						Delay(5);
						PowerUp();
						Delay(10);
	*/
						RECERROR=1;  //OFF
						SetRec(addrl,addrh);
	//					Delay(1);
						Rec();
						isrecord=1;
						td=MAXRECTIME;
						while(STSP&&td&&REC){if(!OUTOFRANGE) ed=20;}
						while((!STSP)&&td&&REC){if(!OUTOFRANGE) ed=20;}
						Stop();
						RECERROR=1;			//off
						Bot3=1;
						isrecord=0;
	//					StopPwrdn();
	//					Delay(1);
						while(STSP);
					}
				}
				ledchange=0;
				if(oldNEXT&&NEXT)
				{
					if(playno<1) playno=1;
					if(playno>=MAXNO)
					{
						playno=1;
						RECLED=1;
	
						BELL=1;   //off
				 		OKLED=1;	//off
						Top1=Top2=Top3=Top4=Top5=Top6=Bot1=Bot2=Bot3=Bot4=Bot5=1;
						PLAY=1;
						Delay(200);
						Bot3=1;
					}
					else
					{
						playno++;
					}
					ledchange=1;
					sd=SHOWTIME;
				}
			}
			oldLAST=!LAST;
			oldNEXT=!NEXT;
		}
		else
		{
//			StopPwrdn();
			Stop();
			Delay(200);
//			SMG=~0;
//			isplay=0;
			isrecord=0;ledchange=0;
			RECERROR=1;
		}

	}
}
void Initial(void)
{
	P0=P1=P2=P3=0xff;
//	RECLED=1;
	INPORT=0XFF;
	TMOD=0X11;
	TR0=1;
	EX0=0;
	ET0=1;
	EA=1;
	TL0=CYCLE % 256;
	TH0=CYCLE/256;
}
void SendByte(char ssd)
{
	char i;
	unsigned char shd;
	for(shd=1,i=0;i<8;i++,shd<<=1)
	{
		
		SCLK=0;
		MOSI=shd&ssd?1:0;
		SCLK=0;
		SCLK=0;
		SCLK=0;
		SCLK=0;
		SCLK=0;
		SCLK=0;
		SCLK=0;
		SCLK=1;
		SCLK=1;
		SCLK=1;
		SCLK=1;
		SCLK=1;
		SCLK=1;
		SCLK=1;
	}
	MOSI=0;
	SCLK=0;
}
void PowerOff (void) interrupt INT0INT
{
//	StopPwrdn();
	EA=0;
	ET0=0;
	P0=P1=P2=P3=0;
	PCON|=0x2;	
}
void Timems (void) interrupt TIMER0INT
{
	#define IO1	1
	#define S1	2
	#define MOT	4
	#define T3	8
	#define T2	0X10
	#define T1	0X20
	#define IO2 0X40
	#define H1	0X80
	#define IO106	0X100
	#define IO104	0X200
	#define IO105	0X400
	#define IO103	0X1000
	#define IO101	0X2000
	#define IO102	0X4000

	#define RECTIMETEST 500
	static unsigned char ft=FLASHTIME;
	static bit fd,TestBit=0;
	static char InP1=0,InP2=0;
	static int RecTimeTest=RECTIMETEST;
	char InP,InP3;
	static char OKNUM=0;
	static unsigned char TestDelay;
	static bit CloseTestBit;
	char i;
	static bit IsStart=1;
	bit OnceOk;
	#define ClearDisplay OnceOk
	#define Start (!RECERROR)
	TL0=CYCLE % 256;
	TH0=CYCLE/256;

	//KEY TEST
	InP=INPORT^P1;
	InP3=InP&InP2;			//count 3
	InP2=InP&InP1&(~InP3);
	InP1=InP&(~InP3);
	InP^=INPORT;			//InP=PP1
	InP&=InP3;
	INPORT&=~InP3;
	INPORT|=InP;

	if(PLAY)
	{
		//IO TEST
		PL=0;PL=0;PL=1;
		//Input=0;
		for(i=0;i<16;i++)
		{
			Input<<=1;
			if(!DATA) Input++;
			CLK=1;CLK=1;CLK=0;
		}
		PL=0;
	
		//Once OK DETECT
		switch(P1&0XC)
		{
		case 8:  //TORCH
		case 12:
			Input&=(H1|T1|T2|T3|MOT|S1|IO1|IO101|IO102|IO103);
			OnceOk=(Input==(H1|T1|T2|T3|MOT|S1|IO1|IO101|IO102|IO103));
			if(Input&0xff) CloseTestBit=1;
			if(!Input) CloseTestBit=0;
			if(!OK&&TestBit)   			//TestBit==1  mean Testing
			{
				Top1=(H1&Input);
				Top2=(IO101&Input);
				Top3=(IO1&Input);
				Top4=(MOT&Input);
				Top5=(S1&Input);
				Top6=(T3&Input);
				Bot1=(1);
				Bot2=(1);
				Bot3=(T1&Input)&&(T2&Input);
				Bot4=(IO103&Input);
				Bot5=(IO102&Input);
			}
			else
			{
				if(!sd) Top1=Top2=Top3=Top4=Top5=Top6=Bot1=Bot2=Bot3=Bot4=Bot5=1;
			}
			break;
		case 0:	//GRESSY
			Input&=(H1|IO2|T1|T2|T3|S1|IO1|IO101|IO102|IO103|IO104|IO105|IO106);
			OnceOk=(Input==(H1|IO2|T1|T2|T3|S1|IO1|IO101|IO102|IO103|IO104|IO105|IO106));
			if(Input&0xff) CloseTestBit=1;
			if(!Input) CloseTestBit=0;
			if(!OK&&TestBit)   			//TestBit==1  mean Testing
			{
				Top1=(H1&Input);
				Top2=(IO2&Input);
				Top3=(IO101&Input);
				Top4=(IO1&Input);
				Top5=(S1&Input);
				Top6=(T3&Input);
				Bot1=(IO104&Input);
				Bot2=(IO105&Input)&&(IO106&Input);
				Bot3=(T1&Input)&&(T2&Input);
				Bot4=(IO103&Input);
				Bot5=(IO102&Input);
			}
			else
			{
				if(!sd) Top1=Top2=Top3=Top4=Top5=Top6=Bot1=Bot2=Bot3=Bot4=Bot5=1;
			}
			break;
		case 4:  //GRESSY PART
			Input&=(H1|IO2|T1|T2|T3|IO1|IO101|IO102|IO103|IO105|IO106);
			OnceOk=(Input==(H1|IO2|T1|T2|T3|IO1|IO101|IO102|IO103|IO105|IO106));
			if(Input&0xff) CloseTestBit=1;
			if(!Input) CloseTestBit=0;
			if(!OK&&TestBit)   			//TestBit==1  mean Testing
			{
				Top1=(H1&Input);
				Top2=(IO2&Input);
				Top3=(IO101&Input);
				Top4=(IO1&Input);
				Top5=(1);	//(S1&Input);
				Top6=(T3&Input);
				Bot1=(1);	//(IO104&Input);
				Bot2=(IO105&Input)&&(IO106&Input);
				Bot3=(T1&Input)&&(T2&Input);
				Bot4=(IO103&Input);
				Bot5=(IO102&Input);
			}
			else
			{
				if(!sd) Top1=Top2=Top3=Top4=Top5=Top6=Bot1=Bot2=Bot3=Bot4=Bot5=1;
			}
			break;
		}
	
		//NG DELAY
		if(!IsStart&&Start)
		{
			OKLED=1;OnceOk=0;
		}
		IsStart=Start;
		if(Start) TestBit=CloseTestBit=1;
		if(TestBit==CloseTestBit)
		{
			TestDelay=TESTDELAYTIME;
		}
		else
		{
			if(TestDelay) //&&!OK)
			{
				TestDelay--;
			}
			else
			{
				TestBit=CloseTestBit;
			}
		}

		//OK detect
		if(!OK)
		{
			if(OnceOk)
			{
				//Once OK
				BELL=1;    //BELL NOT RING
				OKNUM++;
				if(OKNUM>=5)   //20 times OK
				{
					OKNUM=0;
					OKLED=0;  //OK LED LIGHT
				}
			}
			else
			{
				//NG
				OKNUM=0;
				if(TestBit) BELL=0;    //BELL RING
			}
		}
	
	
	
		//REC DETECT  (LAST AND NEXT TOUCH FOR 5 SECONDS)
//		ClearDisplay=0;
		if(!(P1&3))
		{
			if(RecTimeTest) RecTimeTest--;
			if(!RecTimeTest)
			{
				PLAY=0;
				playno=1;
				ledchange=1;
//				ClearDisplay=1;

//				BELL=1;   //off
//		 		OKLED=1;
//				Top1=Top2=Top3=Top4=Top5=Top6=Bot1=Bot2=Bot3=Bot4=Bot5=1;
			}
		}
		else
		{
			RecTimeTest=RECTIMETEST;
		}
	
		//	PLAY AND MUTE DELAY
		md=(MUTEIN?(md?md-1:md):20);   //20=0.2S

		//MUSIC SELECT DISPLAY DELAY
		if(sd) sd--; 
	}
	else
	{
		//RECORD ERROR DISPLAY DELAY
		if(isrecord)
		{
			if(ed)
			{
				ed--;			
				RECERROR=0;			//light
				Bot3=0;				//light
			}
			else
			{
				RECERROR=1;			//off
				Bot3=1;				//off
			}
		}
	}
	if(!TestBit||sd||REC) //||ClearDisplay)
	{
	//Clear DISPLAY   Reset OK and NG and display
		if(!TestBit||REC)
		{
			BELL=1;   //off
 			OKLED=1;//mean OK=0
		}
		Top1=Top2=Top3=Top4=Top5=Top6=Bot1=Bot2=Bot4=Bot5=1;
		if(sd||REC)
		{
			switch(playno)
			{
				case 1:Top1=fd;break;
				case 2:Top2=fd;break;
				case 3:Top3=fd;break;
				case 4:Top4=fd;break;
				case 5:Top5=fd;break;
				case 6:Top6=fd;break;
				case 7:Bot4=fd;break;
				case 8:Bot5=fd;break;
			}
			if(isrecord) OKLED=fd;				//light:mean recording
			if(ft)
			{
				ft--;
			}
			else
			{
	//			ft=REC?FLASHTIME:FLASHTIME/2;
				ft=FLASHTIME;
				fd=~fd;
			}
		}
/*		switch(playno)
		{
			case 1:Top1=fd;if(REC) Top2=Top3=Top4=Top5=Top6=Bot4=Bot5=1;break;
			case 2:Top2=fd;if(REC) Top1=Top3=Top4=Top5=Top6=Bot4=Bot5=1;break;
			case 3:Top3=fd;if(REC) Top1=Top2=Top4=Top5=Top6=Bot4=Bot5=1;break;
			case 4:Top4=fd;if(REC) Top1=Top2=Top3=Top5=Top6=Bot4=Bot5=1;break;
			case 5:Top5=fd;if(REC) Top1=Top2=Top3=Top4=Top6=Bot4=Bot5=1;break;
			case 6:Top6=fd;if(REC) Top1=Top2=Top3=Top4=Top5=Bot4=Bot5=1;break;
			case 7:Bot4=fd;if(REC) Top1=Top2=Top3=Top4=Top5=Top6=Bot5=1;break;
			case 8:Bot5=fd;if(REC) Top1=Top2=Top3=Top4=Top5=Top6=Bot4=1;break;
		}*/
	}
    //NORAL DELAY
	if(td) td--;	
}
void Delay(int a)
{
	td=a/10;
	while(td);
}
void DelayA()
{
	unsigned int i=50000;
	while(i--);
}


⌨️ 快捷键说明

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