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

📄 22.c

📁 一些常用的74系列芯片好壞的檢測程序
💻 C
📖 第 1 页 / 共 2 页
字号:
void ClockUp19(void)
{
	P1_4=0;
	_nop_();
	P1_4=1;
	_nop_();	
}
void ClockDown19(void)
{
	P1_3=0;
	_nop_();
	P1_3=1;
	_nop_();

}
/*****************************************************/
/*                IC74192检测程序                    */
/*****************************************************/

uchar IC74192(void)
{	

	P1=0x7f;
	P0=0xff;

	P0_2=1;
	if(Output19()!=0)
		return 0;
	
	P0_2=0;
	P0_5=0;
	for(i=0;i<16;i++)
	{
		Input19(i);
		if(Output19()!=i)
			return 0;
	}

	P0_2=0;
	P0_5=1;
	P0_2=1;
	_nop_();
	P0_2=0;

	for(i=0;i<9;i++)
	{
		
		if(Output19()!=i)
			return 0;
		ClockUp19();	
	}

	
	P1_4=0;
	
	if(P0_4!=0)
		return 0;
	P1_4=1;
 	
	_nop_();

	P1_3=0;
	_nop_();
	if(P0_3!=0)
		return 0;
	P1_3=1;

	for(i=10;i>0;i--)
	{
		if(Output19()!=(i-1))
			return 0;
		ClockDown19();
	}

	return 1;
}
/*****************************************************/
/*                IC74193检测程序                    */
/*****************************************************/
uchar IC74193(void)
{
	

	P1=0x7f;
	P0=0xff;

	P0_2=1;
	if(Output19()!=0)
		return 0;
	
	P0_2=0;
	P0_5=0;
	for(i=0;i<16;i++)
	{
		Input19(i);
		if(Output19()!=i)
			return 0;
	}

	P0_2=0;
	P0_5=1;
	P0_2=1;
	_nop_();
	P0_2=0;

	for(i=0;i<15;i++)
	{
		
		if(Output19()!=i)
			return 0;
		ClockUp19();	
	}

	
	P1_4=0;
	
	if(P0_4!=0)
		return 0;
	P1_4=1;
 	
	_nop_();

	P1_3=0;
	_nop_();
	if(P0_3!=0)
		return 0;
	P1_3=1;

	for(i=16;i>0;i--)
	{
		if(Output19()!=(i-1))
			return 0;
		ClockDown19();
	}

	return 1;
    
}
/****************************************************/
/*               IC74161    检测信号设置            */
/*				  输入输出信号设置					*/
/****************************************************/
 
void Input161(unsigned char input)
{
	
	P1_5=input&0x08;
	P1_4=input&0x04;
	P1_3=input&0x02;
	P1_2=input&0x01;
}


unsigned char Output161(void)
{
   unsigned char output=0;
   output=((P0&0x3c)>>2);  	
}
void ClockU161(void)
{
	P1_1=0;
	_nop_();
	_nop_();
	P1_1=1;
	_nop_();
	_nop_();	
}
uchar IC74161(void)
{
uchar temp;
	P1=0x7f;
	P0=0xff;
	P1_0=0;
	if(Output161()!=0)
	return 0;
		P1_0=1;
		P0_7=0;
		for(i=0;i<16;i++)
		{
		   Input161(i);
		  ClockU161();
		   if(Output161()!=i)
		   return 0;
		}
	
		temp=Output161();
		P1_6=0;
		ClockU161();
		if(temp!=Output161())
		return 0;
		P0_6=0;
		ClockU161();
		if(temp!=Output161())
		return 0;
	P1=0x7f;
	P0=0xff;
	_nop_();
	P1_0=0;
	_nop_();//清0
	P1_0=1;
	for(i=0;i<15;i++)
	{
		if(Output161()!=i)
		return 0;
		ClockU161();
	}	
	 if(P0_1!=1)
	 return 0;
	 ClockU161();
	 if(Output161()!=0)
	 	return 0;
     else 
	 return 1;

}
/***************************************************/
/*              设置数码管                         */
/***************************************************/
void SetLED(unsigned char led0,unsigned char led1,unsigned char led2,unsigned char led3,unsigned char led4,unsigned char led5)
{
		LED[0]=led0;
		LED[1]=led1;
		LED[2]=led2;
		LED[3]=led3;
		LED[4]=led4;
		LED[5]=led5;
}
/***************************************************/
/*              自动检测                           */
/***************************************************/
unsigned char ICANY(void)
{
//	unsigned char flag=0;
	if(IC4001())
	{
		SetLED(10,10,4,0,0,1);
//		flag=1;
		return 1;
	}
	if(IC4011())
	{
		SetLED(10,10,4,0,1,1);
//		flag=1;
		return 1;
	}
	if(IC4030())
	{
		SetLED(10,10,4,0,3,0);
//		flag=1;
		return 1;
	}
	if(IC4071())
	{
		SetLED(10,10,4,0,7,1);
//		flag=1;
		return 1;
	}

	if(IC4069())
	{
		SetLED(10,10,4,0,6,9);
//		flag=1;
		return 1;
	}

	if(IC7420())
	{
		SetLED(10,10,7,4,2,0);
//		flag=1;
		return 1;
	}
	if(IC74138())
	{
		SetLED(10,7,4,1,3,8);
//		flag=1;
		return 1;
	}

	if(IC7442())
	{
		SetLED(10,10,7,4,4,2);
//		flag=1;
		return 1;
	}
	if(IC7474())
	{
		SetLED(10,10,7,4,7,4);
//		flag=1;
		return 1;
	}
	if(IC74112())
	{
		SetLED(10,7,4,1,1,2);
//		flag=1;
		return 1;
	}
		if(IC74192())
	{
		SetLED(10,7,4,1,9,2);
//		flag=1;
		return 1;
	}
		if(IC74193())
	{
		SetLED(10,7,4,1,9,3);
//		flag=1;
		return 1;
	}
		if(IC74161())
	{
		SetLED(10,7,4,1,6,1);
//		flag=1;
		return 1;
	}
	return 0;
}
/******************************************************************/
/*             手动检测 按钮0 改变芯片型号                        */
/******************************************************************/

static void select(void) interrupt 0
{
	EA=0;
	//P2_7=1;
	chip++;
	if(chip==14)
		chip=0;
	switch(chip)
	{
	case 0:
		SetLED(10,11,17,18,1,13);
		break;//最后芯片
	case 1:
		SetLED(10,10,4,0,3,0);
		break;//显示芯片型号,等待中断1,确定
	case 2:
		SetLED(10,10,4,0,6,9);
		break;
   	case 3:
		SetLED(10,7,4,1,3,8);
		break;
	case 4:
		SetLED(10,10,4,0,1,1);
		break;
	case 5:
		SetLED(10,10,4,0,7,1);
		break;
	case 6:
		SetLED(10,10,7,4,2,0);
		break;
	case 7:
		SetLED(10,10,7,4,4,2);
		break;
	case 8:
		SetLED(10,10,4,0,0,1);
		break;
	case 9:
		SetLED(10,10,7,4,7,4);
		break;
	case 10:
		SetLED(10,7,4,1,1,2);
		break;
	case 11:
		SetLED(10,7,4,1,9,2);
		break;
	case 12:
		SetLED(10,7,4,1,9,3);
		break;
	 case 13:
		SetLED(10,7,4,1,6,1);
		break;
	}

	EA=1;
}
/********************************************************************/
/*               手动检测 按钮1 确定芯片型号                        */
/********************************************************************/
static void test(void) interrupt 2
{
	unsigned char bool;
	EA=0;
    
	switch(chip)
	{
	case 0:
		bool=ICANY();
		break;
	case 1:
		bool=IC4030();
		break;//确定后,转到子函数,执行后得出BOOL的值跳到下面输出信息
	case 2:
		bool=IC4069();
		break;
   	case 3:
		bool=IC74138();
		break;
	case 4:
		bool=IC4011();
		break;
	case 5:
		bool=IC4071();
		break;
	case 6:
		bool=IC7420();
		break;
	case 7:
		bool=IC7442();
		break;
	case 8:
		bool=IC4001();
		break;
	case 9:
		bool=IC7474();
		break;
	case 10:
		bool=IC74112();
		break;
	case 11:
		bool=IC74192();
		break;
	case 12:
		bool=IC74193();
		break;
	case 13:
		bool=IC74161();
		break;
	}
	if(bool)
		LED[0]=20;	//PASS
	else
		LED[0]=15;	//ERROR
	P2_7=1;
	EA=1;
}
		






int main()
{
	chip=0;
	IT0=1;
	IT1=1;
	EX0=1;
	EX1=1;
	EA=1;
	while(1)
	{
/***************************************************/
/*               数码管显示                        */
/***************************************************/			
		for(i=0;i<6;i++)
		{
			P3=flush[i];//点亮6个数码管的位选
			P2=seg[LED[i]];//给数码管付初值
			delay(50);//时间很短,同时显示,等待中断0
		}
	}

}

⌨️ 快捷键说明

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