📄 22.c
字号:
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 + -